“服务器错误:拨号后端错误:拨号 tcp”消息

现象

执行以下操作之一时,会收到“服务器错误:拨号后端错误:拨号 tcp”错误消息:

  • 使用任一 kubectl logsexecattachtopport-forward 命令。
  • 使用第三方 Kubernetes 客户端工具实现与上一列表项中的命令相同的功能。

发生错误的原因

Kubernetes API 服务器必须针对多个用例将 API 请求转发到上游组件。 如果 API 服务器无法与上游组件建立 TCP 连接,则会发生此错误。 此类上游组件的示例包括群集和 kubelet 中的 kubernetes 服务。

如果问题仍然存在,则网络阻塞可能是原因。 若要确定负责任的网络配置,请先确定问题的范围。

缩小范围:所有 kubectl 子命令是否失败?

尝试至少 kubectl exec运行命令 kubectl logs <podname>kubectl top pods 命令。

如果仅 kubectl logs <podname> 出现或 kubectl exec 失败,请检查问题是否在不同的节点上具有 Pod。

如果仅 kubectl top pods 失败,请检查问题是针对所有节点上的 Pod 还是仅针对一个节点上的 Pod 发生。

原因 1:kubelet 端口(node:10250)被阻止

特定于 Pod 的访问问题(例如运行kubectl logskubectl exec所遇到的访问问题),如果 API 服务器无法访问端口 10250 上的节点来访问 Kubelet API,则会发生。 这些问题可能是由网络安全组(NSG)或防火墙阻止的连接引起的。

若要解决此问题,请检查节点子网上的 NSG 是否包含可能阻止 TCP 端口 10250 的入站规则。

原因 2:特定服务失败

Kubernetes 访问 svc/metrics-server 命名空间下 kube-system 用于运行 kubectl top 命令。 还有其他方案,例如 允许 Webhook,其中 API 服务器还可以访问其他服务。 请务必注意,根据服务故障模式,错误消息可能会有所不同。

若要排查该问题,请检查错误消息,以确定哪些服务受到影响,并查看相关 Pod、服务和终结点的状态。

原因 3:Konnectivity 或隧道失败

如果未启用 API Server VNet 集成,AKS 会部署一个隧道解决方案,该解决方案将 API 服务器请求代理到群集内网络位置。 大多数 AKS 群集都使用 Konnectivity 解决方案。 Konnectivity 不要求在 API 服务器上打开特殊端口。 有关详细信息,请参阅 AKS 所需的网络规则

若要解决此问题,请检查命名空间中kube-system是否konnectivity-agent正在运行,其容器是否处于就绪状态。 尝试删除 Pod 以查看连接是否在新 Pod 准备就绪后恢复。

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区