如何将swarm中的service的端口暴露出去?
将swarm中的service端口暴露出去,供集群外的服务进行访问的 2 种方法:
1、路由网格
也就是在docker create service时,使用下面的参数
--publish published=<published_port>,target=<service_port>
2、将task端口直接映射到节点主机上
在创建service时,使用如下的参数,比上面多了个mode=host
--publish mode=host,published=<published_port>,target=<service_port>
这样,外部的请求就可以通过主机的端口对service中的服务进行访问了。
3、两者的区别?
- 路由网格,使用任意的主机的端口都可以访问
- 路由网格,节点上不一定必须运行task (比如:5个节点,一个实例,但是通过任意的节点都能访问)
- 直接端口映射,节点无task,无法访问 (比如:5个节点,一个实例,只有在节点所在的主机上才能访问这个服务,其他的节点无法访问)