对 TKGS 集群网络错误进行故障排除时,请参阅本节中的提示。

检查节点网络

每个 TKG 集群应具有以下网络资源。
网络对象 网络资源 描述 故障排除 命令
VirtualNetwork Tier-1 路由器和链接的分段 集群的节点网络 确保已分配 SNAT IP
kubectl get virtualnetwork -n NS-NAME
虚拟网络接口 分段上的逻辑端口 集群节点的节点网络接口 确保每个 VirtualMachine 都具有 IP 地址
kubectl get virtualmachines -n NS-NAME NODE-NAME

检查控制平面的负载均衡器

TKG 集群控制平面的负载均衡器提供对 Kubernetes API 服务器的访问。此负载均衡器由系统在集群创建期间自动置备。它应具有以下资源。

检查控制平面负载均衡器的状态,可以帮助您了解发生错误时资源是否已准备就绪。通常,您可以使用以下命令在主管集群中查找这些负载均衡器: kubectl get services -A | grep control-plane-service
网络对象 网络资源 描述 故障排除 命令
VirtualMachineService 不适用 已创建 VirtualMachineService 并将其转换为 k8s 服务。 确保其状态已更新并包含负载均衡器虚拟 IP (VIP)。
kubectl get virtualmachineservices -n NS-NAME SERVICE-NAME
服务 具有 VirtualServer 实例的负载均衡器服务器和关联的服务器池(成员池) 已创建负载均衡器类型的 Kubebernetes 服务,以访问 TKG 集群 API 服务器。 确保已分配外部 IP。确保您可以通过 LB 服务的外部 IP 访问 TKG 集群 API。
主管命名空间:
kubectl get services -A | grep control-plane-service
集群命名空间:
kubectl get services -n NS-NAME
任一命名空间
curl -k https://EXTERNAL-IP:PORT/healthz
端点 端点成员(TKG 集群控制平面节点)应位于成员池中。 将创建一个端点以包含所有 TKG 集群控制平面节点。
kubectl get endpoints -n NS-NAME SERVICE-NAME

检查工作节点上的负载均衡器服务

在创建 LoadBalancer 类型的 Kubernetes 服务时,用户会为 TKG 集群工作节点创建负载均衡器实例。

第一步是确保云提供商在 TKG 集群上运行。
kubectl get pods -n vmware-system-cloud-provider
验证相关 Kubernetes 对象是否已创建且处于正确状态。
网络对象 网络资源 描述 命令
主管中的 VirtualMachineService 不适用 在主管中创建 VirtualMachineService 并在主管中转换为 Kubernetes 服务
kubectl get virtualmachineservice -n NS-NAME SVC-NAME
主管中的负载均衡器服务 TKG 集群负载均衡器中的 VirtualServer 以及关联的成员池。 在主管中创建负载均衡器服务以访问此 LB 类型的服务
kubectl get services -n NS-NAME SVC-NAME
主管中的端点 端点成员(TKG 集群工作节点)应位于 NSX 中的成员池中。 将创建一个端点以包含所有 TKG 集群工作节点
# kubectl get endpoints -n NS-NAME SVC-NAME
TKG 集群中的负载均衡器服务 不适用 用户部署的 TKG 集群中的负载均衡器服务应使用负载均衡器 IP 更新其状态
kubectl get services

检查 主管 NSX 网络连接堆栈

Kubernetes API 服务器、NCP Pod 以及在任何控制器 Pod 中运行的管理器容器是检查基础架构网络问题的主要起点。

以下错误消息可能表明网络结构层的某个位置(包括 ESXi 主机网卡连接到的物理端口组)存在路由或 MTU 问题:
{"log":"I0126 19:40:15.347154 1 log.go:172] http: TLS handshake error from 
100.64.128.1:4102: EOF\n","stream":"stderr","time":"2021-01-26T19:40:15.347256146Z"}
要进行故障排除,请通过 SSH 连接到 ESXi 主机并运行以下命令:
esxcli network ip interface ipv4 get

此命令将列出主机的所有 vmkernel 接口。如果您只有一个 TEP 接口,它将始终为 vmk10。如果您还有第二个或第三个 TEP 接口,则为 vmk11 和 vmk12,依此类推。创建的 TEP 接口数量取决于在上行链路配置文件中分配给 TEP 的上行链路数量。如果选择对各上行链路中的 TEP 进行“负载分担”,则会为每个上行链路创建一个 TEP 接口。

主 TEP 到 TEP ping 命令具有以下语法:
vmkping ++netstack=vxlan -s 1572 -d -I vmk10 10.218.60.66 
其中
  • -s 是数据包大小
  • -d 表示不拆分
  • -I 表示从 vmk10 获取链路
  • IP address 是要 ping 的其他 ESXi 主机或 NSX Edge 上的 TEP 接口
如果 MTU 设置为 1600,则大小超过 1573 的数据包会失败(您只需要 MTU 大于 1500 即可)。如果 MTU 设置为 1500,则大小超过 1473 的任何数据包都会失败。如果要从其他 TEP 接口获取 ping,则可能需要将其更改为 vmk11。