上云无忧 > 文档中心 > 百度智能云容器引擎服务 CCE 集群内容器访问集群外服务
容器引擎服务CCE
百度智能云容器引擎服务 CCE 集群内容器访问集群外服务

文档简介:
在 VPC Route 网络模式下, Pod 的 IP 地址网段通常与节点 IP 地址网段不同。 在集群默认配置下,当非 HostNetwork 网络模式的 Pod 访问私有 IP 地址段内的 IP (10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16)时,数据包的源 IP 是 Pod IP。这导致当访问目的地址是集群外的虚机或服务时,会出现网络不通的情况。 对于这些情况,我们需要配置 ip-masq-agent 以满足网络访问需求。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

在 VPC Route 网络模式下, Pod 的 IP 地址网段通常与节点 IP 地址网段不同。
在集群默认配置下,当非 HostNetwork 网络模式的 Pod 访问私有 IP 地址段内的 IP (10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16)时,数据包的源 IP 是 Pod IP。这导致当访问目的地址是集群外的虚机或服务时,会出现网络不通的情况。 对于这些情况,我们需要配置 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 地址或者网段进行伪装。也就是说,masqueradeCIDRs 配置优先于 nonMasqueradeCIDRs 配置,而 nonMasqueradeCIDRs 配置优先于 masqOutBound 配置。

常见场景

Pod 访问同 VPC 内集群外的 IP 地址

在一个 VPC 内,除了 CCE 集群节点,还有很多不在集群内的虚机或服务。
这些虚机或服务的安全组有时仅允许源 IP 在 VPC 地址段内的数据包通过。 而当 Pod 访问这些虚机或服务时,数据包以 Pod IP 作为源 IP,而 Pod IP 地址段一般与 VPC 地址段不同,这导致数据包被目的虚机或服务的安全组丢弃。
因此,我们需要对 ip-masq-agent 的 masqueradeCIDRs 字段进行配置,使 Pod 访问这些虚机时 SNAT 成所在节点的 IP 进行访问。
例如网络拓扑中, 10.10.10.10 是某个 BCC 的地址。配置参考:

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

Pod 访问对等连接 VPC 内的 IP 地址

在 2 个 VPC 建立对等连接之后,在默认集群网络配置下,当 VPC-1 中的 Pod 访问对端 VPC-2 内的地址时,源 IP 为 Pod IP。当目的机器收到数据包并发出回包时,目的 IP 是 Pod IP,由于 Pod IP 地址段与 VPC-1 的地址段并不一致,此时可能因为缺少该 Pod 地址段的对等连接路由,而导致回包丢失。
因此,我们需要对 ip-masq-agent 进行配置,使 Pod 访问这些虚机时 SNAT 成所在节点的 IP 进行访问,让数据包可以顺利通过对等连接网关。
例如网络拓扑中, 10.10.10.10 是对等连接中集群所在 VPC 的对端 VPC 中的某个 BCC 的地址。我们需要设置 ip-masq-agent 的 masqueradeCIDRs 字段,配置参考:

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

Pod 访问公网地址

容器以节点的 IP 访问公网

当我们为节点配置公网 IP 之后,该节点上的 Pod 就可以 SNAT 成节点的 IP 地址来访问公网。
在这种情况下,我们需要配置 ip-masq-agent 的 masqOutBound 属性为 true,示例参考:

容器伪装成节点身份

容器配合 NAT 网关以网关 IP 访问公网

除了为单个节点配置公网 IP 之外,我们还可以通过 NAT 网关与 VPC 路由牵引的方式让 Pod 访问公网。
在这种情况下,示例配置参考:

容器以自己身份出节点

相似文档
  • 注意:以下内容仅针对使用 “VPC-CNI”模式的集群。 概述: VPC-CNI 模式下,容器的 IP 来自 VPC 中的子网。随着集群规模扩大,ENI 子网中的 IP 可能耗尽,利用 CNI 提供的动态配置功能,可以给集群增加新的 ENI 子网。
  • K8S 配置字典(ConfigMap): ConfigMap 是 K8S 的一种 API 对象,用来将非机密性的数据保存到健值对中,用户在 CCE 可以通过页面或 kubectl 方式管理 ConfigMap。
  • 保密字典(Secret): Secret 是 K8S 提供一种 API 资源,用来保存敏感信息,例如密码、OAuth 令牌和 SSH 密钥等,用户可在 CCE 上通过 Console 及 kubectl 方式管理 Secret 资源。
  • 容器的特性决定了容器本身是非持久化的,容器被删除后容器内的数据也一并被删除,CCE 基于百度云存储产品,提供了容器数据共享和持久化解决方案,适用于大数据分析、媒体、游戏等很多场景。
  • emptyDir 类型的 Volume 在 Pod 分配到 Node 上时被创建,Kubernetes 会在 Node 上自动分配一个目录,因此无需指定宿主机 Node 上对应的目录文件,这个目录的初始内容为空。 当 Pod 从 Node 上移除时,emptyDir 中的数据会被永久删除。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部