線上時無法使用組態檔
本文說明如何修正因為遺漏或無效配置檔而無法連線到 Azure Kubernetes Service (AKS) 叢集時所發生的問題。
必要條件
- Azure CLI。
- Kubernetes 叢集命令行工具 (kubectl)。 您也可以在 Azure CLI 中執行 az aks install-cli 命令來安裝 kubectl。
徵兆
在叢集連線嘗試期間,會出現類似下列文字的錯誤訊息:
Unable to connect to the server: dial tcp [::1]:8080: connectex: No connection could be made because the target machine actively refused it.
error: You must be logged in to the server (the server has asked for the client to provide credentials)
原因
kubectl 工具和其他 Kubernetes 連線工具會使用名為 config 的本機組態檔。組態檔包含用來連線到叢集的驗證認證和詳細數據。 預設情況:
Azure CLI 中的 az aks get-credentials 命令,用來取得受控 Kubernetes 叢集的存取認證,會修改 ~/.kube/config 檔案。
kubectl 命令會使用 $HOME/.kube 目錄中的 kubeconfig (kubectl 組態) 檔案。
因此,嘗試 Kubernetes 會話期間會發生什麼情況取決於執行 kubectl 命令的使用者。 如果您以使用者 A 身分登入,並執行這兩個命令,以下是會發生什麼事:
az aks get-credentials
命令會嘗試在 C:\Users\A\.kube\config 檔案中新增 kubeconfig 參數。kubectl 命令會嘗試搜尋 C:\Users\A\.kube\config 檔案。
但是對於 kubectl,如果 kubeconfig 檔案的指標已變更,則用來存取叢集的檔案應該位於不同的位置。
注意
kubeconfig 檔案是檔案的參考,其中包含存取 Kubernetes 叢集的組態參數。 它不一定參考名為 kubeconfig 的檔案。
如果發生下列其中一個案例,就會發生錯誤:
原因 1: 組態 檔不存在
您的電腦上沒有組態檔。
解決方案:儲存認證
在 Azure CLI 中執行 az aks get-credentials
命令以載入組態檔,以儲存認證。 如果您不想使用預設位置,請使用 config 的位置指定 參數(例如 ~/Dir1/Dir2/config 或 C:\Dir1\Dir2\config)。--file <config-file-location>
az aks get-credentials --resource-group <cluster-resource-group> \
--name <cluster-name> \
[--file <config-file-location>]
原因 2: 組態 檔位於錯誤的目錄中
組 態 檔位於您的電腦上,但它位於命令和/或 kubectl 工具預期其所在的不同目錄中 az aks get-credentials
。
解決方案:移動 組態 檔、再次儲存認證,或變更 KUBECONFIG 環境變數
採取下列一或多個動作:
將 組態 檔移至您想要進入的目錄。
執行
az aks get-credentials
命令。 如果不是預設位置,請指定您想要的位置。az aks get-credentials --resource-group <cluster-resource-group> \ --name <cluster-name> \ [--file <config-file-location>]
使用下列其中一個選項來變更 kubectl 尋找組態參數的位置:
KUBECONFIG
修改環境變數以指向組態檔的目前位置。 如需詳細資訊,請參閱 設定 KUBECONFIG 環境變數。使用
--kubeconfig=<config-file-location>
參數執行 kubectl config 命令。
原因 3: 組態 檔已過期或已損毀
組 態 檔位於您的電腦上。 它也位於命令和 kubectl 工具的預期目錄中 az aks get-credentials
。 但檔案已過期或損毀。
解決方案:重新建立認證
重新建立認證,因為現有的認證可能已過期或損毀。 在此情況下,您可以使用 參數執行 az aks get-credentials
命令 --overwrite-existing
。
az aks get-credentials --resource-group <cluster-resource-group> \
--name <cluster-name> \
--overwrite-existing \
[--file <config-file-location>]
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。