Azure Container Instances implementeren vanuit Azure Container Registry

Azure Container Registry is een op Azure gebaseerde, beheerde containerregisterservice die wordt gebruikt voor het opslaan van persoonlijke Docker-containerafbeeldingen. In dit artikel wordt beschreven hoe u containerafbeeldingen op pullt die zijn opgeslagen in een Azure-containerregister bij het implementeren naar Azure Container Instances. Een aanbevolen manier om registertoegang te configureren, is door een Azure Active Directory service-principal en wachtwoord te maken en de aanmeldingsreferenties op te slaan in een Azure-sleutelkluis.

Vereisten

Azure Container Registry: u hebt een Azure-containerregister en ten minste één containerafbeelding in het register nodig om de stappen in dit artikel uit te voeren. Zie Een containerregister maken met behulp van de Azure CLI als u een register nodig hebt.

Azure CLI: In de opdrachtregelvoorbeelden in dit artikel wordt de Azure CLI gebruikt en deze zijn opgemaakt voor de Bash-shell. U kunt de Azure CLI lokaal installeren of de Azure Cloud Shell.

Beperkingen

  • U kunt zich tijdens de implementatie van Azure Container Registry niet verifiëren voor het pullen van installatie afbeeldingen met behulp van een beheerde identiteit die is geconfigureerd in dezelfde containergroep.
  • U kunt op dit moment geen Azure Container Registry uit een Azure-Virtual Network.

Registerverificatie configureren

In een productiescenario waarin u toegang biedt tot 'headless' services en toepassingen, is het raadzaam om registertoegang te configureren met behulp van een service-principal. Met een service-principal kunt u op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) bieden aan uw containerafbeeldingen. U kunt bijvoorbeeld een service-principal configureren met alleen pull-toegang tot een register.

Azure Container Registry biedt aanvullende verificatieopties.

In de volgende sectie maakt u een Azure-sleutelkluis en een service-principal en slaan u de referenties van de service-principal op in de kluis.

Sleutelkluis maken

Als u nog geen kluis hebt in Azure Key Vault, kunt u met de volgende opdrachten één maken met de Azure CLI.

Werk de variabele bij met de naam van een bestaande resourcegroep waarin u de sleutelkluis wilt maken RES_GROUP en met de naam van uw ACR_NAME containerregister. Voor de beknoptheid gaan opdrachten in dit artikel ervan uit dat uw register, sleutelkluis en container-exemplaren allemaal in dezelfde resourcegroep zijn gemaakt.

Geef een naam op voor de nieuwe sleutelkluis in AKV_NAME . De kluisnaam moet uniek zijn binnen Azure en moet 3 tot 24 alfanumerieke tekens lang zijn, beginnen met een letter, eindigen met een letter of cijfer en mag geen opeenvolgende afbreekstreeepten bevatten.

RES_GROUP=myresourcegroup # Resource Group name
ACR_NAME=myregistry       # Azure Container Registry registry name
AKV_NAME=mykeyvault       # Azure Key Vault vault name

az keyvault create -g $RES_GROUP -n $AKV_NAME

Service-principal maken en referenties opslaan

Maak nu een service-principal en sla de referenties op in uw sleutelkluis.

De volgende opdrachten gebruiken az ad sp create-for-rbac om de service-principal te maken en az keyvault secret set om het wachtwoord van de service-principal op te slaan in de kluis. Noteer de appId van de service-principal bij het maken.

# Create service principal
az ad sp create-for-rbac \
  --name http://$ACR_NAME-pull \
  --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
  --role acrpull

SP_ID=xxxx # Replace with your service principal's appId

# Store the registry *password* in the vault
az keyvault secret set \
  --vault-name $AKV_NAME \
  --name $ACR_NAME-pull-pwd \
  --value $(az ad sp show --id $SP_ID --query password --output tsv)

Het argument --role in de voorgaande opdracht configureert de service-principal met de rol acrpull, die de principal alleen-push-toegang tot het register geeft. Als u zowel push-als pull-toegang wilt geven, wijzigt u het argument --role in acrpush.

Sla vervolgens de appId van de service-principal op in de kluis. Dit is de gebruikersnaam die u door geeft aan Azure Container Registry voor verificatie.

# Store service principal ID in vault (the registry *username*)
az keyvault secret set \
    --vault-name $AKV_NAME \
    --name $ACR_NAME-pull-usr \
    --value $(az ad sp show --id $SP_ID --query appId --output tsv)

