使用命令叫用或執行命令功能存取私人 Azure Kubernetes Service (AKS) 叢集
存取私人 AKS 叢集時,您必須從叢集虛擬網路、對等互連網路或已設定的私人端點連線到叢集。 這些方式需要設定 VPN、Express Route、在叢集虛擬網路內部署 jumpbox,或在另一個虛擬網路內建立私人端點。
透過 Azure CLI,您可以使用 command invoke
來存取私人叢集,而不需要設定 VPN 或 Express Route。 command invoke
可讓您透過 Azure API 在私人叢集上遠端叫用 kubectl
和 helm
這類命令,而不需要直接連線至叢集。 Microsoft.ContainerService/managedClusters/runcommand/action
和 Microsoft.ContainerService/managedclusters/commandResults/read
動作可控制使用 command invoke
的權限。
透過 Azure 入口網站,您可以使用 Run command
功能在私人叢集上執行命令。 Run command
功能會使用相同的 command invoke
功能在叢集上執行命令。
所建立的 Run command
Pod會提供 kubectl
和 helm
來操作您的叢集。 jq
、 xargs
、 grep
和 awk
可供 Bash 支援使用。
開始之前
開始之前,請確定您擁有下列資源和權限:
- 現有私人叢集。 如果您還沒有私人叢集,請參閱建立私人 AKS 叢集。
- Azure CLI 2.24.0 版或更新版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - 存取叢集上的
Microsoft.ContainerService/managedClusters/runcommand/action
和Microsoft.ContainerService/managedclusters/commandResults/read
角色。
限制
這項功能是設計來簡化叢集存取,並非 專為程式設計存取所設計。 如果您有程式使用 叫用 Run command
Kubernetes,則適用下列缺點:
- 您只會取得 exitCode 和 文字輸出,而且會遺失 API 層級的詳細數據。
- 一個額外的躍點引進額外的失敗點。
所建立的 Run command
Pod 會以 200m CPU
和 500Mi memory
要求進行硬式編碼,以及和 500m CPU
1Gi memory
限制。 在封裝所有節點的罕見情況下,無法在 ARM API 限制 60 秒內排程 Pod。 這表示 Run command
會失敗,即使它設定為自動調整也一樣。
command invoke
會從叢集執行命令,因此,任何以這種方式執行的命令都受限於您設定的網路限制和所有其他已設定的限制。 請確保叢集中有足夠的節點和資源,以將這個命令 Pod 進行排程。
注意
command invoke
的輸出大小限制為 512kB。
在 AKS 叢集上執行命令
使用 command invoke
以執行單一命令
使用
az aks command invoke --command
命令,在叢集上執行命令。 下列範例命令會在 myResourceGroup 的 myPrivateCluster 叢集上執行kubectl get pods -n kube-system
命令。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl get pods -n kube-system"
使用 command invoke
以執行多個命令
使用
az aks command invoke --command
命令,在叢集上執行多個命令。 下列範例命令會在 myResourceGroup 的 myPrivateCluster 叢集上執行三個helm
命令。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update && helm install my-release bitnami/nginx"
使用 command invoke
以執行具有附加檔案或目錄的命令
使用
az aks command invoke --command
命令搭配--file
參數,執行具有附加檔案或目錄的命令。 下列範例命令會在 myResourceGroup 的 myPrivateCluster 叢集上執行kubectl apply -f deployment.yaml -n default
。deployment.yaml
檔案是從az aks command invoke
執行所在之開發電腦的目前目錄所附加。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl apply -f deployment.yaml -n default" \ --file deployment.yaml
使用 command invoke
執行附加了目前目錄中所有檔案的命令
使用
az aks command invoke --command
命令搭配--file
參數,執行附加了目前目錄中所有檔案的命令。 下列範例命令會在 myResourceGroup 的 myPrivateCluster 叢集上執行kubectl apply -f deployment.yaml configmap.yaml -n default
。deployment.yaml
和configmap.yaml
檔案是開發電腦上目前目錄的一部分,而此開發電腦上已執行az aks command invoke
。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl apply -f deployment.yaml configmap.yaml -n default" \ --file .
疑難排解
如需 az aks command invoke
最常見問題與其修正方式的相關資訊,請參閱解決 az aks command invoke
失敗 (部分機器翻譯)。
下一步
在本文中,您已了解如何存取私人叢集並在該叢集上執行命令。 如需 AKS 叢集的詳細資訊,請參閱下列文章:
- 在 AKS 中使用私人端點連線 (部分機器翻譯)
- AKS 中的虛擬網路對等互連 (部分機器翻譯)
- AKS 中具有自訂 DNS 的中樞和輪輻 (部分機器翻譯)