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"}

如果你看到 Unable to connect to the server: dial tcp <server-ip>:8443: i/o timeout,而不是 Server Version,你需要解決 kubectl 與叢集的連線問題。

請確保你按照kubectl 官方安裝文件安裝了 kubectl,並且已正確配置 $PATH 環境變數。

檢查 kubeconfig

kubectl 需要一個 kubeconfig 檔案才能連線到 Kubernetes 叢集。kubeconfig 檔案通常位於 ~/.kube/config 目錄下。請確保你有一個有效的 kubeconfig 檔案。如果你沒有 kubeconfig 檔案,可以從 Kubernetes 管理員那裡獲取,或者從 Kubernetes 控制平面的 /etc/kubernetes/admin.conf 目錄複製。如果你在雲平臺上部署了 Kubernetes 叢集,但丟失了 kubeconfig 檔案,可以使用雲提供商的工具重新生成。有關重新生成 kubeconfig 檔案的資訊,請參閱雲提供商的文件。

檢查 $KUBECONFIG 環境變數是否配置正確。你可以設定 $KUBECONFIG 環境變數,或者使用 kubectl--kubeconfig 引數指定 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 問題

  • 需要額外工具:base64openssl 版本 3.0 或更高版本。

Kubernetes API 伺服器預設只提供 HTTPS 請求。在這種情況下,TLS 問題可能由於各種原因而發生,例如證書過期或信任鏈無效。

你可以在 kubeconfig 檔案中找到 TLS 證書,該檔案位於 ~/.kube/config 目錄。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)