容器网络通过 NAT 网关访问公网
1. 概述
在一些场景中,用户需要让CCE集群中的节点和Pod具备访问公网的能力,如通过 yum install
等命令访问外部源地址下载安装软件、容器需要访问公网中的某些服务等等。 我们提供了以下两种方案,可以实现集群访问公网,用户可以根据具体需求自行选择。
本文档主要介绍了 VPC-ENI
和 VPC 路由
两种容器网络模式下,容器如何访问互联网。
1.1 相关概念
- EIP:EIP是百度智能云提供的弹性公网IP服务,EIP可以挂载到CCE节点、BLB、NAT网关等服务,提供可以访问公网的地址。
- NAT网关:百度智能云 NAT 网关支持用户VPC子网中的BCC、DCC等实例连接公网,通过NAT网关实现内网IP转换为公网IP地址。 节点子网:用户在创建CCE工作节点时,可以选择节点所在的VPC子网。子网类型为通用型子网,通用型子网中的节点可以挂载EIP直接访问公网,也可以通过NAT网关实现公网访问。
2. 前置准备
要完成 Pod 访问互联网的配置任务,需要您已经购买了和配置了以下产品。
2.1 创建 EIP
进入到弹性公网 IP 控制台,选择创建实例,购买新的 EIP。
2.2 创建 NAT 网关
进入到私有网络 VPC 控制台,选定对应 VPC 后,创建 NAT 网关实例。并将刚创建的 EIP 实例,配置在 NAT 网关的 SNAT 公网 IP 的复选框。
3. 开启容器访问公网能力
3.1 开启 Node 访问公网能力
如果需要 Node 节点有直接访问公网能力,需要进行两项配置:SNAT 规则和自定义路由配置。
3.1.1 SNAT 规则配置
在 私有网络 VPC -> NAT 网关控制台,选中 NAT 网关实例,操作设置 SNAT,并将需要访问公网的 Node 所在子网加入到新 SNAT 条目中。
- 源网段选择要允许访问公网的 Node 所在的子网
- 公网 IP 地址选择我们对应的 EIP 实例
3.1.2 自定义路由规则设置
在私有网络 VPC -> 路由表控制台,进入目标 VPC 的路由表,添加新路由条目。
- 源网段选择要允许访问公网的 Node 所在的子网。
- 目标网段选择 0.0.0.0/0或者你想访问的外网服务的 CIDR。
- 路由类型选择 NAT 网关
- 下一条实例选择已配置SNAT规则的 NAT 网关
至此 Node 访问公网就配置完成,可以进入节点进行网络联通性验证。
3.2 VPC-ENI 模式容器访问公网能力(可选)
3.2.1 确认容器网络模式信息
容器网络模式由创建集群时选定,进入 CCE -> 选中已有集群可以进入集群详情页面,再次确认容器网络模式和Pod子网信息。案例集群使用 VPC-ENI容器网络,并配置了 2 个子网。
3.2.2 SNAT 规则配置
在 私有网络 VPC -> NAT 网关控制台,选中 NAT 网关实例,操作设置 SNAT,并将需要访问公网的容器所在子网加入到新 SNAT 条目中。
- 源网段选择要允许访问公网的容器所在的子网
- 公网 IP 地址选择我们对应的 EIP 实例
注意
每个需要访问公网的容器所在的子网,都需要主动添加 SNAT 规则。
3.2.2 自定义路由规则设置
在私有网络 VPC -> 路由表控制台,进入目标 VPC 的路由表,添加新路由条目。把所有需要访问公网的容器子网添加一条指向 NAT 网关的路由。
- 源网段选择要允许访问公网的 Pod 所在的子网。
- 目标网段选择 0.0.0.0/0或者你想访问的外网服务的 CIDR。
- 路由类型选择 NAT 网关
- 下一条实例选择已配置SNAT规则的 NAT 网关
至此 VPC-ENIi 容器网络下 Pod 访问公网就配置完成,可以进入容器进行网络联通性验证。
3.3 VPC 路由模式容器访问公网(可选)
3.3.1 确认容器网络模式信息
容器网络模式由创建集群时选定,进入 CCE -> 选中已有集群可以进入集群详情页面,再次确认容器网络模式和Pod子网信息。案例集群使用 VPC路由容器网络,并配置容器网络的网段是 172.21.0.0/16。
3.3.2 SNAT 规则配置
在 私有网络 VPC -> NAT 网关控制台,选中 NAT 网关实例,操作设置 SNAT,并将需要访问公网的容器所在子网加入到新 SNAT 条目中。
- 源网段选择自定义配置,并输入要允许访问公网的容器网段,例如 10.22.0.0/16。
- 公网 IP 地址选择我们对应的 EIP 实例。
3.3.3 开启路由中继
在私有网络 VPC 控制台,选择目标 VPC 实例打开路由中继开关。VPC 路由容器网络,Pod 的 IP 地址不在 VPC 地址段内,若要添加源网段是 VPC 外的地址的自定义路由,需要打开路由中继能力。
开启路由中继功能后,路由表可以转发非源自本VPC的流量。该选项默认关闭,即路由表默认仅会转发源自本VPC的流量。
3.3.4 自定义路由规则设置
在私有网络 VPC -> 路由表控制台,进入目标 VPC 的路由表,添加新路由条目。把所有需要访问公网的容器子网添加一条指向 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 下游域名服务器,完成对域名解析请求。通过下面命令可以验证域名能否被成功解析:
dig a.example.com