更新时间:2024-12-17 GMT+08:00
分享

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

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

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

容器网络类型

说明

步骤区别

容器隧道网络

容器隧道网络在节点网络基础上通过隧道封装网络数据包。

从Pod访问不同VPC下的其他服务时,需确保节点子网与目标子网之间的连通性。

创建集群VPC和目标VPC的对等连接后,只需要建立节点子网和目标子网之间的路由。

VPC网络

在VPC网络中,使用VPC路由功能来转发容器的流量。集群VPC的网段与容器网段不能重叠,二者是独立存在的。

从Pod访问不同VPC下的其他服务时,不仅需确保节点子网与目标子网之间的连通性,还要需确保容器网段与目标子网之间的连通性。

创建集群VPC和目标VPC的对等连接后,需要建立目标子网与集群节点子网和容器网段之间的路由。

云原生网络2.0

在云原生网络2.0模型下,容器直接从集群VPC的网段内分配IP地址,即容器子网是集群VPC的某个子网。

从Pod访问不同VPC下的其他云服务时,只需确保容器子网与目标子网之间的连通性。

创建集群VPC和目标VPC的对等连接后,只需要建立容器子网和目标子网之间的路由。

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

本文以访问ECS和访问RDS for MySQL为例,分别介绍3种不同容器网络模型的集群如何实现Pod跨VPC通信。示例中的集群、ECS和RDS for MySQL的网络信息,请参见表2

表2 网络信息

云服务

集群的容器网络模型

网络信息

CCE

容器隧道网络(CCE Standard集群)

集群VPC

  • 名称:vpc-demo1
  • 子网:192.168.0.0/18和172.1.0.0/24

节点子网:192.168.0.0/18

容器网段:172.1.1.0/24

VPC网络(CCE Standard集群)

集群VPC

  • 名称:vpc-demo1
  • 子网:192.168.0.0/18和172.1.0.0/24

节点子网:192.168.0.0/18

容器网段:172.1.1.0/24

云原生网络2.0(CCE Turbo集群)

集群VPC

  • 名称:vpc-demo1
  • 子网:192.168.0.0/18和172.1.0.0/24

节点子网:192.168.0.0/18

容器子网:172.1.0.0/24

ECS

-

目标VPC

  • 名称:vpc-demo2
  • 子网:10.1.0.0/16

ECS所在子网(目标子网):10.1.0.0/16

ECS的IP地址:10.1.1.24

RDS for MySQL

-

目标VPC

  • 名称:vpc-373896-1
  • 子网:172.16.0.0/16

RDS for MySQL所在子网(目标子网):172.16.0.0/16

RDS for MySQL的IP地址:172.16.0.167

前提条件

从Pod访问不同的云服务

以在Pod中访问不同VPC网络的ECS和RDS for MySQL为例,介绍Pod如何实现跨VPC通信。

分别介绍容器隧道网络(CCE Standard集群)、VPC网络(CCE Standard集群)和云原生网络2.0(CCE Turbo集群)如何实现在Pod中访问ECS,您可以根据集群类型进行选择。

分别介绍容器隧道网络(CCE Standard集群)、VPC网络(CCE Standard集群)和云原生网络2.0(CCE Turbo集群)如何实现在Pod中访问RDS for MySQL,您可以根据集群类型进行选择。

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

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

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

表15 在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访问的对象

相关文档