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 服务器和负载均衡器
kube-apiserver 服务器是 Kubernetes 集群的核心组件。如果 API 服务器或在 API 服务器前面运行的负载均衡器不可访问或没有响应,您将无法与集群进行交互。
使用 ping
命令检查 API 服务器的主机是否可访问。检查集群的网络连接和防火墙。如果您使用云提供商来部署集群,请检查云提供商的运行状况检查状态以了解集群的 API 服务器。
验证负载均衡器(如果使用)的状态,以确保它处于运行状况良好,并将流量转发到 API 服务器。
TLS 问题
Kubernetes API 服务器默认情况下仅提供 HTTPS 请求。在这种情况下,TLS 问题可能会由于各种原因而发生,例如证书过期或信任链有效性。
您可以在 ~/.kube/config
目录中找到 kubeconfig 文件中的 TLS 证书。certificate-authority
属性包含 CA 证书,client-certificate
属性包含客户端证书。
验证这些证书的过期时间
openssl x509 -noout -dates -in $(kubectl config view --minify --output 'jsonpath={.clusters[0].cluster.certificate-authority}')
输出
notBefore=Sep 2 08:34:12 2023 GMT
notAfter=Aug 31 08:34:12 2033 GMT
openssl x509 -noout -dates -in $(kubectl config view --minify --output 'jsonpath={.users[0].user.client-certificate}')
输出
notBefore=Sep 2 08:34:12 2023 GMT
notAfter=Sep 2 08:34:12 2026 GMT
验证 kubectl 助手
一些 kubectl 身份验证助手提供了对 Kubernetes 集群的轻松访问。如果您使用了此类助手,并且遇到连接问题,请确保必要的配置仍然存在。
检查 kubectl 配置以获取身份验证详细信息
kubectl config view
如果您之前使用过助手工具(例如,kubectl-oidc-login
),请确保它仍然已安装并正确配置。