Ověření pomocí služby Azure Container Registry (ACR) ze služby Azure Kubernetes Service (AKS)

Při použití služby Azure Container Registry (ACR) se službou Azure Kubernetes Service (AKS) musíte vytvořit mechanismus ověřování. Požadovaná oprávnění mezi ACR a AKS můžete nakonfigurovat pomocí Azure CLI, Azure PowerShellu nebo webu Azure Portal. Tento článek obsahuje příklady konfigurace ověřování mezi těmito službami Azure pomocí Azure CLI nebo Azure PowerShellu.

Integrace AKS do ACR přiřadí roli AcrPull spravované identitě Microsoft Entra ID přidružené k fondu agentů ve vašem clusteru AKS. Další informace o spravovaných identitách AKS najdete v souhrnu spravovaných identit.

Důležité

Při připojování ACR došlo k problému s latencí u skupin Microsoft Entra. Pokud je role AcrPull udělena skupině Microsoft Entra a do skupiny se přidá identita kubeletu pro dokončení konfigurace RBAC, může dojít ke zpoždění, než se skupina RBAC projeví. Pokud spouštíte automatizaci, která vyžaduje dokončení konfigurace RBAC, doporučujeme jako alternativní řešení použít vlastní identitu kubeletu. Můžete předem vytvořit identitu přiřazenou uživatelem, přidat ji do skupiny Microsoft Entra a pak použít identitu jako identitu kubelet k vytvoření clusteru AKS. Tím se zajistí, že se identita přidá do skupiny Microsoft Entra před vygenerováním tokenu kubeletem, což zabrání problému s latencí.

Poznámka:

Tento článek se zabývá automatickým ověřováním mezi AKS a ACR. Pokud potřebujete načíst image z privátního externího registru, použijte tajný klíč pro vyžádání image.

Než začnete

  • Ve svém předplatném Azure potřebujete roli vlastníka, správce účtu Azure nebo spolusprávce Azure.
  • Pokud používáte Azure CLI, musíte mít Azure CLI verze 2.7.0 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
  • Pokud používáte Azure PowerShell, musíte mít Azure PowerShell verze 5.9.0 nebo novější. Verzi zjistíte spuštěním příkazu Get-InstalledModule -Name Az. Pokud potřebujete provést instalaci nebo upgrade, přečtěte si téma Instalace Azure PowerShellu.
  • Příklady a syntaxe pro použití Terraformu pro konfiguraci ACR najdete v referenčních informacích k Terraformu.

Vytvoření nové služby ACR

  • Pokud ještě nemáte ACR, vytvořte ho az acr create pomocí příkazu. Následující příklad nastaví proměnnou MYACR na název ACR, mycontainerregistry a použije proměnnou k vytvoření registru. Název ACR musí být globálně jedinečný a musí používat jenom malá písmena.

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

Vytvoření nového clusteru AKS a integrace s existující službou ACR

  • Vytvořte nový cluster AKS a integrujte se stávající službou ACR pomocí az aks create příkazu s parametrem--attach-acr. Tento příkaz umožňuje autorizovat existující službu ACR ve vašem předplatném a nakonfigurovat odpovídající roli AcrPull pro spravovanou identitu.

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

    Provedení tohoto příkazu může trvat i několik minut.

    Poznámka:

    Pokud používáte službu ACR umístěnou v jiném předplatném než v clusteru AKS nebo chcete místo názvu ACR použít ID prostředku ACR, můžete to udělat pomocí následující syntaxe:

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

Konfigurace integrace ACR pro existující cluster AKS

Připojení ACR k existujícímu clusteru AKS

  • Integrujte existující ACR se stávajícím clusterem AKS pomocí az aks update příkazu s parametrem --attach-acr a platnou hodnotou pro acr-name nebo acr-resource-id.

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

    Poznámka:

    Příkaz az aks update --attach-acr používá oprávnění uživatele, který příkaz spouští, k vytvoření přiřazení role ACR. Tato role je přiřazená spravované identitě kubeletu . Další informace o spravovaných identitách AKS najdete v souhrnu spravovaných identit.

Odpojení ACR od clusteru AKS

  • Odeberte integraci mezi ACR a clusterem AKS pomocí az aks update příkazu s parametrem --detach-acr a platnou hodnotou pro acr-name nebo acr-resource-id.

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

Práce s ACR &AKS

Import image do služby ACR

  • Pomocí příkazu naimportujte image z Docker Hubu az acr import do služby ACR.

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

Nasazení ukázkové image z ACR do AKS

  1. Pomocí příkazu se ujistěte, že máte správné přihlašovací údaje az aks get-credentials AKS.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Vytvořte soubor s názvem acr-nginx.yaml pomocí následujícího ukázkového YAML a nahraďte acr-name názvem vašeho 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
    
  3. Spusťte nasazení v clusteru AKS pomocí kubectl apply příkazu.

    kubectl apply -f acr-nginx.yaml
    
  4. Pomocí příkazu monitorujte nasazení kubectl get pods .

    kubectl get pods
    

    Výstup by měl zobrazit dva spuštěné pody, jak je znázorněno v následujícím příkladu výstupu:

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

Řešení problému

  • Pomocí příkazu ověřte, že je registr přístupný z clusteru az aks check-acr AKS.
  • Přečtěte si další informace o monitorování ACR.
  • Přečtěte si další informace o stavu služby ACR.