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.
- Abyste se vyhnuli nutnosti jedné z těchto rolí, můžete místo toho k ověření ACR z AKS použít existující spravovanou identitu. Další informace najdete v tématu Použití spravované identity Azure k ověření ve službě ACR.
- 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íží
- Spuštěním
az aks check-acr
příkazu ověřte, že je registr přístupný z clusteru AKS. - Přečtěte si další informace o monitorování ACR.
- Přečtěte si další informace o stavu ACR.