從 Azure Kubernetes Service (AKS) 對 Azure Container Registry (ACR) 進行驗證
當您搭配 Azure Kubernetes Service (AKS) 使用 Azure Container Registry (ACR) 時,您必須建立驗證機制。 您可以使用 Azure CLI、Azure PowerShell 或 Azure 入口網站,設定 ACR 與 AKS 之間的必要權限。 本文提供使用 Azure CLI 或 Azure PowerShell 在這些 Azure 服務之間設定驗證的範例。
AKS 與 ACR 整合會將 AcrPull 角色指派給與 AKS 叢集中的代理程式集區相關聯的 Microsoft Entra ID 受控識別。 如需 AKS 受控識別的詳細資訊,請參閱受控識別的摘要。
重要
附加 ACR 時,Microsoft Entra 群組發生延遲問題。 如果 AcrPull 角色授與 Microsoft Entra 群組,而且 kubelet 身分識別會新增至群組以完成 RBAC 設定,則 RBAC 群組生效之前可能會有延遲。 如果您正在執行需要完成 RBAC 設定的自動化,建議您使用自備 kubelet 身分 識別作為因應措施。 您可以預先建立使用者指派的身分識別,並將其新增至 Microsoft Entra 群組,然後使用身分識別作為 kubelet 身分識別來建立 AKS 叢集。 這可確保身分識別會在 kubelet 產生權杖之前新增至 Microsoft Entra 群組,以避免延遲問題。
注意
此文章涵蓋 AKS 與 ACR 之間的自動驗證。 如果您需要從私人外部登錄提取映像,請使用映像提取密碼。
開始之前
- 您需要在 Azure 訂用帳戶上具備擁有者、Azure 帳戶管理員或 Azure 共同管理員角色。
- 為避免需要這其中一個角色,您可以改為使用現有的受控識別,從 AKS 驗證 ACR。 如需詳細資訊,請參閱使用 Azure 受控識別來向 ACR 進行驗證。
- 如果您使用 Azure CLI,此文章會要求您執行 Azure CLI 2.7.0 版或更新版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - 如果您使用 Azure PowerShell,此文章會要求您執行 Azure PowerShell 5.9.0 版或更新版本。 執行
Get-InstalledModule -Name Az
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure PowerShell。 - 您可以在 Terraform 參考中找到使用 Terraform 設定 ACR 的範例和語法。
建立新的 ACR
如果您還沒有 ACR,請使用
az acr create
命令建立一個。 下列範例會將MYACR
變數設定為 ACR 的名稱 mycontainerregistry,並使用該變數來建立登錄。 您的 ACR 名稱必須是全域唯一的,而且只使用小寫字母。MYACR=mycontainerregistry az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
建立新的 AKS 叢集,並與現有的 ACR 整合
使用
az aks create
命令搭配--attach-acr
參數,建立新的 AKS 叢集並與現有的 ACR 整合。 下列命令可讓您授權訂用帳戶中的現有 ACR,並為受控識別設定適當的 AcrPull 角色。MYACR=mycontainerregistry az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
此命令可能需要幾分鐘的時間才能完成。
注意
如果您使用 ACR,其位於與 AKS 叢集不同的訂用帳戶中,或偏好使用 ACR 資源識別碼,而不是 ACR 名稱,您可以使用下列語法來執行此動作:
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
設定現有 AKS 叢集的 ACR 整合
將 ACR 附加至現有的 AKS 叢集
使用
az aks update
命令搭配--attach-acr
參數 和 acr-name 或 acr-resource-id 的有效值,將現有的 ACR 與現有的 AKS 叢集整合。# Attach using acr-name az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-name> # Attach using acr-resource-id az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-resource-id>
從 AKS 叢集中斷連結 ACR
使用
az aks update
命令搭配--detach-acr
參數和 acr-name 或 acr-resource-id 的有效值,移除 ACR 與 AKS 叢集之間的整合。# Detach using acr-name az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-name> # Detach using acr-resource-id az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-resource-id>
使用 ACR 和 AKS
將映像匯入您的 ACR
使用
az acr import
命令,將映像從 Docker Hub 匯入您的 ACR。az acr import --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
從 ACR 將範例映像部署到 AKS
使用
az aks get-credentials
命令確定您有適當的 AKS 認證。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用下列範例 YAML 建立名為 acr-nginx.yaml 的檔案,並以 ACR 的名稱取代 acr-name。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx0-deployment labels: app: nginx0-deployment spec: replicas: 2 selector: matchLabels: app: nginx0 template: metadata: labels: app: nginx0 spec: containers: - name: nginx image: <acr-name>.azurecr.io/nginx:v1 ports: - containerPort: 80
使用
kubectl apply
命令在 AKS 叢集中執行部署。kubectl apply -f acr-nginx.yaml
使用
kubectl get pods
命令監視部署。kubectl get pods
輸出應該會顯示兩個執行中的 Pod,如下列範例輸出所示:
NAME READY STATUS RESTARTS AGE nginx0-deployment-669dfc4d4b-x74kr 1/1 Running 0 20s nginx0-deployment-669dfc4d4b-xdpd6 1/1 Running 0 20s
疑難排解
- 使用
az aks check-acr
命令驗證可以從 AKS 叢集存取登錄。 - 深入了解 ACR 監視。
- 深入了解 ACR 健康情況。