解決「az aks 命令叫用」失敗
本文說明如何解決 Microsoft Azure CLI 中的 az aks 命令叫用失敗,讓您可以成功連線到任何 Azure Kubernetes Service (AKS) 叢集,特別是私人 AKS 叢集。
其他連接方法需要使用額外的元件,如下表所示。
線上方法 | 額外的元件 |
---|---|
虛擬網路 | 虛擬專用網 (VPN) |
對等互連網路 | Azure ExpressRoute |
私人端點 | Jumpbox |
az aks command invoke
Azure CLI 命令是連線到不需要額外元件之叢集的替代方式。
當您執行命令時az aks command invoke
,Azure CLI 會自動在 命名空間中aks-command
建立 command-<ID>
Pod,以存取 AKS 叢集並擷取所需的資訊。
必要條件
Kubernetes kubectl 工具。 若要使用 Azure CLI 安裝 kubectl,請執行 az aks install-cli 命令。
徵狀
下表列出常見的 az aks command invoke
錯誤訊息。 每個錯誤訊息都有區段的連結,其中描述錯誤發生的原因,以及如何修正錯誤。
錯誤訊息 | 連結 |
---|---|
作業傳回無效的狀態 「找不到」 | 原因 1:無法建立 Pod,因為節點或資源條件約束 |
因為 kubernetes 失敗,所以無法在 Managed 叢集中執行命令。 詳細數據:許可 Webhook「validation.gatekeeper.sh」拒絕要求: <原則特定訊息> | 原因 2:Azure 原則 不允許建立 Pod |
來自伺服器的錯誤 (禁止) :禁止命名空間:使用者「<標識>符」無法在叢集範圍的 API 群組 “” 中列出資源“<資源>” | 原因 3:未授與必要角色 |
無法連線到 MSI。 請確定 MSI 已正確設定。 傳回令牌要求:回應 [400]; |
原因 4:發生 Cloud Shell 問題 |
原因 1:無法建立 Pod,因為節點或資源條件約束
作業會傳 Not Found
回狀態, command-<ID>
因為 Pod 無法達到成功狀態,例如 Running
。 (在許多情況下,Pod 會保持在 Pending
狀態。) 在此情況下,節點無法排程 Pod。 此案例可能有不同的原因,例如下列原因:
- 資源條件約束
- 具有 或
SchedulingDisabled
狀態的NotReady
節點 - 具有 Pod 無法容許之範本的節點
- 其他原因
解決方案 1:變更組態,讓您可以排程和執行 Pod
請確定 command-<ID>
Pod可以排程並執行。
原因 2:Azure 原則 不允許建立 Pod
如果您有特定的 Azure 原則, az aks command invoke
命令可能會因為 Pod 中不允許的 command-<ID>
設定而失敗。 例如,您可能有需要只讀根文件系統或其他特定組態的 Azure 原則。
解決方案 2:豁免禁止建立 Pod 之原則的命名空間
我們建議您針對不允許建立 Pod 的相關聯 Azure 原則豁免 aks-command
命名空間。 如需豁免的詳細資訊,請參閱瞭解 Azure 原則
若要豁免 Azure 原則:
在 Azure 入口網站 中,搜尋並選取 [原則]。
在 [ 原則 ] 瀏覽窗格中,找出 [ 撰寫 ] 區段,然後選取 [ 指派]。
在工作分派數據表中,尋找包含您要變更之指 派名稱 的數據列,然後選取工作分派的名稱。
在該指派的原則指派頁面中,選取 [ 編輯指派]。
選取 [ 參數] 索引標籤 。
清除 [僅顯示需要輸入或檢閱的參數 ] 選項。
在 [ 命名空間排除 專案] 方塊中,將 aks-command 命名空間新增至要排除的命名空間清單。
或者,如果原則不是內建原則,您可以檢查 Pod 的 command-<ID>
設定,並視需要調整原則。 若要探索 Pod 的 YAML 設定,請執行下列命令:
kubectl get pods command-<ID> --namespace aks-command --output yaml
原因 3:未授與必要角色
若要使用 命令 az aks command invoke
,您必須能夠存取叢集上的下列角色:
Microsoft.ContainerService/managedClusters/runCommand/action
Microsoft.ContainerService/managedClusters/commandResults/read
如果您沒有這些角色, az aks command invoke
命令就無法擷取所需的資訊。
解決方案3:新增必要角色
新增和 Microsoft.ContainerService/managedClusters/runCommand/action
Microsoft.ContainerService/managedClusters/commandResults/read
角色。
原因 4:發生 Cloud Shell 問題
直接az aks command invoke
在 Azure Cloud Shell 環境中執行命令時,不會如預期般處理命令。 這是 Cloud Shell 中的已知問題。
解決方案 4a:先執行 az login 命令
在 Cloud Shell 中,執行 az login 命令,然後再執行 az aks command invoke
。
解決方案 4b:在本機電腦或虛擬機上執行命令
在 az aks command invoke
已安裝 Azure CLI 的本機電腦或任何虛擬機 (VM) 上執行命令。
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應