docker swarm外部驗證負載均衡時不生效


問題描述

我在本地創建了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集群前必須開放7946tcp/udp端口, 4789udp端口, 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM