问题描述
在Kubernetes集群内,某个节点上的Pod出现网络访问异常,具体现象如下所示:
- Pod访问外网异常。
- Pod访问其他Service异常。
- Pod访问其他节点上的Pod异常。
问题原因
- 集群内ECS的安全组配置错误或者冲突。
- 集群内VPC的路由表条目配置错误或者冲突。
解决方案
根据现场实际情况,修改ECS的安全组和VPC的路由表条目。
ECS的安全组
创建集群时会创建一个安全组,该安全组默认包含如下特性:
- 集群的所有节点均使用该安全组。
- 入方向的规则放行集群Pod的网段的数据包,包含所有端口与所有协议。
说明:该网段即创建集群时配置的Pod CIDR网段。
- 出方向的规则放行全部数据包。
说明:不建议修改出方向的规则。
基于上述配置正确的安全组,进行如下检查:
- 入方向其他规则可以根据自己的需求修改。如果有全部拒绝的规则,确认优先级不要高于放行Pod网段的规则,否则会造成集群网络异常。
- 确保集群节点的安全组入方向放行Pod网段,出方向全部放行。
VPC的路由表
集群网络组件为Terway
该模式下Pod网段是VPC网段下的某个交换机的网段,不依赖于VPC路由表实现Pod跨主机通信,无需配置VPC路由表。
集群网络组件不为Terway
该模式下Pod网段跟VPC网段不是相同网段,Pod跨主机通信依赖VPC路由表的路由条目。正常情况下一个集群应该包含如下条目。
- 检查集群的节点数。在对应的该集群在VPC路由表条目内,务必确认有相同数量的路由表条目。
说明:数量只能相同,不能多也不能少。
- 具体每个路由表条目包含如下内容。
- 目的地址是集群节点的Pod CIDR网段。
说明:可通过
kubectl describe node [$Node_Name] |grep PodCIDR
命令获取,[$Node_Name]为具体的Node名称。 - 下一跳地址是该节点的ECS实例ID。
- 目的地址是集群节点的Pod CIDR网段。
- 路由表条目必须准确。有冲突的、错误的路由表条目都会导致集群网络异常。
总结
任何集群网络异常的问题,都建议先认真检查上述相关配置,大部分集群网络问题都是上述配置不正确导致的。
适用于
- 容器服务Kubernetes专有版
- 容器服务Kubernetes托管版