Rancher 1.6非Server主机端口转发异常,请求均跳转至Server主机
解决Rancher 1.6集群非Server节点端口转发到Host1的问题
问题根源
你的问题是Rancher 1.6的负载均衡服务配置错误,导致所有非Server节点(Host2/3/4)的iptables生成了针对Host1 IP的DNAT规则,把80/443请求强制转发到Host1上的Nginx容器。正常集群的规则用0.0.0.0/0作为目标地址,意味着请求会被转发到本地节点的容器,这是负载均衡监听所有主机地址的正确配置。
解决方案
1. 修正Rancher负载均衡服务配置
- 登录Rancher UI,找到负责Nginx转发的负载均衡服务
- 进入服务配置页面,检查端口映射:
- 确保监听IP设置为
0.0.0.0(绑定所有主机地址),而非Host1的IP5.67.218.11 - 确认目标服务选择的是集群中所有节点部署的Nginx服务,而非仅Host1上的单个容器。如果是通过Rancher Service部署的Nginx,直接选择该Service即可,Rancher会自动路由到本地节点的容器
- 确保监听IP设置为
- 保存配置,等待Rancher更新所有节点的iptables规则
2. 检查容器端口发布模式
如果未使用Rancher负载均衡,直接发布Nginx容器端口:
- 确保容器的
hostPort绑定到0.0.0.0,而非指定Host1的IP - 在Rancher容器部署配置中,端口格式应为
80:80(默认绑定所有地址),而非5.67.218.11:80:80
3. 重置节点的iptables规则(配置修改后未生效时)
若修改配置后规则未自动更新,手动清理错误规则并重启rancher-agent:
# 删除针对Host1 IP的错误DNAT规则 iptables -t nat -D PREROUTING -d 5.67.218.11/32 -p tcp --dport 80 -j DNAT --to-destination 10.42.204.73:80 iptables -t nat -D PREROUTING -d 5.67.218.11/32 -p tcp --dport 443 -j DNAT --to-destination 10.42.204.73:443 # 重启rancher-agent让Rancher重新生成正确规则 docker restart rancher-agent
4. 验证Nginx容器网络配置
在Host2/3/4上执行docker inspect <nginx-container-id>,确认HostConfig.PortBindings中80/tcp和443/tcp的HostIp是0.0.0.0,确保容器端口绑定到本地主机的所有地址。
内容的提问来源于stack exchange,提问作者Rodion Baskakov
相关产品推荐
相关产品推荐

