容器网络通过 NAT 网关访问公网
1. 概述
本文档介绍 CCE 集群在 VPC-ENI 和 VPC 路由两种容器网络模式下,通过 EIP 与 NAT 网关为 Node 和 Pod 开启访问公网能力的方法。适用于节点需要通过 yum install 等命令访问外部源地址下载安装软件,或容器需要访问公网服务的场景。
1.1 相关概念
- EIP:EIP是百度智能云提供的弹性公网IP服务,EIP可以挂载到CCE节点、BLB、NAT网关等服务,提供可以访问公网的地址。
- NAT网关:百度智能云 NAT 网关支持用户VPC子网中的BCC、DCC等实例连接公网,通过NAT网关实现内网IP转换为公网IP地址。 节点子网:用户在创建CCE工作节点时,可以选择节点所在的VPC子网。子网类型为通用型子网,通用型子网中的节点可以挂载EIP直接访问公网,也可以通过NAT网关实现公网访问。
前提条件
- 已创建目标 CCE 集群,或已明确目标集群的容器网络模式与 Pod 子网规划。
- 已创建可用的 EIP。
- 已创建公网 NAT 网关,并已为其绑定 EIP。
- 已具备目标 VPC、NAT 网关、路由表和 CCE 集群的查看与修改权限。


3. 开启容器访问公网能力
3.1 开启 Node 访问公网能力
如果需要 Node 节点有直接访问公网能力,需要进行两项配置:SNAT 规则和自定义路由配置。
3.1.1 SNAT 规则配置
导航路径:私有网络 VPC->NAT 网关->公网 NAT 网关
- 在目标 NAT 网关实例的操作列点击 【设置 SNAT】 后,进入 SNAT 列表。
- 先检查是否已存在目标 Node 子网对应的 SNAT 条目。
- 若不存在对应条目,点击 【创建 SNAT 规则】 后,按下表填写信息并提交。
| 参数 | 必填 | 说明 |
|---|---|---|
| 条目名称 | 是 | 自定义填写,便于区分规则用途。 |
| 源网段 | 是 | 选择需要访问公网的 Node 所在子网。 |
| 公网 IP 地址 | 是 | 选择该 NAT 网关已绑定的 EIP,作为公网出口。 |


- 源网段选择要允许访问公网的 Node 所在的子网
- 公网 IP 地址选择我们对应的 EIP 实例
3.1.2 自定义路由规则设置
导航路径:私有网络 VPC->路由表
- 在目标 VPC 关联的路由表中点击 【管理】 后,进入路由条目详情页。
- 先检查是否已存在目标 Node 子网到公网的 NAT 路由。
- 若不存在对应条目,点击 【添加路由】 后,按下表填写信息并保存。
| 参数 | 必填 | 说明 |
|---|---|---|
| 源网段 | 是 | 选择需要访问公网的 Node 所在子网。 |
| 目标网段 | 是 | 填写 0.0.0.0/0,或按需填写目标外网服务的 CIDR。 |
| 路由类型 | 是 | 选择 NAT 网关。 |
| 下一跳实例 | 是 | 选择已配置对应 SNAT 规则的 NAT 网关实例。 |

- 源网段选择要允许访问公网的 Node 所在的子网。
- 目标网段选择 0.0.0.0/0或者你想访问的外网服务的 CIDR。
- 路由类型选择 NAT 网关
- 下一条实例选择已配置SNAT规则的 NAT 网关
至此 Node 访问公网就配置完成,可以进入节点进行网络联通性验证。
3.2 VPC-ENI 模式容器访问公网能力(可选)
3.2.1 确认容器网络模式信息
导航路径:CCE->集群列表
容器网络模式由创建集群时选定。
- 进入目标集群详情页,在网络信息中确认 容器网络模式 为
VPC-ENI。 - 记录所有需要访问公网的 Pod 子网。
- 若当前尚未创建集群,可在 CCE->创建集群->网络配置 中确认容器网络模式与 Pod 子网规划。

3.2.2 SNAT 规则配置
导航路径:私有网络 VPC->NAT 网关->公网 NAT 网关
- 在目标 NAT 网关实例中点击 【设置 SNAT】 后,进入 SNAT 列表。
- 针对每个需要访问公网的 Pod 子网,分别创建一条 SNAT 规则。
- 点击 【创建 SNAT 规则】 后,按下表填写信息并提交。
| 参数 | 必填 | 说明 |
|---|---|---|
| 条目名称 | 是 | 自定义填写,便于识别对应的 Pod 子网。 |
| 源网段 | 是 | 选择需要访问公网的 Pod 所在子网。 |
| 公网 IP 地址 | 是 | 选择该 NAT 网关已绑定的 EIP,作为公网出口。 |

