kubectl 故障排除

这份文档是关于调查和诊断与 kubectl 相关的问题的。如果您在访问 kubectl 或连接到集群时遇到问题,本文档概述了各种常见场景和潜在解决方案,以帮助识别和解决可能的原因。

开始之前

  • 您需要有一个 Kubernetes 集群。
  • 您还需要安装 kubectl - 请参阅 安装工具

验证 kubectl 设置

确保您已在本地机器上正确安装和配置了 kubectl。检查 kubectl 版本以确保它是最新的并且与您的集群兼容。

检查 kubectl 版本

kubectl version

您将看到类似的输出

Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.4",GitCommit:"fa3d7990104d7c1f16943a67f11b154b71f6a132", GitTreeState:"clean",BuildDate:"2023-07-19T12:20:54Z", GoVersion:"go1.20.6", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v5.0.1
Server Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.3",GitCommit:"25b4e43193bcda6c7328a6d147b1fb73a33f1598", GitTreeState:"clean",BuildDate:"2023-06-14T09:47:40Z", GoVersion:"go1.20.5", Compiler:"gc", Platform:"linux/amd64"}

如果您看到 无法连接到服务器:拨号 tcp <server-ip>:8443: i/o 超时,而不是 服务器版本,则需要对 kubectl 与您的集群的连接进行故障排除。

确保您已按照 安装 kubectl 的官方文档 安装 kubectl,并且已正确配置了 $PATH 环境变量。

检查 kubeconfig

kubectl 需要一个 kubeconfig 文件来连接到 Kubernetes 集群。kubeconfig 文件通常位于 ~/.kube/config 目录下。确保您有一个有效的 kubeconfig 文件。如果您没有 kubeconfig 文件,您可以从您的 Kubernetes 管理员那里获取它,或者您可以从您的 Kubernetes 控制平面的 /etc/kubernetes/admin.conf 目录中复制它。如果您在云平台上部署了 Kubernetes 集群并丢失了 kubeconfig 文件,您可以使用您的云提供商的工具重新生成它。有关重新生成 kubeconfig 文件的信息,请参阅云提供商的文档。

检查 $KUBECONFIG 环境变量是否配置正确。您可以设置 $KUBECONFIG 环境变量或使用 --kubeconfig 参数与 kubectl 一起指定 kubeconfig 文件的目录。

检查 VPN 连接

如果您使用虚拟专用网络 (VPN) 访问您的 Kubernetes 集群,请确保您的 VPN 连接处于活动状态并且稳定。有时,VPN 断开连接会导致与集群的连接问题。重新连接到 VPN 并尝试再次访问集群。

认证和授权

如果您使用基于令牌的认证,并且 kubectl 返回有关认证令牌或认证服务器地址的错误,请验证 Kubernetes 认证令牌和认证服务器地址是否配置正确。

如果 kubectl 返回有关授权的错误,请确保您使用的是有效的用户凭据。并且您有权访问您请求的资源。

验证上下文

Kubernetes 支持 多个集群和上下文。确保您使用的是正确的上下文与您的集群进行交互。

列出可用的上下文

kubectl config get-contexts

切换到适当的上下文

kubectl config use-context <context-name>

API 服务器和负载均衡器

The kube-apiserver 服务器是 Kubernetes 集群的中心组件。如果 API 服务器或运行在 API 服务器前面的负载均衡器无法访问或没有响应,您将无法与集群进行交互。

使用 ping 命令检查 API 服务器的主机是否可以访问。检查集群的网络连接和防火墙。如果您使用云提供商部署集群,请检查云提供商针对集群的 API 服务器的运行状况检查状态。

验证负载均衡器(如果使用)的状态,以确保它正常运行并向 API 服务器转发流量。

TLS 问题

  • 需要额外的工具 - base64openssl 版本 3.0 或更高版本。

默认情况下,Kubernetes API 服务器仅提供 HTTPS 请求。在这种情况下,可能会由于各种原因而出现 TLS 问题,例如证书过期或信任链有效性。

您可以在 ~/.kube/config 目录中找到的 kubeconfig 文件中找到 TLS 证书。certificate-authority 属性包含 CA 证书,client-certificate 属性包含客户端证书。

验证这些证书的过期时间

kubectl config view --flatten --output 'jsonpath={.clusters[0].cluster.certificate-authority-data}' | base64 -d | openssl x509 -noout -dates

输出

notBefore=Feb 13 05:57:47 2024 GMT
notAfter=Feb 10 06:02:47 2034 GMT
kubectl config view --flatten --output 'jsonpath={.users[0].user.client-certificate-data}'| base64 -d | openssl x509 -noout -dates

输出

notBefore=Feb 13 05:57:47 2024 GMT
notAfter=Feb 12 06:02:50 2025 GMT

验证 kubectl 助手

一些 kubectl 认证助手提供对 Kubernetes 集群的轻松访问。如果您使用了此类助手并且遇到连接问题,请确保必要的配置仍然存在。

检查 kubectl 配置以获取认证详细信息

kubectl config view

如果您之前使用过助手工具(例如,kubectl-oidc-login),请确保它仍然安装并配置正确。

上次修改时间:2024 年 4 月 21 日下午 2:37 PST:更新 troubleshoot-kubectl.md (6ea106744e)