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

从Pod访问不同VPC网络的云服务

由于不同VPC之间网络不通,Pod无法跨VPC进行网络通信。您可以通过对等连接连通两个VPC,使在本VPC下的Pod中能够访问另一个VPC下的服务。集群的容器网络类型不同,实现跨VPC访问的步骤也不同,具体请参见表1

表1 容器网络类型跨VPC访问区别

容器网络类型

说明

跨VPC访问的步骤(以从Pod访问ECS为例)

容器隧道网络

容器隧道网络在节点网络基础上通过隧道封装网络数据包。从Pod访问不同VPC下的其他资源时,需确保节点网段与目标VPC之间的连通性。

VPC网络

在VPC网络中,使用VPC路由功能来转发容器的流量。容器网段与节点所在VPC的网段不同,是独立存在的。在不同VPC下,若需要从Pod访问集群外的其他服务,不仅需确保节点网段与目标VPC之间的连通性,还要需确保容器网段与目标VPC之间的连通性。

云原生网络2.0

在云原生网络2.0模型下,容器直接从VPC网段内分配IP地址,容器网段属于节点所在VPC的子网。从Pod访问不同VPC下的其他资源时,需确保Pod所在的VPC子网与目标VPC之间的连通性。

与CCE进行通信的云服务有:ECS、ELB、RDS、DCS、Kafka、RabbitMQ、ModelArts、DDS等。进行通信时,除了关注相关的网络配置外,还需要关注所访问的云服务是否允许外部访问如DCS的Redis实例,需要添加白名单才允许访问(如果无法直接在对应服务界面添加白名单,可在对应服务中创建工单寻求帮助)。下面分别介绍从Pod访问ECS和从Pod访问RDS for MySQL实例的相关操作和注意事项。

前提条件

