Ověření pomocí Azure Container Registry ze služby Azure Kubernetes Service

Pokud používáte Azure Container Registry (ACR) s Azure Kubernetes Service (AKS), musíte vytvořit ověřovací mechanismus. Konfigurace požadovaných oprávnění mezi službami ACR a AKS je možné provést pomocí Azure CLI, Azure PowerShell a Azure Portal. Tento článek obsahuje příklady konfigurace ověřování mezi těmito službami Azure pomocí Azure CLI nebo Azure PowerShell.

Integrace AKS do ACR přiřadí roli AcrPullspravované identitě Azure Active Directory (Azure AD) přidružené k fondu agentů ve vašem clusteru AKS. Další informace o spravovaných identitách AKS najdete v tématu Souhrn spravovaných identit.

Důležité

Při připojování ACR dochází k problému s latencí skupin Azure Active Directory. Pokud je skupině Azure AD udělena role AcrPull a identita kubeletu se přidá do skupiny, aby se dokončila konfigurace RBAC, může dojít ke zpoždění, než se skupina RBAC projeví. Pokud používá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 Azure AD a pak ji použít jako identitu kubeletu k vytvoření clusteru AKS. Tím se zajistí, že se identita přidá do skupiny Azure AD před vygenerováním tokenu kubeletem, čímž se zabrání problému s latencí.

Poznámka

Tento článek popisuje automatické ověřování mezi AKS a ACR. Pokud potřebujete načíst image z privátního externího registru, použijte tajný klíč image.

Než začnete

  • Ve svém předplatném Azure musíte mít roli vlastníka, správce účtu Azure nebo spolusprávce Azure.
  • Pokud používáte Azure CLI, tento článek vyžaduje, abyste používali 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, tento článek vyžaduje, abyste používali 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 konfiguraci ACR pomocí Terraformu najdete v referenčních informacích k Terraformu.

Vytvoření nového clusteru AKS s integrací ACR

Integraci AKS a ACR můžete nastavit během vytváření clusteru AKS. Aby cluster AKS mohl pracovat s ACR, používá se Azure AD spravovaná identita.

Vytvoření ACR

Pokud ještě ACR nemáte, vytvořte ho pomocí následujícího příkazu.

# Set this variable to the name of your ACR. The name must be globally unique.
# Connected registry name must use only lowercase

MYACR=mycontainerregistry

az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic

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

Pokud už ACR máte, pomocí následujícího příkazu vytvořte nový cluster AKS s integrací ACR. Tento příkaz umožňuje autorizovat existující službu ACR ve vašem předplatném a nakonfiguruje příslušnou roli AcrPull pro spravovanou identitu. Níže zadejte platné hodnoty parametrů.

# Set this variable to the name of your ACR. The name must be globally unique.
# Connected registry name must use only lowercase

MYACR=mycontainerregistry

# Create an AKS cluster with ACR integration.

az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR

Případně můžete zadat název ACR pomocí ID prostředku ACR v následujícím formátu:

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

Poznámka

Pokud používáte službu ACR umístěnou v jiném předplatném než váš cluster AKS, použijte při připojování nebo odpojování od clusteru ID prostředku ACR.

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

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

Konfigurace integrace ACR pro existující clustery AKS

Připojení ACR ke clusteru AKS

Integrujte existující službu ACR s existujícím clusterem AKS pomocí parametru--attach-acr a platných hodnot pro acr-name nebo acr-resource-id.

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

# Attach using acr-resource-id
az aks update -n myAKSCluster -g 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ě kubelet . Další informace o spravovaných identitách AKS najdete v tématu Souhrn spravovaných identit.

Odpojení ACR od clusteru AKS

Odeberte integraci mezi ACR a clusterem AKS pomocí parametru--detach-acr a platných hodnot pro acr-name nebo acr-resource-id.

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

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

Práce s ACR & AKS

Import obrázku do ACR

Spuštěním následujícího příkazu naimportujte image z Docker Hub do služby ACR.

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

Nasazení ukázkové image z ACR do AKS

Ujistěte se, že máte správné přihlašovací údaje AKS.

az aks get-credentials -g myResourceGroup -n myAKSCluster

Pomocí ukázky YAML níže vytvořte soubor s názvem acr-nginx.yaml . 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

Po vytvoření souboru spusťte v clusteru AKS následující nasazení.

kubectl apply -f acr-nginx.yaml

Nasazení můžete monitorovat spuštěním příkazu kubectl get pods.

kubectl get pods

Výstup by měl zobrazit dva spuštěné pody.

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í potíží