2017-07-01 106 views
0

如何访问多主机docker swarm上的群集服务。码头群访问服务

对于泊坞窗群,可以说,该服务被命名为:ABC,PQR,XYZ

如果服务被放置在同一主机,它们能够通过http://pqr/ahttp://xyz/a

访问

但如果他们在不同主机,他们无法访问http://pqr/ahttp://xyz/a。即使ping到其他服务名称也不起作用。

docker service create --constraint 'node.labels.momachinename == t4301' --name abc --network=ni_default mo-vo:7.10.0s node /a/src/start.js 

docker service create --constraint 'node.labels.momachinename == t4302' --name pqr --network=ni_default mo-vo:7.10.0s node /a/src/start.js 

docker network ls 
NETWORK ID   NAME    DRIVER    SCOPE 
d7478273de19  bridge    bridge    local 
485112e08c0f  docker_gwbridge  bridge    local 
c8a75eb27f1f  host    host    local 
5rmqgswur2lp  ingress    overlay    swarm 
q26p8tdr0xw6  networld   overlay    swarm 
d2kf3bfdbmol  ni_default   overlay    swarm 
64094b86b804  none    null    local 
+0

实际上,它应该从另一个主机上运行,​​你使用了“docker overlay network”(在多主机上下文中使用服务名称DNS所需的)吗? –

+0

@FrançoisMaturel..编辑的命令.. – andNn

+0

命令似乎很好,也覆盖网络...您从哪里发出http/ping命令?主机还是运行容器? –

回答

1

从你的症状,这听起来像你有相同的覆盖网络上运行的容器,并使用同一台主机上的DNS解析可以沟通,但你只是有主机之间的问题。对于主机之间的重叠网络,则需要以下防火墙规则:

iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT 
iptables -A INPUT -p tcp -m udp --dport 7946 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 4789 -j ACCEPT 
iptables -A INPUT -p 50 -j ACCEPT 

这对TCP/UDP端口7946(这是控制端口),端口4789的TCP(这是数据端口)和协议50 (需要使用IPSEC的安全网络)。