Pod可以访问VPC内的资源,包括ECS、RDS、OSS、SLB等,在经过配置后也可以获得访问公网的能力。本文介绍如何配置源端和目的端,使得Pod可以访问外部网络。
配置源端(Pod侧)
配置域名解析
当访问外部网络时,Pod会使用集群的域名解析功能解析访问目标的IP地址,然后会经过Pod侧的网络策略再进行访问。如果域名无法解析,您需要排查DNS异常问题。
配置网络策略
检查Pod所在的命名空间是否设置网络策略,并且检查该网络策略是否限制了Pod不能访问目标IP地址。如果有,您需要修改网络策略。具体操作,请参见在ACS集群中使用网络策略。
配置安全组
检查集群和Pod所属的安全组是否有限制Pod访问目标IP地址的规则,确保安全组规则满足以下要求:
安全组出方向需要有允许Pod访问目标IP地址和端口的规则。
安全组出方向不能有拒绝Pod访问目标IP地址和端口的规则。
配置目的端(访问目标侧)
Pod可以访问VPC内的资源,也可以访问公网。不同的访问目标,Pod配置方式不同。
访问公网
访问方式 | 适用场景 | 对外使用的公网IP地址 | 配置文档 |
通过公网NAT网关访问公网 | 多个Pod | 公网NAT网关绑定的EIP地址 | |
通过Pod绑定的EIP访问公网 | 单个Pod | Pod绑定的EIP地址 |
获取公网出口 IP
当需要将 ACS 集群的公网出口 IP 加入第三方服务(如支付宝开放平台)的 IP 白名单时,按以下步骤操作:
登录专有网络控制台,找到与 ACS 集群同 VPC 下的公网 NAT 网关。
在 NAT 网关的SNAT 条目列表中,确认已为 ACS 集群使用的子网(vSwitch)创建了 SNAT 条目。
查看 NAT 网关绑定的弹性公网 IP(EIP),将该 EIP 地址加入第三方服务的 IP 白名单。
开通公网 NAT 网关并绑定 EIP 后,Pod 并不能立即访问公网,还必须为 NAT 网关配置 SNAT 规则,将 ACS 集群所在子网的出站流量映射到 EIP,Pod 才能通过该 EIP 访问公网。若未配置 SNAT 规则,Pod 的出公网请求将失败。
访问同一VPC中的其他云资源
Pod访问集群所属VPC中的其他云资源(例如ECS、RDS、OSS等)时,访问目的端可能会有一些访问控制规则限制了访问的来源,例如安全组、ACL规则或白名单机制等。如果访问目的端限制了Pod访问时使用的IP,则会出现网络不通的问题。您需要在访问控制规则中为Pod使用的IP设置放行。
访问LoadBalancer类型的Service
访问集群自身暴露的LoadBalancer类型的Service的地址时,无论是公网还是内网,都会被集群内部拦截。针对此种情况,您需要修改Service的外部流量策略,合理配置Service。具体操作,请参见Kubernetes集群中访问LoadBalancer暴露出去的SLB地址不通。
常见问题
ACS Serverless 架构下是否支持通过阿里云元数据服务获取元数据?
阿里云元数据服务(地址:100.100.100.200)通常用于 ECS 实例在运行时获取自身信息(如实例 ID、VPC ID、底层 VM ID 等)。在 ACS Serverless 架构中,Pod 运行在托管的 Serverless 基础设施上,默认不支持通过该地址访问元数据服务。请勿在 ACS Serverless Pod 中依赖元数据服务获取实例信息,可改用 Kubernetes API 或阿里云 OpenAPI 等方式获取所需信息。
Pod 镜像中没有 curl 命令时如何测试外部网络连通性?
当业务 Pod 镜像未内置 curl 等网络调试工具时,建议在集群中创建一个临时调试 Pod 来测试连通性,避免修改生产镜像。使用阿里云 curl 镜像,内置 curl 等常用网络工具:
kubectl run curl-test --rm -it --image=registry.cn-hangzhou.aliyuncs.com/acs/curl:latest -- /bin/bash临时 Pod 启动后,在容器内执行 curl <目标URL> 验证网络连通性。测试完成后,临时 Pod 会自动删除(--rm 参数的作用)。
临时调试 Pod 与业务 Pod 处于同一集群网络环境,受相同的网络策略和安全组规则约束,测试结果能准确反映业务 Pod 的实际出网情况。