疑難排解 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 問題可能由於各種原因而發生,例如憑證過期或信任鏈有效性。

您可以在 ~/.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)