假设集群VPC为vpc-demo1,网段为192.168.0.0/18和172.1.0.0/24,且集群所在子网为192.168.0.0/18。若集群容器网络模型为VPC网络,则假设其容器网段为172.1.1.0/24,下面介绍实现跨VPC访问的具体步骤。

  1. 购买ECS,具体请参见购买Linux系统弹性云服务器。该ECS与集群处于同一区域、不同VPC内,VPC名称为vpc-demo2,网段为10.1.0.0/16,且ECS的IP地址为10.1.1.24。
  2. 创建VPC对等连接。

    1. 进入控制台,单击左上角的,在展开的列表中单击“网络 > 虚拟私有云”
    2. 在左侧列表单击“对等连接”,在新页面右上角区域,单击“创建对等连接”
    3. 根据界面提示设置对等连接参数,部分参数说明请参见表2
      图1 创建对等连接

      表2 创建对等连接参数说明

      参数

      说明

      示例

      对等连接名称

      必选参数。

      此处填写对等连接的名称。

      由中文字符、英文字母、数字、中划线和下划线等构成,一般不超过64个字符。

      peering-demo

      本端VPC

      必选参数。

      此处为对等连接一端的VPC,可以在下拉框中选择已有VPC作为本端VPC。

      vpc-demo1

      本端VPC网段

      此处显示已选择的本端VPC的网段。

      192.168.0.0/18,172.1.0.0/24

      账户

      必选参数。

      • 当前账户:当对等连接中的对端VPC和本端VPC位于同一个账户下时,选择该项。
      • 其他账户:当对等连接中的对端VPC和本端VPC位于不同账户下时,选择该项。

      当前账户

      对端项目

      当账户选择“当前账户”时,系统默认填充对应的项目,无需您额外操作。

      比如vpc-demo1和vpc-demo2均为账户A下的资源,并且位于区域A,那么此处系统默认显示账户A下,区域A对应的项目。

      -

      对端VPC

      当账户选择“当前账户”时,该项为必选参数。

      此处为对等连接另外一端的VPC,可以在下拉框中选择已有VPC作为对端VPC。

      vpc-demo2

      对端VPC网段

      此处显示已选择的对端VPC的网段。

      须知:

      当您的本端VPC和对端VPC存在网段重叠的情况时,您的对等连接可能不会生效。

      10.1.0.0/16

    4. 参数填写完成后,单击“立即创建”

      弹出路由添加提示对话框,单击“立即添加”

  3. 添加两端VPC路由。根据“添加路由”界面提示,在VPC路由表中添加路由,部分参数说明请参见表3

    图2 添加两端VPC路由

    表3 添加路由参数说明

    参数

    说明

    示例

    虚拟私有云

    选择对等连接两端中的任意一个VPC。

    vpc-demo1

    路由表

    选择VPC的路由表,路由信息将会添加在该路由表中。

    VPC创建完成后自带一个默认路由表,用来控制VPC内子网出方向的流量走向。除了默认路由表,您还可以创建自定义路由表,并关联至子网,则该子网的出方向流量由自定义路由表控制。
    • 如果路由表的下拉列表中只有默认路由表,则选择默认路由表即可。
    • 如果路由表的下拉列表中同时存在默认路由表和其他自定义路由表,则选择对等连接连通的子网所关联的路由表。

    rtb-vpc-demo1(默认路由表)

    目的地址

    对等连接另一端VPC内的地址,可以为VPC网段、子网网段和ECS IP地址等。

    10.1.0.0/16

    下一跳地址

    系统默认填写当前对等连接,您无需选择。

    peering-demo

    添加另一端VPC的路由

    勾选该参数,可同时添加对等连接另一端VPC内的回程路由。

    通常情况下,您需要在对等连接两端VPC的路由表中分别添加去程和回程路由,才可以实现通信。

    勾选

    虚拟私有云

    系统默认填写对等连接两端的另一个VPC,您无需选择。

    vpc-demo2

    路由表

    选择VPC的路由表,路由信息将会添加在该路由表中。

    VPC创建完成后自带一个默认路由表,用来控制VPC内子网出方向的流量走向。除了默认路由表,您还可以创建自定义路由表,并关联至子网,则该子网的出方向流量由自定义路由表控制。

    • 如果路由表的下拉列表中只有默认路由表,则选择默认路由表即可。
    • 如果路由表的下拉列表中同时存在默认路由表和其他自定义路由表,则选择对等连接连通的子网所关联的路由表。

    rtb-vpc-demo2(默认路由表)

    目的地址

    对等连接另一端VPC内的地址,可以为VPC网段、子网网段和ECS IP地址等。

    192.168.0.0/18

    下一跳地址

    系统默认选择当前对等连接,无需选择。

    peering-demo

  4. 添加对端VPC与集群容器网段路由。当前页面单击“添加路由”,在“添加路由”界面中,“虚拟私有云”填入对端VPC,“目的地址”填入集群容器网段,具体请参见图3

    图3 添加容器网段路由

  5. 验证配置效果。检查对端被访问服务的安全组“入方向规则”中是否包含本端节点网段和容器网段(仅容器网络模型为VPC网络时需要),若没有请添加相关规则,请参见步骤3 容器网段添加到ECS安全组入方向规则。登录Pod,具体请参见登录容器实例,在Pod的CloudShell界面再次输入以下代码,10.1.1.24表示对端被访问服务的IP地址。

    ping 10.1.1.24

    若回显内容如下,则说明在Pod中跨VPC访问成功。

    PING 10.1.1.24 (10.1.1.24): 56 data bytes
    64 bytes from 10.1.1.24: seq=0 ttl=64 time=1.412 ms
    64 bytes from 10.1.1.24: seq=1 ttl=64 time=1.400 ms
    64 bytes from 10.1.1.24: seq=2 ttl=64 time=1.299 ms
    64 bytes from 10.1.1.24: seq=3 ttl=64 time=1.283 ms
    --- 10.1.1.24 ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss

