Kubernetes集群使用Terway网络的ENI模式出现网络问题

Kubernetes集群使用Terway网络的ENI模式出现网络问题

更新时间:2019-12-27 08:38:31

问题描述

当前环境使用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网段。

 

解决方案

 

更多信息

请参考如下操作步骤,查看并修改ENI对应的安全组与辅助私网IP。

  1. 在容器服务控制台,找到Pod的IP地址。
  2. 使用kubectl连接Kubernetes集群的Master节点,详情请参见通过kubectl连接Kubernetes集群
  3. 执行如下命令,查看集群内Pod所属的交换机。
    kubectl get cm eni-config -n kube-system -o yaml
    系统返回类似如下。
  4. 在ECS控制台的弹性网卡列表页面,使用交换机查询ENI。通过步骤一获得的IP地址,找到对应的ENI,单击右侧的 修改
  5. 在弹出的窗口,确认该ENI对应的安全组是否正确,并可修改安全组。
  6. 弹性网卡列表页面,找到对应的ENI,单击右侧的 管理辅助私网IP
  7. 在弹出的窗口,可查看并管理辅助私网IP。

 

适用于

  • 容器服务 Kubernetes 专有版
  • 容器服务 Kubernetes 托管版

注:适用于使用Terway网络ENI模式的环境。

 

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。