kubectl getnodes 錯誤:您必須登入伺服器(未經授權) - 如何修復

kubectl getnodes 錯誤:您必須登入伺服器(未經授權) - 如何修復

無需更改基礎設施如果我執行任何 kubectl 命令,即:

kubectl get nodes

我收到錯誤

You must be logged in to the server (Unauthorized) 

kubernetes 叢集運作正常,我沒有對其進行任何更改...有什麼想法如何調試這個嗎? kubectl 沒有 -vv od 調試標誌來提供更多資訊。

如果我嘗試

kubectl version

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0",
(...) 
error: You must be logged in to the server (the server has asked for the client to provide credentials)

答案1

就我而言,問題是在更新 kubernates 憑證後開始的,這導致現有~/.kube/config憑證中包含過時的金鑰和憑證值。

解決方案是更換價值觀 client-certificate-data並在具有相同名稱的更新文件中的值的client-key-data文件中。~/.kube/config/etc/kubernetes/kubelet.conf

答案2

從較新版本的 Kubernetes 開始,您可以將client-certificate-dataclient-key-datafrom複製/etc/kubernetes/admin.conf到您的檔案中。~/.kube/config這個答案用於確定您的證書何時到期。

答案3

我今天遇到了類似的問題,上述評論幫助我解決了這個問題。我在我的場景中添加了更多詳細信息,因為這可能對具有類似設置的人有所幫助。

我有一個單獨的使用者用於連接到我的 k8s 叢集(這是 EC2 實例中的普通叢集)。我透過新增 ClusterRoleBindings 創建了具有有限存取權限的使用者 arunlal。

如果在執行 API 到叢集時出現以下錯誤(在我的例子中是 Kubectl):

error: You must be logged in to the server (Unauthorized)

請按照以下順序進行操作。

- 首先檢查設定檔中使用的憑證(本機用戶端)

我在本機系統上有一個單獨的配置,因為主配置包含有關其他 k8s 和 okd 叢集憑證的詳細資訊。因此,我在筆記型電腦上建立了第二個設定(/Users/arunlal/.kube/config_two)。在這種情況下,我有以下別名:

alias kctl="kubectl --kubeconfig=/Users/arunlal/.kube/config_two"

- 從該文件中,您將獲得我們正在使用的憑證。

[[電子郵件受保護]~] cat /Users/arunlal/.kube/config_two| grep -A 5 個用戶
用戶:
- 姓名:阿倫拉爾
  用戶:
    客戶端憑證:/Users/arunlal/.arunlal-keys/arunlal.crt
    客戶端金鑰:/Users/arunlal/.arunlal-keys/arunlal.key

- 在用戶端設定中取得憑證後,您可以使用 openssl 指令檢查有效性。

    [[電子郵件受保護]〜] openssl x509 -noout -dates -in /Users/arunlal/.arunlal-keys/arunlal.crt
    notBefore=2021 年 6 月 22 日 23:43:22 GMT
    notAfter=2021 年 9 月 30 日 23:43:22 GMT

- 驗證有效期限

在創建用戶時,我度過了 5 天,這就是問題所在。我如何創建用戶?

openssl genrsa -out arunlal.key 2048
openssl req -new -key arunlal.key -out arunlal.csr -subj "/CN=arunlal/O=crybit"
openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 5
kubectl config set-credentials arunlal --client-certificate=/root/arunlal-keys/arunlal.crt  --client-key=/root/arunlal-keys/arunlal.key

- 為了解決這個問題,我重新創建了更多天數的證書

openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt
-CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 100

- 我們需要從 k8s 叢集運作。

- 在本地替換了憑證。

使用新憑證修改了 /Users/arunlal/.arunlal-keys/arunlal.crt。

希望這對某人有幫助。謝謝!

〜阿倫

答案4

kubeconfig 憑證可能已變更。如果您使用 terraform 部署叢集。執行 terraform apply 來產生新的 kubeconfig 檔案。

相關內容