- 源网段选择要允许访问公网的容器所在的子网
- 公网 IP 地址选择我们对应的 EIP 实例
注意: 每个需要访问公网的容器所在子网,都需要主动添加 SNAT 规则。
3.2.2 自定义路由规则设置
导航路径:私有网络 VPC->路由表
- 在目标 VPC 关联的路由表中点击 【管理】 后,进入路由条目详情页。
- 针对每个需要访问公网的 Pod 子网,分别添加一条指向 NAT 网关的路由。
- 点击 【添加路由】 后,按下表填写信息并保存。
| 参数 | 必填 | 说明 |
|---|---|---|
| 源网段 | 是 | 选择需要访问公网的 Pod 所在子网。 |
| 目标网段 | 是 | 填写 0.0.0.0/0,或按需填写目标外网服务的 CIDR。 |
| 路由类型 | 是 | 选择 NAT 网关。 |
| 下一跳实例 | 是 | 选择已配置对应 SNAT 规则的 NAT 网关实例。 |

- 源网段选择要允许访问公网的 Pod 所在的子网。
- 目标网段选择 0.0.0.0/0或者你想访问的外网服务的 CIDR。
- 路由类型选择 NAT 网关
- 下一条实例选择已配置SNAT规则的 NAT 网关
至此 VPC-ENI 容器网络下 Pod 访问公网就配置完成,可以进入容器进行网络联通性验证。
3.3 VPC 路由模式容器访问公网(可选)
3.3.1 确认容器网络模式信息
导航路径:CCE->集群列表
容器网络模式由创建集群时选定。
- 进入目标集群详情页,在网络信息中确认 容器网络模式 为
VPC 路由。 - 记录集群配置的 Pod 网段,后续将基于该网段创建 SNAT 规则和自定义路由。

3.3.2 SNAT 规则配置
导航路径:私有网络 VPC->NAT 网关->公网 NAT 网关
- 在目标 NAT 网关实例中点击 【设置 SNAT】 后,进入 SNAT 列表。
- 当 Pod 网段不在 VPC 地址段内时,在新建规则中将 源网段 设置为自定义配置,并填写 Pod 网段。
- 选择公网出口后提交配置。
| 参数 | 必填 | 说明 |
|---|---|---|
| 条目名称 | 是 | 自定义填写,便于区分路由模式 Pod 的公网访问规则。 |
| 源网段 | 是 | 选择自定义配置,并填写集群 Pod 网段。 |
| 公网 IP 地址 | 是 | 选择该 NAT 网关已绑定的 EIP,作为公网出口。 |

- 源网段选择自定义配置,并输入要允许访问公网的容器网段,例如 10.22.0.0/16。
- 公网 IP 地址选择我们对应的 EIP 实例。
3.3.3 开启路由中继
导航路径:私有网络 VPC->私有网络
- 在私有网络列表中找到目标 VPC,并进入对应资源信息区域。
- 检查 路由中继 状态。
- 若未开启,则先启用该能力,再继续后续配置。
说明: 开启路由中继功能后,路由表可以转发非源自本 VPC 的流量。该选项默认关闭,即路由表默认仅会转发源自本 VPC 的流量。

开启路由中继功能后,路由表可以转发非源自本VPC的流量。该选项默认关闭,即路由表默认仅会转发源自本VPC的流量。
3.3.4 自定义路由规则设置
导航路径:私有网络 VPC->路由表
- 在目标 VPC 关联的路由表中点击 【管理】 后,进入路由条目详情页。
- 点击 【添加路由】 后,将 源网段 设置为自定义配置,并填写集群 Pod 网段。
- 将 目标网段 设置为
0.0.0.0/0,或按需填写目标外网服务的 CIDR。 - 将 路由类型 设置为 NAT 网关,并选择对应的 下一跳实例 后保存。
| 参数 | 必填 | 说明 |
|---|---|---|
| 网段类型 | 是 | 选择 IPv4。 |
| 源网段 | 是 | 选择自定义配置,并填写集群 Pod 网段。 |
| 目标网段 | 是 | 填写 0.0.0.0/0,或按需填写目标外网服务的 CIDR。 |
| 路由类型 | 是 | 选择 NAT 网关。 |
| 下一跳实例 | 是 | 选择已配置对应 SNAT 规则的 NAT 网关实例。 |

- 源网段选择自定义配置,手动输入 Pod 自定义的网段,例如10.22.0.0/16。
- 目标网段选择 0.0.0.0/0或者你想访问的外网服务的 CIDR。
- 路由类型选择 NAT 网关。
- 下一条实例选择已配置SNAT规则的 NAT 网关。
至此 VPC 路由容器网络下 Pod 访问公网就配置完成,可以进入容器进行网络联通性验证。
4. 常见问题
4.1 ACL 规则导致容器无法访问公网问题
4.1.1 安全组导致容器无法访问公网
在按照本文档给定的步骤如果仍无法访问外网,请逐个检查节点、ENI绑定的安全组、ACL 等网络策略规则,确保容器访问外网的流量在规则中都被放行。 部分互联网主机会禁止 ICMP 流量,当 ping 不通时,可以考虑使用 TCP/UDP 检测联通性。
4.2 DNS导致的容器无法访问互联网
在容器访问互联网前,请先检查目标域名是否能被解析。如域名无法被解析,可通过修改配置 DNS 完成域名解析的请求。例如增加配置 coredns 下游域名服务器,完成对域名解析请求。通过下面命令可以验证域名能否被成功解析:
1dig a.example.com
评价此篇文章
