更新时间:2024-11-12 GMT+08:00

从Pod访问公网

从Pod访问公网的实现方式

从Pod中访问公网地址的实现方式会因集群网络模式的不同而不同,具体请参见表1

表1 从Pod访问公网的实现方式

实现方式

容器隧道网络

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网关实现公网访问,可以高效地支持高并发连接需求,适合请求量大、连接数多的应用场景。

图1 SNAT原理

前提条件

从Pod访问公网的实现步骤

您可以通过如下步骤实现容器实例访问Internet。

  1. 确认Pod网段。

    1. 登录管理控制台。
    2. 单击左上角的,在展开的列表中单击“容器 > 云容器引擎 CCE”
    3. 单击相应的集群名称进入“总览”界面,在右侧“网络信息”模块查看容器子网。
      图2 容器子网

  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

  3. 创建弹性公网IP,具体请参见申请弹性公网IP

    1. 在控制台左上角单击,选择区域。

      此处“区域”需选择容器实例所在区域。

    2. 单击左上角的,在展开的列表中单击“网络 > 弹性公网IP”
    3. “弹性公网IP”界面,单击“购买弹性公网IP”。
    4. 根据界面提示配置参数,请参见图3
      图3 购买弹性公网IP

  4. 创建NAT网关,具体请参见购买公网NAT网关

    1. 单击左上角的,在展开的列表中单击“网络 > NAT网关”
    2. 在NAT网关页面,单击右上角的“购买公网NAT网关”。
    3. 根据界面提示配置参数,其中“虚拟私有云”选择集群使用的VPC,并且“子网”选择容器子网,具体请参见图4。使用CCE Turbo集群时,“子网”需要选择容器所在子网。使用CCE Standard集群时,“子网”需要选择节点所在子网。
      图4 购买公网NAT网关

  5. 配置SNAT规则,为子网绑定弹性公网IP,具体请参见添加SNAT规则

    1. 在NAT网关页面,单击需要添加SNAT规则的NAT网关名称。
    2. 在SNAT规则页签中,单击“添加SNAT规则”
    3. 根据界面提示配置参数,请参见图5

      SNAT规则是按网段生效,因为不同容器网络模型通信方式不同,此处“网段”需按如下规则选择。

      • 容器隧道网络、VPC网络(CCE Standard集群):需要选择节点所在网段,即创建节点时选择的网段。
      • 云原生网络2.0(CCE Turbo集群):需要选择容器所在网段,即创建集群时选择的容器网段。

      对于存在多个网段的情况,可以创建多个SNAT规则或选择自定义网段,只要网段能包含容器子网(云原生网络2.0)或节点子网(容器隧道网络、VPC网络)即可。

      图5 配置SNAT规则

  6. 检验在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=/
    ...