docker swarm外部验证负载均衡时不生效的解决方案
作者:Laggage
这篇文章主要介绍了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集群前必须开放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
到此这篇关于docker swarm外部验证负载均衡时不生效的文章就介绍到这了,更多相关docker swarm负载均衡内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- docker安装nginx实现对springboot项目的负载均衡的操作方法
- docker swam集群如何实现负载均衡
- Docker安装Nacos容器并根据Nginx实现负载均衡
- docker搭建nginx实现负载均衡的示例代码
- 基于Docker部署Tomcat集群、 Nginx负载均衡的问题小结
- Docker Nginx容器和Tomcat容器实现负载均衡与动静分离操作
- 使用Docker Compose 实现nginx负载均衡的方法步骤
- 详解Docker Swarm服务发现和负载均衡原理
- 详解利用nginx和docker实现一个简易的负载均衡
- Docker部署tenine实现后端应用的高可用与负载均衡(推荐)