【问题标题】:Auto-update iptables forwarding rules to the correspondent docker service port on a docker swarm自动更新 iptables 转发规则到 docker swarm 上对应的 docker 服务端口
【发布时间】:2018-08-03 09:57:48
【问题描述】:

目标: 有一个类似脚本的脚本,它将调用 Docker API 自动为新的客户端主机创建新服务,然后根据新的服务端口更新所有 swarm 节点上的 iptables 转发规则。

问题: 为了轻松地将新客户端应用程序添加到新客户端主机,跨多个集群节点动态更新 iptables 规则的最佳/稳健方法是什么。

场景流程:

  1. 客户端主机直接连接到端口 80/tcp 上的网络负载平衡器。
  2. 网络平衡器从客户端主机接收流量并重定向到作为 docker swarm 节点的池主机。
  3. Docker swarm 节点只允许端口 80/tcp 上的连接。
  4. 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


【解决方案1】:

确定一些可以帮助您决定解决方案的快速项目。这是截至 17.12 版本:

  • 听起来您说对了这部分,但提醒一下,Docker 服务的设计使该服务的所有副本都是相同的,并且在配置方面不是唯一的。
  • Docker 覆盖网络、路由网格和 VIP/DNSRR 功能无法根据客户端(原始)IP 路由流量。
  • 鉴于 Swarm 管理大量 iptables 规则,我会担心添加自己的外部 iptables 编辑解决方案。确保两者一起玩得很好可能会很棘手......但我从未尝试过。
  • 基于客户端 IP 的连接路由最可能的“Docker 方式”可能是使用 Traefik 或 Docker Flow Proxy,它们都支持 Swarm,并使用 nginx/haproxy 将传入连接的流量路由到 Swarm。他们通常根据请求的 DNS 名称或 URL 路径执行此操作,但他们应该能够根据客户端 IP 做出 Swarm 服务路由决策。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多