Distribuera till Azure Container Instances från Azure Container Registry med hjälp av tjänstens huvudnamn

Azure Container Registry är en Azure-baserad, hanterad containerregistertjänst som används för att lagra privata Docker-containeravbildningar. Den här artikeln beskriver hur du hämtar containeravbildningar som lagras i ett Azure-containerregister när du distribuerar till Azure Container Instances. Ett sätt att konfigurera registeråtkomst är att skapa ett huvudnamn och lösenord för Microsoft Entra-tjänsten och lagra inloggningsuppgifterna i ett Azure-nyckelvalv.

Förutsättningar

Azure-containerregister: Du behöver ett Azure-containerregister – och minst en containeravbildning i registret – för att slutföra stegen i den här artikeln. Om du behöver ett register kan du läsa Skapa ett containerregister med hjälp av Azure CLI.

Azure CLI: Kommandoradsexemplen i den här artikeln använder Azure CLI och är formaterade för Bash-gränssnittet. Du kan installera Azure CLI lokalt eller använda Azure Cloud Shell.

Begränsningar

Konfigurera registerautentisering

I ett produktionsscenario där du ger åtkomst till "huvudlösa" tjänster och program rekommenderar vi att du konfigurerar registeråtkomst med hjälp av ett huvudnamn för tjänsten. Med tjänstens huvudnamn kan du tillhandahålla rollbaserad åtkomstkontroll i Azure (Azure RBAC) till dina containeravbildningar. Du kan till exempel konfigurera ett huvudnamn för tjänsten som enbart har hämtningsåtkomst till ett register.

Azure Container Registry innehåller ytterligare autentiseringsalternativ.

I följande avsnitt skapar du ett Azure-nyckelvalv och ett huvudnamn för tjänsten och lagrar tjänstens huvudnamns autentiseringsuppgifter i valvet.

Skapa nyckelvalv

Om du inte redan har ett valv i Azure Key Vault, skapar du ett med Azure CLI och följande kommandon.

Uppdatera variabeln RES_GROUP med namnet på en befintlig resursgrupp där du kan skapa nyckelvalvet och ACR_NAME med namnet på containerregistret. För korthet förutsätter kommandona i den här artikeln att alla instanser av registret, nyckelvalvet och containern skapas i samma resursgrupp.

Ange ett namn för det nya nyckelvalvet i AKV_NAME. Valvnamnet måste vara unikt i Azure och måste innehålla 3–24 alfanumeriska tecken, börja med en bokstav, sluta med en bokstav eller siffra och får inte innehålla bindestreck i följd.

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

Skapa tjänstens huvudnamn och lagra autentiseringsuppgifter

Skapa nu ett huvudnamn för tjänsten och lagra autentiseringsuppgifterna i ditt nyckelvalv.

Följande kommandon använder az ad sp create-for-rbac för att skapa tjänstens huvudnamn och az keyvault secret set för att lagra tjänstens huvudnamns lösenord i valvet. Anteckna tjänstens huvudnamns appId när du skapar tjänsten.

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

Argumentet --role i föregående kommando konfigurerar huvudnamnet för tjänsten med rollen acrpull, vilket endast ger den hämtningsåtkomst till registret. Om du vill bevilja både sändnings- och hämtningsåtkomst ändrar du argumentet --role till acrpush.

Lagra sedan tjänstens huvudnamns appId i valvet, vilket är användarnamnet som du skickar till Azure Container Registry för autentisering.

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

Du har skapat ett Azure-nyckelvalv och lagrat två hemligheter i det:

  • $ACR_NAME-pull-usr: ID:t för tjänstens huvudnamn som ska användas som användarnamn för containerregistret.
  • $ACR_NAME-pull-pwd: lösenordet för tjänstens huvudnamn som ska användas som lösenord för containerregistret.

Nu kan du referera till de här hemligheterna med namn när du eller dina program och tjänster hämtar avbildningar från registret.

Distribuera containrar med Azure CLI

Nu när autentiseringsuppgifterna för tjänstens huvudnamn lagras i Azure Key Vault-hemligheter kan dina program och tjänster använda dem för att komma åt ditt privata register.

Hämta först registrets inloggningsservernamn med kommandot az acr show . Inloggningsserverns namn är bara gemener och liknar myregistry.azurecr.io.

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

Kör kommandot az container create för att distribuera en behållarinstans. Kommandot använder autentiseringsuppgifterna för tjänstens huvudnamn som lagras i Azure Key Vault för att autentisera till containerregistret och förutsätter att du tidigare har push-överfört avbildningen aci-helloworld till registret. Uppdatera värdet --image om du vill använda en annan avbildning än registret.

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

Värdet --dns-name-label måste vara unikt i Azure, så föregående kommando lägger till ett slumptal i containerns DNS-namnetikett. Utdata från kommandot visar containerns fullständiga domännamn (FQDN), till exempel:

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

När containern har startats kan du navigera till dess fullständiga domännamn i webbläsaren för att kontrollera att programmet körs.

Distribuera med Azure Resource Manager-mall

Du kan ange egenskaperna för ditt Azure-containerregister i en Azure Resource Manager-mall genom att inkludera imageRegistryCredentials egenskapen i containergruppens definition. Du kan till exempel ange autentiseringsuppgifterna för registret direkt:

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

Fullständiga inställningar för containergrupper finns i Resource Manager-mallreferensen.

Mer information om hur du refererar till Azure Key Vault-hemligheter i en Resource Manager-mall finns i Använda Azure Key Vault för att skicka säkert parametervärde under distributionen.

Distribuera i Azure-portalen

Om du underhåller containeravbildningar i ett Azure-containerregister kan du enkelt skapa en container i Azure Container Instances med hjälp av Azure-portalen. När du använder portalen för att distribuera en containerinstans från ett containerregister måste du aktivera registrets administratörskonto. Administratörskontot är utformat för att en enskild användare ska få åtkomst till registret, främst i testsyfte.

  1. I Azure-portalen går du till containerregistret.

  2. Bekräfta att administratörskontot är aktiverat genom att välja Åtkomstnycklar och under Administratörsanvändare väljer du Aktivera.

  3. Välj Lagringsplatser och välj sedan den lagringsplats som du vill distribuera från, högerklicka på taggen för den containeravbildning som du vill distribuera och välj Kör instans.

  4. Ange ett namn för containern och ett namn på resursgruppen. Du kan också ändra standardvärdena om du vill.

    Create menu for Azure Container Instances

  5. När distributionen är klar kan du navigera till containergruppen från meddelandefönstret för att hitta dess IP-adress och andra egenskaper.

    Details view for Azure Container Instances container group

Nästa steg

Mer information om Azure Container Registry-autentisering finns i Autentisera med ett Azure-containerregister.