CCE IP Masquerade Agent 用户指南
本文档会详细展示如何配置 cce-ip-masq-agent
, 用户可以灵活地将各种配置进行组合,满足容器流量出节点时身份的选择。
快速开始
关键术语
- NAT (网络地址解析) 是一种通过修改 IP 地址头中的源和/或目标地址信息将一个 IP 地址重新映射到另一个 IP 地址的方法。通常由执行 IP 路由的设备执行。
- Masquerade NAT 的一种形式,通常用于执行多对一地址转换,其中多个源 IP 地址被隐藏在单个地址后面,该地址通常是执行 IP 路由的设备。在 Kubernetes 中,这是节点的 IP 地址。
- CIDR (无类别域间路由) 基于可变长度子网掩码,允许指定任意长度的前缀。CIDR 引入了一种新的 IP 地址表示方法,现在通常称为CIDR表示法,其中地址或路由前缀后添加一个后缀,用来表示前缀的位数,例如 192.168.2.0/24。
原理介绍
cce-ip-masq-agent
以 daemonset 形式部署,在每个节点上启动一个代理程序。代理程序通过配置 iptables 规则,在将容器流量发送到集群节点的 IP 和集群 IP 范围之外的目标时, 可以选择以容器自己的 IP 地址或伪装成节点的 IP 地址作为出向流量的源地址。代理程序会每隔 60 秒从 /etc/config/ip-masq-agent 重新加载其配置,更新 iptables 规则。
代理程序配置的的 iptables 规则是在 POSTROUTING 链上添加自定义链 IP-MASQ-AGENT, 通过判断 IP-MASQ-AGENT 链中每一条规则是否匹配,来决定出向流量是否需要进行伪装。
安装步骤
1. 选择插件
cce-ip-masq-agent
是CCE的扩展组件,第一步需要手动在CCE控制台->Helm->Helm模板->百度智能云模板中选择安装。
如上图,点击安装按钮,进入插件安装页面。
2. 安装参数
插件安装的第二步是配置必要参数:
- 实例名:插件的Helm实例名,支持自定义。推荐设置
cce-ip-masq-agent
。 - 部署集群:选择需要安装插件的目标集群。
- 命名空间:推荐将CCE系统组件安装到
kube-system
命名空间。 - 模板内容:当前版本模板内容用于配置
cce-ip-masq-agent
的镜像版本,推荐使用以下版本:
CNIMasqAgentImage: registry.baidubce.com/cce-plugin-pro/cce-cni:v1.3.4
默认情况下,代理配置会将 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。
注意: 用户在修改 cce-ip-masq-agent
配置时,需要保证容器网段、节点网段均处于非伪装 CIDR 内,否则可能造成容器网络连通性问题。
高级配置
cce-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 路由牵引的方式访问公网。
容器伪装成节点身份
该配置通常应用于以下场景:
- 容器希望以节点的公网 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: 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) */
该配置下,只要节点能访问公网,容器就能够访问公网。
容器仅针对某些地址伪装成节点
该配置通常应用于以下场景:
- 集群内的容器希望访问和当前集群是处于同一个 VPC 内有白名单或安全组(例如仅允许 VPC 内 IP 进行访问)的虚机或服务
- 集群内的容器希望访问与当前 VPC 建立对等连接或专线的另一个 VPC 或私有网络空间内的虚机上的服务
例如用户的网络拓扑中, 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 */