Azure Kubernetes Service から Azure Container Registry の認証を受けるAuthenticate with Azure Container Registry from Azure Kubernetes Service

Azure Kubernetes Service (AKS) で Azure Container Registry (ACR) を使用する場合は、認証メカニズムを確立する必要があります。When you're using Azure Container Registry (ACR) with Azure Kubernetes Service (AKS), an authentication mechanism needs to be established. この操作は、必要なアクセス許可を ACR に付与することで、CLI とポータルのエクスペリエンスの一部として実装されます。This operation is implemented as part of the CLI and Portal experience by granting the required permissions to your ACR. この記事では、これら 2 つの Azure サービス間の認証を構成する例を示します。This article provides examples for configuring authentication between these two Azure services.

Azure CLI を使用して、いくつかの単純なコマンドで AKS から ACR への統合を設定できます。You can set up the AKS to ACR integration in a few simple commands with the Azure CLI. この統合により、AKS クラスターに関連付けられているサービス プリンシパルに AcrPull ロールが割り当てられます。This integration assigns the AcrPull role to the service principal associated to the AKS Cluster.

開始する前にBefore you begin

これらの例には以下のものが必要です。These examples require:

  • Azure サブスクリプション上の所有者または Azure アカウント管理者ロール。Owner or Azure account administrator role on the Azure subscription
  • Azure CLI バージョン 2.7.0 以降Azure CLI version 2.7.0 or later

所有者 または Azure アカウント管理者 の役割を必要としないようにするには、サービス プリンシパルを手動で構成するか、既存のサービス プリンシパルを使用して AKS から ACR を認証します。To avoid needing an Owner or Azure account administrator role, you can configure a service principal manually or use an existing service principal to authenticate ACR from AKS. 詳細については、サービス プリンシパルによる ACR 認証またはプル シークレットを使用した Kubernetes からの認証に関するページをご参照ください。For more information, see ACR authentication with service principals or Authenticate from Kubernetes with a pull secret.

ACR 統合を使用して新しい AKS クラスターを作成するCreate a new AKS cluster with ACR integration

AKS クラスターの初期作成中に AKS と ACR の統合を設定できます。You can set up AKS and ACR integration during the initial creation of your AKS cluster. AKS クラスターが ACR と対話できるようにするために、Azure Active Directory のサービス プリンシパルが使用されます。To allow an AKS cluster to interact with ACR, an Azure Active Directory service principal is used. 次の CLI コマンドを使用すると、サブスクリプション内の既存の ACR を承認し、サービス プリンシパル用の適切な ACRPull ロールを構成することができます。The following CLI command allows you to authorize an existing ACR in your subscription and configures the appropriate ACRPull role for the service principal. 下のパラメーターの有効な値を指定してください。Supply valid values for your parameters below.

# set this to the name of your Azure Container Registry.  It must be globally unique
MYACR=myContainerRegistry

# Run the following line to create an Azure Container Registry if you do not already have one
az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic

# Create an AKS cluster with ACR integration
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR

または、ACR リソース ID を使用して ACR の名前を指定することもできます。その形式は次のようになります。Alternatively, you can specify the ACR name using an ACR resource ID, which has the following format:

/subscriptions/\<subscription-id\>/resourceGroups/\<resource-group-name\>/providers/Microsoft.ContainerRegistry/registries/\<name\>

注意

AKS クラスターから別のサブスクリプションにある ACR を使用している場合は、AKS クラスターから接続または接続解除するときに ACR リソース ID を使用します。If you are using an ACR that is located in a different subscription from your AKS cluster, use the ACR resource ID when attaching or detaching from an AKS cluster.

az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry

この手順は、完了するまでに数分かかることがあります。This step may take several minutes to complete.

既存の AKS クラスターに対する ACR 統合を構成するConfigure ACR integration for existing AKS clusters

下の acr-name または acr-resource-id に有効な値を指定することによって、既存の ACR と既存の AKS クラスターを統合します。Integrate an existing ACR with existing AKS clusters by supplying valid values for acr-name or acr-resource-id as below.

az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-name>

または、or,

az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-resource-id>

次を使用して、ACR と AKS クラスター間の統合を削除することもできます。You can also remove the integration between an ACR and an AKS cluster with the following

az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-name>

oror

az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-resource-id>

ACR および AKS の操作Working with ACR & AKS

イメージを ACR にインポートするImport an image into your ACR

次を実行して、Docker Hub から ACR にイメージをインポートします。Import an image from docker hub into your ACR by running the following:

az acr import  -n <acr-name> --source docker.io/library/nginx:latest --image nginx:v1

ACR から AKS にサンプル イメージをデプロイするDeploy the sample image from ACR to AKS

適切な AKS 資格情報を持っていることを確認しますEnsure you have the proper AKS credentials

az aks get-credentials -g myResourceGroup -n myAKSCluster

次を含む acr-nginx.yaml という名前のファイルを作成します。Create a file called acr-nginx.yaml that contains the following. レジストリのリソース名の代わりに acr-name を使用します。Substitute the resource name of your registry for acr-name. 例: myContainerRegistryExample: myContainerRegistry.

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

次に、AKS クラスターでこのデプロイを実行します。Next, run this deployment in your AKS cluster:

kubectl apply -f acr-nginx.yaml

次を実行して、デプロイを監視できます。You can monitor the deployment by running:

kubectl get pods

2 つのポッドが実行されているはずです。You should have two running pods.

NAME                                 READY   STATUS    RESTARTS   AGE
nginx0-deployment-669dfc4d4b-x74kr   1/1     Running   0          20s
nginx0-deployment-669dfc4d4b-xdpd6   1/1     Running   0          20s

トラブルシューティングTroubleshooting

  • ACR 診断の詳細については、こちらを参照してください。Learn more about ACR Diagnostics
  • ACR の正常性の詳細については、こちらを参照してください。Learn more about ACR Health