Azure Kubernetes Service'ten (AKS) Azure Container Registry (ACR) ile Kimlik Doğrulaması Yapma

Azure Kubernetes Service (AKS) ile Azure Container Registry (ACR) kullanırken bir kimlik doğrulama mekanizması oluşturmanız gerekir. Azure CLI, Azure PowerShell veya Azure portalını kullanarak ACR ile AKS arasında gerekli izinleri yapılandırabilirsiniz. Bu makalede, Azure CLI veya Azure PowerShell kullanarak bu Azure hizmetleri arasında kimlik doğrulamasını yapılandırma örnekleri sağlanır.

AKS to ACR tümleştirmesi, AKS kümenizdeki aracı havuzuyla ilişkili Microsoft Entra Id yönetilen kimliğine AcrPull rolünü atar. AKS yönetilen kimlikleri hakkında daha fazla bilgi için bkz . Yönetilen kimliklerin özeti.

Önemli

ACR eklenirken Microsoft Entra gruplarında gecikme sorunu yaşanıyor. AcrPull rolü bir Microsoft Entra grubuna verilirse ve kubelet kimliği RBAC yapılandırmasını tamamlamak için gruba eklenirse, RBAC grubunun etkili olması için bir gecikme olabilir. RBAC yapılandırmasının tamamlanmasını gerektiren bir otomasyon çalıştırıyorsanız geçici çözüm olarak Kendi kubelet kimliğinizi getirin seçeneğini kullanmanızı öneririz. Kullanıcı tarafından atanan bir kimliği önceden oluşturabilir, Microsoft Entra grubuna ekleyebilir ve ardından kimliği kubelet kimliği olarak kullanarak aks kümesi oluşturabilirsiniz. Bu, kubelet tarafından belirteç oluşturulmadan önce kimliğin Microsoft Entra grubuna eklenmesini sağlar ve bu da gecikme sorununu önler.

Not

Bu makale AKS ile ACR arasında otomatik kimlik doğrulamayı kapsar. Özel bir dış kayıt defterinden görüntü çekmeniz gerekiyorsa, görüntü çekme gizli dizisini kullanın.

Başlamadan önce

  • Azure aboneliğinizde Sahip, Azure hesap yöneticisi veya Azure ortak yönetici rolüne ihtiyacınız vardır.
    • Bu rollerden birine ihtiyaç duymamak için, aks'den ACR'nin kimliğini doğrulamak için mevcut yönetilen kimliği kullanabilirsiniz. Daha fazla bilgi için bkz . ACR'de kimlik doğrulamak için Azure yönetilen kimliği kullanma.
  • Azure CLI kullanıyorsanız bu makale, Azure CLI 2.7.0 veya sonraki bir sürümünü çalıştırmanızı gerektirir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
  • Azure PowerShell kullanıyorsanız, bu makalede Azure PowerShell sürüm 5.9.0 veya sonraki bir sürümü kullanmanız gerekir. Sürümü bulmak için Get-InstalledModule -Name Az komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse bkz. Azure PowerShell yükleme.
  • Terraform'un ACR yapılandırması için kullanılmasına yönelik örnekler ve söz dizimi Terraform başvurusunda bulunabilir.

Yeni ACR oluşturma

  • Henüz ACR'niz yoksa komutunu kullanarak az acr create bir ACR oluşturun. Aşağıdaki örnek, değişkenini MYACR ACR, mycontainerregistry adına ayarlar ve kayıt defterini oluşturmak için değişkenini kullanır. ACR adınız genel olarak benzersiz olmalı ve yalnızca küçük harfler kullanmalıdır.

    MYACR=mycontainerregistry
    
    az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
    

Yeni bir AKS kümesi oluşturma ve mevcut bir ACR ile tümleştirme

  • Yeni bir AKS kümesi oluşturun ve parametresiyle komutunu kullanarak az aks create mevcut bir ACR ile tümleştirin--attach-acr. Bu komut, aboneliğinizde var olan bir ACR'yi yetkilendirmenize olanak tanır ve yönetilen kimlik için uygun AcrPull rolünü yapılandırabilir.

    MYACR=mycontainerregistry
    
    az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
    

    Bu komutun tamamlanması birkaç dakika sürebilir.

    Not

    AKS kümenizden farklı bir abonelikte bulunan bir ACR kullanıyorsanız veya ACR adı yerine ACR kaynak kimliğini kullanmayı tercih ediyorsanız, bunu aşağıdaki söz dizimini kullanarak yapabilirsiniz:

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

Mevcut AKS kümesi için ACR tümleştirmesini yapılandırma

Mevcut AKS kümesine ACR ekleme

  • parametresini ve acr-name veya acr-resource-id için geçerli bir değeri kullanarak az aks update mevcut bir ACR'yi mevcut aks kümesiyle --attach-acr tümleştirin.

    # 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>
    

    Not

    komutu, az aks update --attach-acr ACR rol atamasını oluşturmak için komutunu çalıştıran kullanıcının izinlerini kullanır. Bu rol kubelet yönetilen kimliğine atanır. AKS yönetilen kimlikleri hakkında daha fazla bilgi için bkz . Yönetilen kimliklerin özeti.

AKS kümesinden ACR ayırma

  • parametresi ve acr-name veya acr-resource-id için geçerli bir değer ile --detach-acr komutunu kullanarak az aks update ACR ile AKS kümesi arasındaki tümleştirmeyi kaldırın.

    # 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 ve AKS ile çalışma

Görüntüyü ACR'nize aktarma

  • komutunu kullanarak Docker Hub'daki bir görüntüyü ACR'nize aktarın az acr import .

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

Örnek görüntüyü ACR'den AKS'ye dağıtma

  1. komutunu kullanarak uygun AKS kimlik bilgilerine sahip olduğunuzdan az aks get-credentials emin olun.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Aşağıdaki örnek YAML'yi kullanarak acr-nginx.yaml adlı bir dosya oluşturun ve acr-name değerini ACR'nizin adıyla değiştirin.

    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
    
  3. komutunu kullanarak kubectl apply AKS kümenizde dağıtımı çalıştırın.

    kubectl apply -f acr-nginx.yaml
    
  4. komutunu kullanarak kubectl get pods dağıtımı izleyin.

    kubectl get pods
    

    Çıkış, aşağıdaki örnek çıktıda gösterildiği gibi çalışan iki pod göstermelidir:

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

Sorun giderme

  • komutunu kullanarak az aks check-acr kayıt defterinin AKS kümesinden erişilebilir olduğunu doğrulayın.
  • ACR izleme hakkında daha fazla bilgi edinin.
  • ACR durumu hakkında daha fazla bilgi edinin.