Aracılığıyla paylaş


Azure Kubernetes Service'ten (AKS) Azure Container Registry (ACR) ile Kimlik Doğrulama

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 ile 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 Yönetilen kimliklerin özeti bölümüne bkz.

Ö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 bir görüntü çekmeniz gerekiyorsa, bir görüntü çekme gizliliği 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.
  • 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 bir ACR'niz yoksa, az acr create komutunu kullanarak 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 az aks create komutunu --attach-acr parametresiyle kullanarak mevcut bir ACR ile entegre edin. 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 veya Bilgi (depending on specific context, but keeping "Not" for simplicity and direct meaning)

    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

  • Mevcut bir ACR'yi mevcut bir AKS kümesiyle az aks update komutunu, --attach-acr parametresi ve acr-name veya acr-resource-id için geçerli bir değer kullanarak 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 Yönetilen kimliklerin özeti bölümüne bakın.

AKS kümesinden ACR ayırma

  • az aks update komutunu, --detach-acr parametresi ile ve acr-name veya acr-resource-id için geçerli bir değerle kullanarak bir ACR ile bir 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