从Pod访问公网
从Pod访问公网的实现方式
从Pod中访问公网地址的实现方式会因集群网络模式的不同而不同,具体请参见表1。
实现方式 |
容器隧道网络 |
VPC网络 |
云原生2.0网络 |
---|---|---|---|
给容器所在节点绑定公网IP |
支持 |
支持 |
不支持 |
给Pod绑定弹性公网IP |
不支持 |
不支持 |
支持
说明:
给Pod绑定弹性公网IP,可以通过为Pod配置固定弹性公网IP实现,请参见为Pod配置固定EIP。 |
通过NAT网关访问公网 |
支持 |
支持 |
支持 |
下面内容以CCE Turbo集群为例,讲解如何通过NAT网关访问公网。NAT网关能够为VPC内的容器实例提供源网络地址转换服务,即SNAT(Source Network Address Translation)。SNAT功能通过绑定弹性公网IP,实现私有IP向公有IP的转换,从而使VPC内的容器实例能够共享弹性公网IP访问Internet,其原理如图1所示。利用NAT网关的SNAT功能,即使未配置弹性公网IP,VPC内的容器实例也能够直接访问Internet,但不能直接从Internet接收流量。利用NAT网关实现公网访问,可以高效地支持高并发连接需求,适合请求量大、连接数多的应用场景。
前提条件
- 已创建一个CCE集群,具体操作步骤请参见创建集群。
- 在集群内已创建一个Pod,具体操作步骤请参见创建无状态负载(Deployment)。
从Pod访问公网的实现步骤
您可以通过如下步骤实现容器实例访问Internet。
- 确认Pod网段。
- 登录管理控制台。
- 单击左上角的,在展开的列表中单击“容器 > 云容器引擎 CCE”。
- 单击相应的集群名称进入“总览”界面,在右侧“网络信息”模块查看容器子网。
图2 容器子网
- 查看当前从Pod访问公网的情况。登录容器实例,在CloudShell界面输入以下代码。
curl -I console-intl.huaweicloud.com
若回显内容如下,则说明从Pod无法访问公网。
curl: (7) Failed to connect to console-intl.huaweicloud.com port 80: Connection timed out
- 创建弹性公网IP,具体请参见申请弹性公网IP。
- 在控制台左上角单击,选择区域。
此处“区域”需选择容器实例所在区域。
- 单击左上角的,在展开的列表中单击“网络 > 弹性公网IP”。
- 在“弹性公网IP”界面,单击“购买弹性公网IP”。
- 根据界面提示配置参数,请参见图3。
- 在控制台左上角单击,选择区域。
- 创建NAT网关,具体请参见购买公网NAT网关。
- 单击左上角的,在展开的列表中单击“网络 > NAT网关”。
- 在NAT网关页面,单击右上角的“购买公网NAT网关”。
- 根据界面提示配置参数,其中“虚拟私有云”选择集群使用的VPC,并且“子网”选择容器子网,具体请参见图4。使用CCE Turbo集群时,“子网”需要选择容器所在子网。使用CCE Standard集群时,“子网”需要选择节点所在子网。
- 配置SNAT规则,为子网绑定弹性公网IP,具体请参见添加SNAT规则。
- 在NAT网关页面,单击需要添加SNAT规则的NAT网关名称。
- 在SNAT规则页签中,单击“添加SNAT规则”。
- 根据界面提示配置参数,请参见图5。
SNAT规则是按网段生效,因为不同容器网络模型通信方式不同,此处“网段”需按如下规则选择。
- 容器隧道网络、VPC网络(CCE Standard集群):需要选择节点所在网段,即创建节点时选择的网段。
- 云原生网络2.0(CCE Turbo集群):需要选择容器所在网段,即创建集群时选择的容器网段。
对于存在多个网段的情况,可以创建多个SNAT规则或选择自定义网段,只要网段能包含容器子网(云原生网络2.0)或节点子网(容器隧道网络、VPC网络)即可。
- 检验在Pod中能否成功访问公网。登录容器实例,在CloudShell界面输入以下代码。
curl -I console-intl.huaweicloud.com
若回显内容如下,则说明从Pod访问公网成功。
HTTP/1.1 301 Moved Permanently Server: CloudWAF Date: Mon, 19 Aug 2024 12:43:20 GMT Content-Type: text/html Connection: keep-alive Set-Cookie: HWWAFSESID=b4119798a9b29b3c77; path=/ Set-Cookie: HWWAFSESTIME=1724071396374; path=/ ...