免费资源网 – https://freexyz.cn/
问题描述
我在本地创建了3个装了centos7的虚拟机, 并初始化了swarm集群, 即1个manager节点, 2个worker节点; 三台机子的ip分别是 192.168.124.8 – (manager节点), 192.168.124.9 – (worker节点), 192.168.124.10 – (worker节点)
[root@localhost ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION j0f4up8v7epacp3vceby4exsz localhost.localdomain Ready Active 19.03.13 qeeqc10gl9e56w61pajjqle08 localhost.localdomain Ready Active 19.03.13 r5sg5m9dkwcu76t56hg0vu29t * localhost.localdomain Ready Active Leader 19.03.14然后我通过下面的命令在swarm集群上起了一个服务
docker service create –name test-vote –replicas 2 –constraint node.role==worker –publish 8080:80 registry.cn-hangzhou.aliyuncs.com/anoy/vote直接curl 工作者节点ip:端口 是可以拿到响应的, 但是返回的containerId一直不变, 并且如果直接访问manager节点的话是拿不到响应的, 似乎是负载均衡没有生效!
解决
经过一番搜索, 在stack overflow上找到了答案,https://stackoverflow.com/questions/48360577/docker-swarm-mode-routing-mesh-not-working
原来是防火墙的问题, 按照文档的说法, 要让 swarm mode routing mesh 生效的话, 在初始化swarm集群前必须开放7946的tcp/udp端口, 4789的udp端口,https://docs.docker.com/engine/swarm/ingress/
所以如果是centos可以用下面的脚本开放端口, swarm集群里的每个主机都需要开放, 图方便这两个端口的tcp和udp都开放了; 开放完端口后还需要重启一下机器
firewall-cmd –permanent –zone=public –add-port=4789/tcp && firewall-cmd –permanent –zone=public –add-port=7946/tcp && firewall-cmd –permanent –zone=public –add-port=4789/udp && firewall-cmd –permanent –zone=public –add-port=7946/udp && firewall-cmd –reload && # 重启 sudo reboot免费资源网 – https://freexyz.cn/
© 版权声明
THE END
暂无评论内容