从Pod访问不同VPC网络的云服务
由于不同VPC之间网络不通,Pod无法跨VPC进行网络通信。您可以通过对等连接连通两个VPC,使在本VPC下的Pod中能够访问另一个VPC下的服务。集群的容器网络类型不同,实现跨VPC访问的步骤也不同,具体请参见表1。
容器网络类型 |
说明 |
跨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实例的相关操作和注意事项。
前提条件
- 已创建一个CCE集群,具体操作步骤请参见创建集群。
- 在集群内已创建一个Pod,具体操作步骤请参见创建无状态负载(Deployment)。
假设集群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访问的具体步骤。
- 购买ECS,具体请参见购买Linux系统弹性云服务器。该ECS与集群处于同一区域、不同VPC内,VPC名称为vpc-demo2,网段为10.1.0.0/16,且ECS的IP地址为10.1.1.24。
- 创建VPC对等连接。
- 进入控制台,单击左上角的,在展开的列表中单击“网络 > 虚拟私有云”。
- 在左侧列表单击“对等连接”,在新页面右上角区域,单击“创建对等连接”。
- 根据界面提示设置对等连接参数,部分参数说明请参见表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
- 参数填写完成后,单击“立即创建”。
弹出路由添加提示对话框,单击“立即添加”。
- 添加两端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
- 添加对端VPC与集群容器网段路由。当前页面单击“添加路由”,在“添加路由”界面中,“虚拟私有云”填入对端VPC,“目的地址”填入集群容器网段,具体请参见图3。
- 验证配置效果。检查对端被访问服务的安全组“入方向规则”中是否包含本端节点网段和容器网段(仅容器网络模型为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访问的具体步骤。
- 购买RDS for MySQL实例,具体请参见购买RDS for MySQL实例。该实例与集群处于同一区域、不同一VPC内,VPC为vpc-373896-1,网段为172.16.0.0/12,且IP地址为172.16.0.167。
- 创建VPC对等连接。
- 进入控制台,单击左上角的,在展开的列表中单击“网络 > 虚拟私有云”。
- 在左侧列表单击“对等连接”,在新页面右上角区域,单击“创建对等连接”。
- 根据界面提示设置对等连接参数,部分参数说明请参见表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
- 参数填写完成后,单击“立即创建”。
弹出路由添加提示对话框,单击“立即添加”。
- 添加两端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
- 添加RDS for MySQL实例所在VPC与集群容器网段的路由。当前页面单击“添加路由”,在“添加路由”界面中,“虚拟私有云”填入vpc-373896-1,“目的地址”填入容器网段,具体请参见图6。
- 验证配置效果。检查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网络,之后不再单独说明。
排查路径 |
问题 |
解决方案 |
---|---|---|
被访问的服务安全组规则 |
在该部分可能存在以下问题:
|
|
对等连接 |
两端VPC网段重叠。 |
该问题可以分为两种情况,具体请参见对等连接中本端VPC和对端VPC网段重叠。
|
路由 |
在该部分可能存在以下问题:
|
|
白名单 |
如果被访问服务设置白名单,白名单未添加节点网段或容器网段。 |
对于此类问题,您需要添加容器和节点网段到白名单。具体白名单的设置步骤,请在对应服务的帮助文档中查找。 |
域名解析 |
当访问外部域名时,Pod先使用集群的域名解析功能解析被访问目标的地址,后经过Pod侧的网络策略再进行访问,此时可能出现域名无法解析的情况,常见的报错有:
|
您需要排查DNS异常原因,可参考CCE提供的DNS概述文档进行排查。 |
网络策略(仅适用于容器隧道网络) |
如果您在容器隧道网络类型的集群中配置了网络策略,并且Pod所在的命名空间也设置了网络策略,则该网络策略可能会限制Pod中访问的目标地址。 |
如果该网络策略限制Pod中的访问,则需要修改网络策略,具体可参考配置网络策略限制Pod访问的对象。 |