假设集群VPC为vpc-demo1,网段为192.168.0.0/18和172.1.0.0/24,且集群所在子网为192.168.0.0/18。若集群容器网络模型为VPC网络,则假设其容器网段为172.1.1.0/24,下面介绍实现跨VPC访问的具体步骤。

  1. 购买RDS for MySQL实例,具体请参见购买RDS for MySQL实例。该实例与集群处于同一区域、不同一VPC内,VPC为vpc-373896-1,网段为172.16.0.0/12,且IP地址为172.16.0.167。
  2. 创建VPC对等连接。

    1. 进入控制台,单击左上角的,在展开的列表中单击“网络 > 虚拟私有云”
    2. 在左侧列表单击“对等连接”,在新页面右上角区域,单击“创建对等连接”
    3. 根据界面提示设置对等连接参数,部分参数说明请参见表4
      图4 创建对等连接

      表4 创建对等连接参数说明

      参数

      说明

      示例

      对等连接名称

      必选参数。

      此处填写对等连接的名称。

      由中文字符、英文字母、数字、中划线和下划线等构成,一般不超过64个字符。

      peering-b34b

      本端VPC

      必选参数。

      此处为对等连接一端的VPC,可以在下拉框中选择已有VPC作为本端VPC。

      vpc-373896-1

      本端VPC网段

      此处显示已选择的本端VPC的网段。

      172.16.0.0/12

      账户

      必选参数。

      • 当前账户:当对等连接中的对端VPC和本端VPC位于同一个账户下时,选择该项。
      • 其他账户:当对等连接中的对端VPC和本端VPC位于不同账户下时,选择该项。

      当前账户

      对端项目

      当账户选择“当前账户”时,系统默认填充对应的项目,无需您额外操作。

      比如vpc-demo1和vpc-demo2均为账户A下的资源,并且位于区域A,那么此处系统默认显示账户A下,区域A对应的项目。

      -

      对端VPC

      当账户选择“当前账户”时,该项为必选参数。

      此处为对等连接另外一端的VPC,可以在下拉框中选择已有VPC作为对端VPC。

      vpc-demo1

      对端VPC网段

      此处显示已选择的对端VPC的网段。

      须知:

      当您的本端VPC和对端VPC存在网段重叠的情况时,那么您的对等连接可能会不生效。

      192.168.0.0/18,172.1.0.0/24

    4. 参数填写完成后,单击“立即创建”

      弹出路由添加提示对话框,单击“立即添加”

  3. 添加两端VPC路由。根据“添加路由”界面提示,在VPC路由表中添加路由,部分参数说明请参见表5

    图5 添加两端VPC路由

    表5 添加路由参数说明

    参数

    说明

    示例

    虚拟私有云

    选择对等连接两端中的任意一个VPC。

    vpc-373896-1

    路由表

    选择VPC的路由表,路由信息将会添加在该路由表中。

    VPC创建完成后自带一个默认路由表,用来控制VPC内子网出方向的流量走向。除了默认路由表,您还可以创建自定义路由表,并关联至子网,则该子网的出方向流量由自定义路由表控制。
    • 如果路由表的下拉列表中只有默认路由表,则选择默认路由表即可。
    • 如果路由表的下拉列表中同时存在默认路由表和其他自定义路由表,则选择对等连接连通的子网所关联的路由表。

    rtb-d43b(自定义路由表)

    须知:

    自定义路由表需要与对等连接联通的子网相关联。

    目的地址

    对等连接另一端VPC内的地址,可以为VPC网段、子网网段和ECS IP地址等。

    192.168.0.0/18

    下一跳地址

    系统默认填写当前对等连接,您无需选择。

    peering-b34b

    添加另一端VPC的路由

    勾选该参数,可同时添加对等连接另一端VPC内的回程路由。

    通常情况下,您需要在对等连接两端VPC的路由表中分别添加去程和回程路由,才可以实现通信。

    勾选

    虚拟私有云

    系统默认填写对等连接两端的另一个VPC,您无需选择。

    vpc-demo1

    路由表

    选择VPC的路由表,路由信息将会添加在该路由表中。

    VPC创建完成后自带一个默认路由表,用来控制VPC内子网出方向的流量走向。除了默认路由表,您还可以创建自定义路由表,并关联至子网,则该子网的出方向流量由自定义路由表控制。

    • 如果路由表的下拉列表中只有默认路由表,则选择默认路由表即可。
    • 如果路由表的下拉列表中同时存在默认路由表和其他自定义路由表,则选择对等连接连通的子网所关联的路由表。

    rtb-vpc-demo1(默认路由表)

    目的地址

    对等连接另一端VPC内的地址,可以为VPC网段、子网网段和ECS IP地址等。

    172.16.0.0/12

    下一跳地址

    系统默认选择当前对等连接,无需选择。

    peering-b34b

  4. 添加RDS for MySQL实例所在VPC与集群容器网段的路由。当前页面单击“添加路由”,在“添加路由”界面中,“虚拟私有云”填入vpc-373896-1,“目的地址”填入容器网段,具体请参见图6

    图6 添加容器网段路由

  5. 验证配置效果。检查RDS for MySQL实例的安全组“入方向规则”中是否包含集群节点网段和容器网段(容器网段仅当容器网络模型为VPC网络时需要),若没有请添加相关规则,请参见步骤3 容器网段添加到被访问服务安全组入方向规则。登录Pod,具体请参见登录容器实例,在Pod的CloudShell界面再次输入以下代码,172.16.0.167表示被访问服务的IP地址。

    ping 172.16.0.167

    若回显内容如下,则说明在Pod中跨VPC访问成功。

    PING 172.16.0.167 (172.16.0.167) 56(84) bytes of data.
    64 bytes from 172.16.0.167: icmp_seq=1 ttl=63 time=0.516 ms
    64 bytes from 172.16.0.167: icmp_seq=2 ttl=63 time=0.418 ms
    64 bytes from 172.16.0.167: icmp_seq=3 ttl=63 time=0.376 ms
    --- 172.16.0.167 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 1001ms

