Kubernetes集群网络异常的排查方法

更新时间:

问题描述

在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。
  • 路由表条目必须准确。有冲突的、错误的路由表条目都会导致集群网络异常。

总结

任何集群网络异常的问题,都建议先认真检查上述相关配置,大部分集群网络问题都是上述配置不正确导致的。

适用于

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