Implementeren in Azure Container Instances vanuit Azure Container Registry met behulp van een beheerde identiteit

Azure Container Registry (ACR) is een op Azure gebaseerde, beheerde containerregisterservice die wordt gebruikt voor het opslaan van persoonlijke Docker-containerinstallatiekopieën. In dit artikel wordt beschreven hoe u containerinstallatiekopieën ophaalt die zijn opgeslagen in een Azure-containerregister bij de implementatie in containergroepen met Azure Container Instances. Een manier om registertoegang te configureren, is door een door Microsoft Entra beheerde identiteit te maken.

Wanneer toegang tot een Azure Container Registry (ACR) wordt beperkt met behulp van een privé-eindpunt, kunnen Azure Container Instances die zijn geïmplementeerd in een virtueel netwerk , toegang krijgen tot het containerregister via het privé-eindpunt.

Vereisten

Azure Container Registry: u hebt een Premium SKU Azure-containerregister met ten minste één installatiekopieën nodig. Als u een register wilt maken, raadpleegt u Een containerregister maken met behulp van de Azure CLI. Noteer de id en loginServer

Azure CLI: De opdrachtregelvoorbeelden in dit artikel maken gebruik van de Azure CLI en zijn opgemaakt voor de Bash-shell. U kunt de Azure CLI lokaal installeren of de Azure Cloud Shell gebruiken.

Beperkingen

  • Windows-containers bieden geen ondersteuning voor door het systeem toegewezen beheerde identiteit geverifieerde installatiekopieën met ACR, alleen door de gebruiker toegewezen.

  • Het Azure-containerregister moet openbare toegang hebben ingesteld op 'Netwerken selecteren' of 'Geen'. Als u de openbare toegang van het Azure-containerregister wilt instellen op Alle netwerken, gaat u naar het artikel van ACI over het verifiëren met ACR met verificatie op basis van een service-principal.

Registerverificatie configureren

Voor uw containerregister moet Vertrouwde services zijn ingeschakeld. Zie Vertrouwde services toestaan om veilig toegang te krijgen tot een containerregister met netwerkbeperking voor instructies voor het inschakelen van vertrouwde services.

Een identiteit maken

Maak een identiteit in uw abonnement met behulp van de opdracht az identity create . U kunt dezelfde resourcegroep gebruiken die u eerder hebt gebruikt om het containerregister of een ander te maken.

az identity create --resource-group myResourceGroup --name myACRId

Als u de identiteit in de volgende stappen wilt configureren, gebruikt u de opdracht az identity show om de resource-id en service-principal-id van de identiteit op te slaan in variabelen.

Als u de identiteit in toekomstige stappen correct wilt configureren, gebruikt u az identity show om de resource-id en service-principal-id van de identiteit in variabelen op te halen en op te slaan.

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

U hebt de resource-id van de identiteit nodig om u vanaf uw virtuele machine aan te melden bij de CLI. De waarde weergeven:

echo $USERID

De resource-id heeft de volgende notatie:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId

U hebt ook de service-principal-id nodig om de beheerde identiteit toegang te verlenen tot uw containerregister. De waarde weergeven:

echo $SPID

De service-principal-id heeft de volgende notatie:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx

De identiteit een roltoewijzing verlenen

Als u wilt dat uw identiteit toegang krijgt tot uw containerregister, moet u deze een roltoewijzing verlenen. Gebruik deze opdracht om de acrpull rol te verlenen aan de identiteit die u zojuist hebt gemaakt, en zorg ervoor dat u de id van uw register en de service-principal opgeeft die we eerder hebben verkregen:

az role assignment create --assignee $SPID --scope <registry-id> --role acrpull

Implementeren met behulp van een ARM-sjabloon (Azure Resource Manager)

Kopieer eerst de volgende JSON naar een nieuw bestand met de naam azuredeploy.json. In Azure Cloud Shell kunt u Visual Studio Code gebruiken om het bestand in uw werkmap te maken:

code azuredeploy.json

U kunt de eigenschappen van uw Azure-containerregister opgeven in een ARM-sjabloon door de imageRegistryCredentials eigenschap op te geven in de definitie van de containergroep. U kunt bijvoorbeeld de registerreferenties rechtstreeks opgeven:

Notitie

Dit is geen uitgebreide ARM-sjabloon, maar een voorbeeld van hoe de resources sectie van een volledige sjabloon eruit zou zien.

{
    "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"
    }
  }

De sjabloon implementeren

Implementeer uw Resource Manager-sjabloon met de volgende opdracht:

az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json

Implementeren met de Azure CLI

Als u een containergroep wilt implementeren met behulp van een beheerde identiteit voor het verifiëren van pull-installatiekopieën via de Azure CLI, gebruikt u de volgende opdracht om ervoor te zorgen dat uw <dns-label> containergroep wereldwijd uniek is:

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>

Implementeren in een virtueel netwerk met behulp van de Azure CLI

Als u een containergroep wilt implementeren in een virtueel netwerk met behulp van een beheerde identiteit om installatiekopieën te verifiëren die worden opgehaald uit een ACR die achter een privé-eindpunt via de Azure CLI wordt uitgevoerd, gebruikt u de volgende opdracht:

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

Zie Containerinstanties implementeren in een virtueel Azure-netwerk voor meer informatie over het implementeren naar een virtueel netwerk.

Een groep met meerdere containers implementeren in een virtueel netwerk met behulp van YAML en de Azure CLI

Als u een groep met meerdere containers wilt implementeren in een virtueel netwerk met behulp van een beheerde identiteit om installatiekopieën te verifiëren die worden opgehaald uit een ACR die achter een privé-eindpunt wordt uitgevoerd via de Azure CLI, kunt u de configuratie van de containergroep opgeven in een YAML-bestand. Geef vervolgens het YAML-bestand als parameter door aan de opdracht.

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

Zie Een groep met meerdere containers implementeren voor meer informatie over het implementeren in een groep met meerdere containers.

Resources opschonen

Als u alle resources uit uw Azure-abonnement wilt verwijderen, verwijdert u de resourcegroep:

az group delete --name myResourceGroup

Volgende stappen