在Pod中访问不通的排查思路

若Pod出现访问网络不通的情况,可以参考表6进行排查。如果以下思路均不能解决您的问题,请提交工单联系华为云客服为您解答

集群的容器网络模型不同,在Pod的访问过程中所涉及网段也不同,具体区别请参见表1。在以下内容中,容器网段特指集群容器网络模型为VPC网络,之后不再单独说明。

表6 在Pod中访问不通具体排查思路

排查路径

问题

解决方案

被访问的服务安全组规则

在该部分可能存在以下问题:

  • 安全组规则的入方向规则未允许节点网段或容器网段访问。
  • 入方向规则允许节点网段和容器网段访问,协议未配置正确。
    须知:

    ping命令使用ICMP协议进行网络连通性测试。换言之,安全组规则至少需要开通相应的ICMP协议端口,ping命令才能访问成功。

对等连接

两端VPC网段重叠。

该问题可以分为两种情况,具体请参见对等连接中本端VPC和对端VPC网段重叠

  • 如果集群节点网段所在子网与被访问服务所在子网不重叠,您可以创建指向子网的对等连接。
  • 如果集群节点网段所在子网与被访问服务所在子网重叠,您需要重新规划网络。

路由

在该部分可能存在以下问题:

  • 如果添加两端VPC路由时,使用的是自定义路由表,则需要注意自定义路由表是否关联相应子网(集群VPC路由表应关联节点子网,被访问服务路由表关联被访问服务所在子网)。
  • 未建立被访问服务子网与容器网段的路由。

白名单

如果被访问服务设置白名单,白名单未添加节点网段或容器网段。

对于此类问题,您需要添加容器和节点网段到白名单。具体白名单的设置步骤,请在对应服务的帮助文档中查找。

域名解析

当访问外部域名时,Pod先使用集群的域名解析功能解析被访问目标的地址,后经过Pod侧的网络策略再进行访问,此时可能出现域名无法解析的情况,常见的报错有:

  • Name or service not known
  • Temporary failure in name resolution
  • Unable to resolve hostname
  • DNS resolution failed。
  • Could not resolve MYHOST (nodename nor servname known)这里的MYHOST是无法解析的域名。

您需要排查DNS异常原因,可参考CCE提供的DNS概述文档进行排查

网络策略(仅适用于容器隧道网络

如果您在容器隧道网络类型的集群中配置了网络策略并且Pod所在的命名空间也设置了网络策略,则该网络策略可能会限制Pod中访问的目标地址。

如果该网络策略限制Pod中的访问,则需要修改网络策略,具体可参考配置网络策略限制Pod访问的对象