Azure Kubernetes Service (AKS) から Azure Container Registry (ACR) の認証を受ける
Azure Kubernetes Service (AKS) で Azure Container Registry (ACR) を使用するときは、認証メカニズムを確立する必要があります。 Azure CLI、Azure PowerShell、または Azure portal を使用して、ACR と AKS の間で必要なアクセス許可を構成することができます。 この記事では、Azure CLI または Azure PowerShell を使用してこれらの Azure サービス間の認証を構成する例を示します。
AKS から ACR の統合により、AKS クラスター内のエージェント プールに関連付けられている Microsoft Entra ID のマネージド ID に、AcrPull ロールが割り当てられます。 AKS マネージド ID について詳しくは、「マネージド ID の概要」をご覧ください。
重要
ACR をアタッチするときに、Microsoft Entra グループに関する待ち時間の問題があります。 Microsoft Entra グループに AcrPull ロールが付与されていて、RBAC の構成を完了するために kubelet ID をグループに追加した場合、RBAC グループが有効になるまでにしばらく時間がかかる可能性があります。 RBAC 構成を完了する必要がある自動化を実行している場合は、回避策として独自の kubelet ID を使用することをお勧めします。 ユーザー割り当て ID を事前に作成し、それを Microsoft Entra グループに追加した後、その ID を kubelet ID として使って AKS クラスターを作成できます。 このようにすると、kubelet によってトークンが生成される前に ID が Microsoft Entra グループに追加され、待ち時間の問題が回避されます。
Note
この記事では、AKS と ACR の間の自動認証について説明します。 プライベート外部レジストリからイメージをプルする必要がある場合は、イメージのプル シークレットを使用します。
開始する前に
- Azure サブスクリプションには、所有者、Azure アカウント管理者、または Azure 共同管理者のロールが必要です。
- これらのロールのいずれも必要ないようにするには、代わりに既存のマネージド ID を使って AKS から ACR を認証できます。 詳しくは、ACR での認証への Azure マネージド ID の使用に関する記事をご覧ください。
- Azure CLI を使っている場合、この記事では Azure CLI バージョン 2.7.0 以降を実行する必要があります。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - Azure PowerShell を使用している場合、この記事では、Azure PowerShell バージョン 5.9.0 以降実行している必要があります。 バージョンを確認するには、
Get-InstalledModule -Name Az
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure PowerShell のインストールに関するページをご覧ください。 - ACR の構成に Terraform を使用する例と構文については、Terraform リファレンスを参照してください。
新しい ACR を作成する
ACR がまだない場合は、
az acr create
コマンドを使用して作成します。 次の例では、MYACR
変数を ACR の名前 mycontainerregistry に設定し、その変数を使用してレジストリを作成します。 ACR 名はグローバルに一意であり、小文字のみを使用する必要があります。MYACR=mycontainerregistry az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
新しい AKS クラスターを作成して既存の ACR と統合する
新しい AKS クラスターを作成し、
--attach-acr
パラメーターを含むaz aks create
コマンドを使用して既存の ACR と統合します。 このコマンドを使うと、サブスクリプション内の既存の ACR を承認し、マネージド ID 用の適切な AcrPull ロールを構成できます。MYACR=mycontainerregistry az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
このコマンドは、完了までに数分かかる場合があります。
注意
AKS クラスターとは別のサブスクリプションにある ACR を使用している場合、または ACR 名の代わりに ACR "リソース ID" を使用する場合は、次の構文を使用して行うことができます。
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 クラスターにアタッチする
--attach-acr
パラメーターと acr-name または acr-resource-id の有効な値を含むaz aks update
コマンドを使用して、既存の 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>
Note
az aks update --attach-acr
コマンドでは、コマンドを実行しているユーザーのアクセス許可を使って、ACR ロール割り当てが作成されます。 このロールは、kubelet マネージド ID に割り当てられます。 AKS マネージド ID について詳しくは、「マネージド ID の概要」をご覧ください。
AKS クラスターから ACR をデタッチする
--detach-acr
パラメーターと acr-name または acr-resource-id の有効な値を含むaz aks update
コマンドを使用して、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-name を ACR の名前に置き換えます。
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
次の出力例に示すように、出力には 2 つの実行中のポッドが表示されます。
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 の正常性の詳細を理解してください。
Azure Kubernetes Service