CCE IP Masquerade Agent 用户指南
所有文档

          容器引擎 CCE

          CCE IP Masquerade Agent 用户指南

          本文档会详细展示如何配置 ip-masq-agent, 用户可以灵活地将各种配置进行组合,满足容器流量出节点时身份的选择。

          快速开始

          关键术语

          • NAT (网络地址解析) 是一种通过修改 IP 地址头中的源和/或目标地址信息将一个 IP 地址重新映射到另一个 IP 地址的方法。通常由执行 IP 路由的设备执行。
          • Masquerade NAT 的一种形式,通常用于执行多对一地址转换,其中多个源 IP 地址被隐藏在单个地址后面,该地址通常是执行 IP 路由的设备。在 Kubernetes 中,这是节点的 IP 地址。
          • CIDR (无类别域间路由) 基于可变长度子网掩码,允许指定任意长度的前缀。CIDR 引入了一种新的 IP 地址表示方法,现在通常称为CIDR表示法,其中地址或路由前缀后添加一个后缀,用来表示前缀的位数,例如 192.168.2.0/24。

          原理介绍

          ip-masq-agent 以 daemonset 形式部署,在每个节点上启动一个代理程序。代理程序通过配置 iptables 规则,在将容器流量发送到集群节点的 IP 和集群 IP 范围之外的目标时, 可以选择以容器自己的 IP 地址或伪装成节点的 IP 地址作为出向流量的源地址。代理程序为每隔 60 秒从 /etc/config/ip-masq-agent 重新加载其配置,更新 iptables 规则。

          代理程序配置的的 iptables 规则是在 POSTROUTING 链上添加自定义链 IP-MASQ-AGENT, 通过判断 IP-MASQ-AGENT 链中每一条规则是否匹配,来决定出向流量是否需要进行伪装。

          CCE 集群默认部署 ip-masq-agent 组件。默认情况下,代理配置为将 RFC 1918 指定的三个私有 IP 范围视为非伪装 CIDR。 这些范围是 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16。 默认情况下,代理程序还将链路本地地址(169.254.0.0/16)视为非伪装 CIDR。

          高级配置

          ip-masq-agent 的配置来自于 configMap,可以通过 kubectl edit cm cce-ip-masq-agent -n kube-system 来查看或修改配置。修改完配置后,过一段时间后(默认配置下约 60s)配置生效,代理程序会自动更新 iptables 规则。

          常用的配置选项如下:

          • masqueradeCIDRs []string: 用于指定伪装范围
          • nonMasqueradeCIDRs []string: 用于指定非伪装范围
          • masqOutBound bool: 排除 IPv4 nonMasqueradeCIDRs,是否伪装其他所有范围
          • masqOutBoundIPv6 bool: 排除 IPv6 nonMasqueradeCIDRs,是否伪装其他所有范围
          • masqLinkLocal bool: 是否伪装到的流量 169.254.0.0/16
          • masqLinkLocalIPv6 bool: 是否伪装到的流量 fe80::/10
          • resyncInterval string: 代理重新加载配置的时间间隔

          需要说明的是,IP-MASQ-AGENT 链中,masqueradeCIDRs 生成的规则总是在 nonMasqueradeCIDRs 生成的规则之前,配置 masqueradeCIDRs 通常是为了针对 nonMasqueradeCIDRs 中某个 IP 地址或者网段进行伪装。

          典型场景

          容器以自己身份出节点

          配置:

              nonMasqueradeCIDRs:
                - 10.0.0.0/8
                - 172.16.0.0/12
                - 100.64.230.0/24
                - 192.168.0.0/16
                - fc00::/7
              masqOutBound: false
              masqOutBoundIPv6: true
              masqLinkLocal: false
              masqLinkLocalIPv6: false
              resyncInterval: 60s

          IP-MASQ-AGENT 链规则:

          Chain IP-MASQ-AGENT (1 references)
           pkts bytes target     prot opt in     out     source               destination
              0     0 RETURN     all  --  *      *       0.0.0.0/0            169.254.0.0/16       /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            10.0.0.0/8           /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              1    71 RETURN     all  --  *      *       0.0.0.0/0            172.16.0.0/12        /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            100.64.230.0/24      /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.0/16       /* ip-masq-agent: local traffic is not subject to MASQUERADE */

          该配置下,容器通常采用 NAT 网关与 VPC 路由牵引的方式访问公网。

          容器伪装成节点身份

          配置:

            nonMasqueradeCIDRs:
                - 10.0.0.0/8
                - 172.16.0.0/12
                - 100.64.230.0/24
                - 192.168.0.0/16
                - fc00::/7
              masqOutBound: true
              masqOutBoundIPv6: true
              masqLinkLocal: false
              masqLinkLocalIPv6: false
              resyncInterval: 60s

          IP-MASQ-AGENT 链规则:

          Chain IP-MASQ-AGENT (1 references)
           pkts bytes target     prot opt in     out     source               destination
              0     0 RETURN     all  --  *      *       0.0.0.0/0            169.254.0.0/16       /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            10.0.0.0/8           /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              4   240 RETURN     all  --  *      *       0.0.0.0/0            172.16.0.0/12        /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            100.64.230.0/24      /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.0/16       /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              1    76 MASQUERADE  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* ip-masq-agent: outbound traffic is subject to MASQUERADE (must be last in chain) */

          该配置下,只要节点能否访问公网,容器就能够访问公网。

          容器仅针对某些地址伪装成节点

          例如用户的网络拓扑中, 10.10.10.10/32 是某个服务 VIP,只能从节点进行访问。

          配置:

              masqueradeCIDRs:
                - 10.10.10.10/32
              nonMasqueradeCIDRs:
                - 10.0.0.0/8
                - 172.16.0.0/12
                - 100.64.230.0/24
                - 192.168.0.0/16
                - fc00::/7
              masqOutBound: false
              masqOutBoundIPv6: true
              masqLinkLocal: false
              masqLinkLocalIPv6: false
              resyncInterval: 60s

          IP-MASQ-AGENT 链规则:

          Chain IP-MASQ-AGENT (1 references)
           pkts bytes target     prot opt in     out     source               destination
              0     0 MASQUERADE  all  --  *      *       0.0.0.0/0            10.10.10.10          /* ip-masq-agent: specific outbound traffic is subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            169.254.0.0/16       /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            10.0.0.0/8           /* ip-masq-agent: local traffic is not subject to MASQUERADE */
            225 15788 RETURN     all  --  *      *       0.0.0.0/0            172.16.0.0/12        /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            100.64.230.0/24      /* ip-masq-agent: local traffic is not subject to MASQUERADE */
              0     0 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.0/16       /* ip-masq-agent: local traffic is not subject to MASQUERADE */
          上一篇
          CCE 支持 IPv4 和 IPv6 双栈网络
          下一篇
          对等连接场景下容器流量转发配置