Wdrażanie w usłudze Azure Container Instances z usługi Azure Container Registry przy użyciu tożsamości zarządzanej
Azure Container Registry (ACR) to oparta na platformie Azure usługa rejestru kontenerów zarządzanych używana do przechowywania prywatnych obrazów kontenerów platformy Docker. W tym artykule opisano sposób ściągania obrazów kontenerów przechowywanych w rejestrze kontenerów platformy Azure podczas wdrażania w grupach kontenerów za pomocą usługi Azure Container Instances. Jednym ze sposobów konfigurowania dostępu do rejestru jest utworzenie tożsamości zarządzanej firmy Microsoft Entra.
Gdy dostęp do usługi Azure Container Registry (ACR) jest ograniczony przy użyciu prywatnego punktu końcowego, użycie tożsamości zarządzanej umożliwia usłudze Azure Container Instances wdrożone w sieci wirtualnej dostęp do rejestru kontenerów za pośrednictwem prywatnego punktu końcowego.
Wymagania wstępne
Rejestr kontenerów platformy Azure: potrzebujesz rejestru kontenerów platformy Azure w warstwie Premium z co najmniej jednym obrazem. Jeśli musisz utworzyć rejestr, zobacz Tworzenie rejestru kontenerów przy użyciu interfejsu wiersza polecenia platformy Azure. Pamiętaj, aby zanotować rejestry id
i loginServer
Interfejs wiersza polecenia platformy Azure: przykłady wiersza polecenia w tym artykule używają interfejsu wiersza polecenia platformy Azure i są formatowane dla powłoki Bash. Interfejs wiersza polecenia platformy Azure można zainstalować lokalnie lub użyć usługi Azure Cloud Shell.
Ograniczenia
- Kontenery systemu Windows nie obsługują ściągnięcia obrazu uwierzytelnionego przy użyciu usługi ACR przypisanego przez system tożsamości zarządzanej tylko przez użytkownika.
Konfigurowanie uwierzytelniania rejestru
Rejestr kontenerów musi mieć włączone zaufane usługi. Aby znaleźć instrukcje dotyczące włączania zaufanych usług, zobacz Zezwalanie zaufanym usługom na bezpieczny dostęp do rejestru kontenerów z ograniczeniami sieci.
Tworzenie tożsamości
Utwórz tożsamość w subskrypcji przy użyciu polecenia az identity create . Możesz użyć tej samej grupy zasobów, która była wcześniej używana do utworzenia rejestru kontenerów lub innej.
az identity create --resource-group myResourceGroup --name myACRId
Aby skonfigurować tożsamość w poniższych krokach, użyj polecenia az identity show , aby zapisać identyfikator zasobu tożsamości i identyfikator jednostki usługi w zmiennych.
Aby prawidłowo skonfigurować tożsamość w przyszłych krokach, użyj polecenia az identity show , aby uzyskać i zapisać identyfikator zasobu tożsamości i identyfikator jednostki usługi w zmiennych.
# Get resource ID of the user-assigned identity
USERID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)
# Get service principal ID of the user-assigned identity
SPID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)
Aby zalogować się do interfejsu wiersza polecenia z maszyny wirtualnej, potrzebny jest identyfikator zasobu tożsamości. Aby wyświetlić wartość:
echo $USERID
Identyfikator zasobu ma postać:
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId
Potrzebny będzie również identyfikator jednostki usługi, aby udzielić tożsamości zarządzanej dostępu do rejestru kontenerów. Aby wyświetlić wartość:
echo $SPID
Identyfikator jednostki usługi ma postać:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
Udzielanie tożsamości przypisania roli
Aby tożsamość uzyskiwała dostęp do rejestru kontenerów, należy przyznać jej przypisanie roli. Użyj polecenia , aby przyznać acrpull
rolę utworzonej tożsamości, upewniając się, że podaj identyfikator rejestru i jednostkę usługi uzyskaną wcześniej:
az role assignment create --assignee $SPID --scope <registry-id> --role acrpull
Wdrażanie przy użyciu szablonu usługi Azure Resource Manager (ARM)
Zacznij od skopiowania następującego pliku JSON do nowego pliku o nazwie azuredeploy.json
. W usłudze Azure Cloud Shell możesz użyć programu Visual Studio Code do utworzenia pliku w katalogu roboczym:
code azuredeploy.json
Właściwości rejestru kontenerów platformy Azure można określić w szablonie usługi ARM, uwzględniając imageRegistryCredentials
właściwość w definicji grupy kontenerów. Można na przykład bezpośrednio określić poświadczenia rejestru:
Uwaga
Nie jest to kompleksowy szablon usługi ARM, ale raczej przykładowa resources
sekcja kompletnego szablonu.
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2021-09-01",
"name": "myContainerGroup",
"location": "norwayeast",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId": {}
}
},
"properties": {
"containers": [
{
"name": "mycontainer",
"properties": {
"image": "myacr.azurecr.io/hello-world:latest",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 1
}
}
}
}
],
"imageRegistryCredentials": [
{
"server":"myacr.azurecr.io",
"identity":"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId"
}
],
"ipAddress": {
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "public"
},
"osType": "Linux"
}
}
Wdrażanie szablonu
Wdróż szablon usługi Resource Manager za pomocą następującego polecenia:
az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json
Wdrażanie przy użyciu interfejsu wiersza polecenia platformy Azure
Aby wdrożyć grupę kontenerów przy użyciu tożsamości zarządzanej w celu uwierzytelniania ściągnięcia obrazu za pośrednictwem interfejsu wiersza polecenia platformy Azure, użyj następującego polecenia, upewniając się, że element <dns-label>
jest globalnie unikatowy:
az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --ports 80 --dns-name-label <dns-label>
Wdrażanie w sieci wirtualnej przy użyciu interfejsu wiersza polecenia platformy Azure
Aby wdrożyć grupę kontenerów w sieci wirtualnej przy użyciu tożsamości zarządzanej w celu uwierzytelniania ściągania obrazu z usługi ACR działającej za prywatnym punktem końcowym za pośrednictwem interfejsu wiersza polecenia platformy Azure, użyj następującego polecenia:
az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --vnet "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/ --subnet mySubnetName
Aby uzyskać więcej informacji na temat wdrażania w sieci wirtualnej, zobacz Wdrażanie wystąpień kontenera w sieci wirtualnej platformy Azure.
Wdrażanie grupy z wieloma kontenerami w sieci wirtualnej przy użyciu języka YAML i interfejsu wiersza polecenia platformy Azure
Aby wdrożyć grupę z wieloma kontenerami w sieci wirtualnej przy użyciu tożsamości zarządzanej w celu uwierzytelnienia ściągania obrazu z usługi ACR działającej za prywatnym punktem końcowym za pośrednictwem interfejsu wiersza polecenia platformy Azure, możesz określić konfigurację grupy kontenerów w pliku YAML. Następnie przekaż plik YAML jako parametr do polecenia .
apiVersion: '2021-10-01'
location: eastus
type: Microsoft.ContainerInstance/containerGroups
identity:
type: UserAssigned
userAssignedIdentities: {
'/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId': {}
}
properties:
osType: Linux
imageRegistryCredentials:
- server: myacr.azurecr.io
identity: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId'
subnetIds:
- id: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNetName/subnets/mySubnetName'
name: mySubnetName
containers:
- name: myContainer-1
properties:
resources:
requests:
cpu: '.4'
memoryInGb: '1'
environmentVariables:
- name: CONTAINER
value: 1
image: 'myacr.azurecr.io/myimage:latest'
- name: myContainer-2
properties:
resources:
requests:
cpu: '.4'
memoryInGb: '1'
environmentVariables:
- name: CONTAINER
value: 2
image: 'myacr.azurecr.io/myimage:latest'
az container create --name my-containergroup --resource-group myResourceGroup --file my-YAML-file.yaml
Aby uzyskać więcej informacji na temat wdrażania w grupie z wieloma kontenerami, zobacz Deploy a multi-container group (Wdrażanie grupy z wieloma kontenerami).
Czyszczenie zasobów
Aby usunąć wszystkie zasoby z subskrypcji platformy Azure, usuń grupę zasobów:
az group delete --name myResourceGroup