问题描述
当前环境使用Terway网络的ENI模式,出现如下问题。
- 现象一:Pod内的程序无法解析域名。
- 现象二:ECS可以访问公网但是Pod无法访问公网。
- 现象三:无法获取集群内的监控数据。
- 现象四:Pod内程序无法访问RDS实例。
下图为集群设置Terway网络ENI模式。

问题原因
与Flannel或Terway插件不同的是,选择Terway网络的ENI模式时,不存在Pod CIDR的概念。此时Pod的IP地址处于VPC下交换机的网段,并与集群ECS属于同一网段。Pod使用的私网IP是集群ECS的辅助弹性网卡(ENI)的私网IP,Pod出网流量均通过ENI网卡,而不会被SNAT成Pod所在ECS的IP地址。根据问题现象对应的原因说明如下。
- 原因一:Pod内域名解析要求有跨主机Pod通信的能力,故Pod的ENI与ECS必须处于同个安全组。
- 原因二:Pod无法访问公网,是由于Pod绑定的ENI所在的交换机配置异常,即该交换机未创建对应该ENI的SNAT条目。
- 原因三:集群监控涉及apiserver访问kubelet,故要求apiserver的ENI、Pod的ENI与ECS处于同个安全组。
注:创建集群时会创建一个默认的安全组,如果是托管版集群,apiserver绑定的ENI也在这个默认的安全组下。
- 原因四:RDS白名单配置错误,应该配置Pod所在的交换机网段,而不是ECS网段。
解决方案
- 解决方法一:参考如下文档,修改Pod的ENI与ECS的安全组,确保两者处于同个安全组。
- 解决方法二:参考如下文档,在交换机创建对应该ENI的SNAT条目。
- 解决方法三:参考如下文档,修改ENI与ECS的安全组,确保apiserver的ENI、Pod的ENI与ECS处于同个安全组。
- 解决方法四:参考如下文档,将RDS白名单配置为Pod所在的交换机网段。
更多信息
请参考如下操作步骤,查看并修改ENI对应的安全组与辅助私网IP。
- 在容器服务控制台,找到Pod的IP地址。

- 使用kubectl连接Kubernetes集群的Master节点,详情请参见通过kubectl连接Kubernetes集群。
- 执行如下命令,查看集群内Pod所属的交换机。
kubectl get cm eni-config -n kube-system -o yaml
系统返回类似如下。

- 在ECS控制台的弹性网卡列表页面,使用交换机查询ENI。通过步骤一获得的IP地址,找到对应的ENI,单击右侧的 修改。

- 在弹出的窗口,确认该ENI对应的安全组是否正确,并可修改安全组。

- 弹性网卡列表页面,找到对应的ENI,单击右侧的 管理辅助私网IP。
- 在弹出的窗口,可查看并管理辅助私网IP。

适用于
- 容器服务 Kubernetes 专有版
- 容器服务 Kubernetes 托管版
注:适用于使用Terway网络ENI模式的环境。
如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。
在文档使用中是否遇到以下问题
更多建议
匿名提交