全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

使用ip-masq-agent控制容器服务的SNAT规则

最近更新时间:2022-11-22 10:31:46

金山云容器服务的独立部署集群、托管集群中默认安装了 ip-masq-agent,Pod 之间跨节点相互访问以及 Pod 访问同 VPC 内其他节点时将不对 Pod 的 IP 地址做 SNAT。

注:在2022年8月30日后创建的独立集群或2022年11月8日后创建的托管集群才会默认安装ip-masq-agent

ip-masq-agent简介

名词解释

  • SNAT: 是一种通过修改 IP 地址头中的源地址信息将一个 IP 地址重新映射到另一个IP地址的方法。通常由 IP 路由设备执行。
  • 伪装(Masquerading): SNAT 的一种形式,通常用于执行多对一地址转换,其中多个源 IP 地址被隐藏在单个地址后面,该地址通常是执行 IP 路由的设备。在 Kubernetes 中,伪装是将 Pod 的 IP 地址隐藏在节点 IP 地址后面。

原理介绍

ip-masq-agent 以 daemonset 形式部署,在每个节点上启动一个代理程序。代理程序通过配置 iptables 规则,在将 Pod 流量发送到本集群的 Pod CIDR 或者当前 VPC 网段内时,可以选择以 Pod 自己的 IP 地址或伪装成节点的 IP 地址作为出向流量的源地址。代理程序默认每隔 60 秒从名为 ip-masq-agent-config 的 ConfigMap 中重新加载其配置,更新 iptables 规则。

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

配置项

ip-masq-agent 配置文件必须使用 YAML 或 JSON 语法编写,并且包含三个可选值:

  • nonMasqueradeCIDRs: CIDR 表示法中的字符串列表,用于指定不需伪装的地址范围。

  • masqLinkLocal: 布尔值 (true / false),表示是否将流量伪装到本地链路169.254.0.0/16 前缀,默认为 true。

  • resyncInterval: ip-masq-agent 从磁盘重新加载配置的重试时间间隔。 例如 ‘30s’,其中 ‘s’ 是秒,‘ms’ 是毫秒。

KCE中的ip-masq-agent配置和使用

在您新建独立集群或托管集群时,如网络模型选择 Flannel,则集群创建过程中会自动在集群中安装 ip-masq-agent,默认不对集群 VPC 网段和 Pod CIDR 做 SNAT。例如,当容器集群的 VPC 网段和 Pod CIDR 如下所示时:

  • 集群 VPC 网段: 10.0.0.0/16
  • Pod CIDR: 172.18.0.0/16

ip-masq-agent的默认配置如下:

# kubectl get cm -n kube-system ip-masq-agent-config -o yaml
apiVersion: v1
data:
  config: '{"NonMasqueradeCIDRs":["172.18.0.0/16","10.0.0.0/16"],"MasqLinkLocal":true,"ResyncInterval":"1m0s"}'
kind: ConfigMap
metadata:
  name: ip-masq-agent-config
  namespace: kube-system
  ......

上述配置的意思是:访问目的网络 10.0.0.0/16 和 172.18.0.0/16 不做 SNAT,其他网段都做 SNAT,不对网段 169.254.0.0/16 做特殊处理,同步周期为1分钟。

您可以通过以下命令,查看 ip-masq-agent 在节点上生成的iptables规则:

# iptables -t nat -L IP-MASQ-AGENT
Chain IP-MASQ-AGENT (1 references)
target        prot   opt   source          destination         
RETURN        all    --    anywhere        172.18.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN        all    --    anywhere        10.0.0.0/16         /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
MASQUERADE    all    --    anywhere        anywhere            /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL
文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