Implementeren in Azure Container Instances vanuit Azure Container Registry met behulp van een service-principal

Azure Container Registry 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 Azure Container Instances. Een manier om registertoegang te configureren, is door een Microsoft Entra-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 containerinstallatiekopieën 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: 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

Registerverificatie configureren

In een productiescenario waarin u toegang verleent 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) leveren aan uw containerinstallatiekopieën. U kunt bijvoorbeeld een service-principal configureren met alleen pull-toegang tot een register.

Azure Container Registry biedt extra verificatieopties.

In de volgende sectie maakt u een Azure-sleutelkluis en een service-principal en slaat 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 RES_GROUP variabele bij met de naam van een bestaande resourcegroep waarin de sleutelkluis moet worden gemaakt en ACR_NAME met de naam van het containerregister. Voor kortheid gaan opdrachten in dit artikel ervan uit dat uw register-, sleutelkluis- en containerinstanties allemaal in dezelfde resourcegroep worden gemaakt.

Geef een naam op voor uw nieuwe sleutelkluis in AKV_NAME. De kluisnaam moet uniek zijn binnen Azure en moet 3-24 alfanumerieke tekens lang zijn, beginnen met een letter, eindigen met een letter of cijfer en mogen geen opeenvolgende afbreekstreepjes 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 ingesteld 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 app-id van de service-principal op in de kluis. Dit is de gebruikersnaam die u doorgeeft 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 deze gebruiken voor toegang tot uw persoonlijke register.

Haal eerst de aanmeldingsservernaam van het register op met behulp van de opdracht az acr show . De naam van de aanmeldingsserver is allemaal 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 installatiekopie van aci-helloworld eerder naar uw register hebt gepusht. Werk de --image waarde bij als u een andere installatiekopieën uit het 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 --dns-name-label waarde moet uniek zijn binnen Azure, dus met de voorgaande opdracht wordt een willekeurig getal toegevoegd aan het DNS-naamlabel van de container. 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 naar de FQDN in uw browser 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-sjabloon door de imageRegistryCredentials eigenschap op te geven in de definitie van de containergroep. U kunt bijvoorbeeld de registerreferenties rechtstreeks opgeven:

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

Zie de naslaginformatie over de Resource Manager-sjabloon voor volledige instellingen voor containergroepen.

Zie Azure Key Vault gebruiken om tijdens de implementatie een veilige parameterwaarde door te geven voor meer informatie over het verwijzen naar Azure Key Vault-geheimen in een Resource Manager-sjabloon.

Implementeren met Azure Portal

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

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

  2. Als u wilt bevestigen dat het beheerdersaccount is ingeschakeld, selecteert u Toegangssleutels en selecteert u onder Beheer gebruiker Inschakelen.

  3. Selecteer Opslagplaatsen en selecteer vervolgens de opslagplaats waaruit u wilt implementeren, klik met de rechtermuisknop op de tag voor de containerinstallatiekopieën die u wilt implementeren en selecteer Exemplaar uitvoeren.

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

    Create menu for Azure Container Instances

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

    Details view for Azure Container Instances container group

Volgende stappen

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