将iptables转发规则自动更新到docker swarm

时间:2018-02-23 10:57:56

标签: docker iptables docker-swarm docker-networking docker-network

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

问题: 什么是跨多个群集节点动态升级iptables规则的最佳/可靠方法,以便轻松地将新客户端应用程序添加到新客户端主机。

方案的流程:

  1. 客户端主机直接连接到端口80 / tcp上的网络负载平衡器。
  2. 网络平衡器从客户端主机接收流量并重定向到池主机,这些主机是docker swarm节点。
  3. Docker swarm节点仅允许端口80 / tcp上的连接。
  4. 取决于客户端(源IP)的docker swarm节点上的IPTables规则会将流量重定向到正确的docker swarm服务(tcp端口)。
  5. 情景图片:

    场景(示例):

    • Docker Swarm Hosts

      • 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
      • pool = 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

1 个答案:

答案 0 :(得分:0)

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

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