在Pod中访问外部网络

更新时间: 2023-12-08 10:39:53

Pod可以访问公网,也支持访问VPC内资源,包括已有的ECS、SLB等自有资源,RDS、OSS等云服务和自身集群暴露的LoadBalancer。本文介绍如何配置访问来源侧和目的侧,使得Pod可以访问外部网络。

配置访问来源侧

  • 配置域名解析

    当访问外部网络时,Pod会使用集群的域名解析功能解析访问目标的地址,然后会经过Pod侧的网络策略再进行访问。如果域名无法解析,您需要排查DNS异常问题。

  • 配置网络策略

    检查Pod所在的命名空间是否设置网络策略,并且检查该网络策略是否限制了Pod不能访问目标地址。如果有,您需要修改网络策略。具体操作,请参见在容器计算服务使用网络策略

  • 配置安全组

    检查集群的安全组以及Pod所在的ECS的安全组是否有限制Pod访问目标地址的规则,确保安全组符合以下规则:

    • 安全组出方向需要有允许Pod访问目标地址和端口的规则。

    • 安全组出方向不能有拒绝Pod访问目标地址和端口的规则。

配置访问目的侧

Pod可以访问公网,也支持访问VPC内资源,包括已有的ECS、SLB等自有资源,RDS、OSS等云服务和自身集群暴露的LoadBalancer。不同的访问目标,Pod配置方式不同。

image.png

访问公网

在访问公网IPv4地址时, Pod使用的IP地址是私网IP地址。如果Pod需要访问外部公网,需要使用公网的EIP或者NAT网关。为Pod配置公网的方式如下:

访问方式

网关和EIP配置

对外使用的公网IP地址

通过NAT网关访问公网

为集群绑定公网EIP。具体操作,请参见为已有集群开启公网访问能力

NAT网关绑定的公网EIP地址。

通过Pod绑定的EIP访问公网(仅支持Terway)

为Pod绑定公网EIP。具体操作,请参见为Pod挂载独立公网EIP

Pod绑定的公网EIP地址。

访问已有的ECS、SLB等自有资源

Pod访问已有的ECS或者SLB时,访问目的端通常会有一些安全组或者ACL规则限制访问来源。如果限制了Pod访问的来源IP,就会出现网络不通的问题。您需要为Pod开放来源IP:来源IP为Pod的IP,安全组或者ACL需要开放Pod的vSwitch网段。

访问RDS、OSS等云服务

部分云服务需要为访问的来源指定IP的白名单才能访问。规则:配置Pod的vSwitch网段到对应云服务的白名单。

您也可以使用ack-kubernetes-webhook-injector自动配置云服务的白名单。具体操作,请参见为Pod动态配置阿里云产品白名单

访问自身集群暴露的LoadBalancer

对于集群自身暴露的LoadBalancer类型的Service的地址,无论是公网还是内网的,都会被集群内部拦截。针对此种情况,您需要修改Service的外部流量策略,合理配置Service。具体操作,请参见Kubernetes集群中访问LoadBalancer暴露出去的SLB地址不通