
無需更改基礎設施如果我執行任何 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-data
和client-key-data
from複製/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 檔案。