U hebt een Azure-sleutelkluis gemaakt en er twee geheimen in opgeslagen:

  • $ACR_NAME-pull-usr: De service-principal-id, voor gebruik als de gebruikersnaam van het containerregister.
  • $ACR_NAME-pull-pwd: Het service-principal-wachtwoord, voor gebruik als het wachtwoord van het containerregister.

U kunt nu op naam naar deze geheime gegevens verwijzen wanneer u of uw toepassingen en services installatiekopieën uit het register halen.

Container implementeren met Azure CLI

Nu de referenties van de service-principal zijn opgeslagen in Azure Key Vault geheimen, kunnen uw toepassingen en services ze gebruiken voor toegang tot uw persoonlijke register.

Haal eerst de naam van de aanmeldingsserver van het register op met behulp van de opdracht az acr show. De naam van de aanmeldingsserver is in kleine letters en vergelijkbaar met myregistry.azurecr.io .

ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)

Voer de volgende op az container create uit om een containerinstantie te implementeren. De opdracht gebruikt de referenties van de service-principal die zijn opgeslagen in Azure Key Vault om te verifiëren bij uw containerregister en gaat ervan uit dat u de aci-helloworld-afbeelding eerder naar uw register hebt ge pusht. Werk de waarde bij als u een andere afbeelding van uw --image register wilt gebruiken.

az container create \
    --name aci-demo \
    --resource-group $RES_GROUP \
    --image $ACR_LOGIN_SERVER/aci-helloworld:v1 \
    --registry-login-server $ACR_LOGIN_SERVER \
    --registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) \
    --registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) \
    --dns-name-label aci-demo-$RANDOM \
    --query ipAddress.fqdn

De waarde moet uniek zijn binnen Azure, dus met de voorgaande opdracht wordt een willekeurig getal aan het --dns-name-label DNS-naamlabel van de container toevoegen. De uitvoer van de opdracht geeft bijvoorbeeld de Fully Qualified Domain Name (FQDN) van de container weer:

"aci-demo-25007.eastus.azurecontainer.io"

Zodra de container is gestart, kunt u in uw browser naar de FQDN navigeren om te controleren of de toepassing wordt uitgevoerd.

Implementeren met Azure Resource Manager sjabloon

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

[...]
"imageRegistryCredentials": [
  {
    "server": "imageRegistryLoginServer",
    "username": "imageRegistryUsername",
    "password": "imageRegistryPassword"
  }
]
[...]

Zie de sjabloonverwijzing Resource Manager volledige containergroepinstellingen.

Zie Use Azure Key Vault to pass secure parameter value during deployment (Beveiligde parameterwaardedoorgeven tijdens de implementatie) voor meer informatie over het verwijzen naar Azure Key Vault geheimen in een Resource Manager sjabloon.

Implementeren met Azure Portal

Als u containerafbeeldingen in een Azure-containerregister onderhoudt, kunt u eenvoudig een container in Azure Container Instances maken met behulp van Azure Portal. Wanneer u de portal gebruikt om een container-exemplaar te implementeren vanuit een containerregister, moet u het beheerdersaccount van het register inschakelen. Het beheerdersaccount is ontworpen voor één gebruiker om toegang te krijgen tot het register, voornamelijk voor testdoeleinden.

  1. Ga in de Azure-portal naar uw containerregister.

  2. Als u wilt controleren of het beheerdersaccount is ingeschakeld, selecteert u Toegangssleutels en selecteert u onder Beheerder de optie Inschakelen.

  3. Selecteer Opslagplaatsen, selecteer vervolgens de opslagplaats waar u de implementatie wilt uitvoeren, klik met de rechtermuisknop op de tag voor de containerafbeelding die u wilt implementeren en selecteer Exemplaar uitvoeren.

    'Exemplaar uitvoeren' in Azure Container Registry in de Azure Portal

  4. Voer een naam in voor de container en een naam voor de resourcegroep. U kunt ook de standaardwaarden wijzigen als u wilt.

    Menu maken voor Azure Container Instances

  5. Zodra de implementatie is voltooid, kunt u naar de containergroep navigeren vanuit het deelvenster Meldingen om het IP-adres en andere eigenschappen te vinden.

    Detailweergave voor Azure Container Instances containergroep

Volgende stappen

Zie Verifiëren met een Azure-containerregisterAzure Container Registry meer informatie over verificatie.