【发布时间】:2018-08-03 09:57:48
【问题描述】:
目标: 有一个类似脚本的脚本,它将调用 Docker API 自动为新的客户端主机创建新服务,然后根据新的服务端口更新所有 swarm 节点上的 iptables 转发规则。
问题: 为了轻松地将新客户端应用程序添加到新客户端主机,跨多个集群节点动态更新 iptables 规则的最佳/稳健方法是什么。
场景流程:
- 客户端主机直接连接到端口 80/tcp 上的网络负载平衡器。
- 网络平衡器从客户端主机接收流量并重定向到作为 docker swarm 节点的池主机。
- Docker swarm 节点只允许端口 80/tcp 上的连接。
- docker swarm 节点上的 IPTables 规则取决于客户端(源 IP)将流量重定向到正确的 docker swarm 服务(tcp 端口)。
场景图片:
场景(示例):
-
Docker Swarm 主机
- master01 = ip 10.20.30.100
- node01 = ip 10.20.30.161
- node02 = ip 10.20.30.162
-
Docker Swarm 服务
- app01 = 端口 8081/tcp(属于 client01)
- app02 = 端口 8082/tcp(属于 client02)
-
客户端主机
- client01 = ip 192.168.10.100
- client02 = ip 192.168.10.200
-
网络负载平衡器
- network-lb = ip 10.10.10.10
- 池 = ip [10.20.30.161, 10.20.30.162]
-
Swarm 节点上的 IPTables 规则
- iptables -t nat -I PREROUTING -p tcp -s 192.168.10.100 --dport 80 -j REDIRECT --to-port 8081
- iptables -t nat -I PREROUTING -p tcp -s 192.168.10.200 --dport 80 -j REDIRECT --to-port 8082
【问题讨论】:
-
有了 Swarm 路由网格和 VIP 等功能,为什么需要手动触摸 iptables?
-
是否可以将每个节点接收到的请求转发到正确的服务端口,具体取决于使用 swarm 路由网格的客户端主机 (IP)?你能分享一个链接吗?事实上,我宁愿不接触 iptables 并使用类似 docker 的方法。
-
您在以下链接中谈论“配置外部负载均衡器”,对吧? docs.docker.com/engine/swarm/ingress/#bypass-the-routing-mesh
标签: docker iptables docker-swarm docker-networking docker-network