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.
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 rol toe te kennen aan de acrpull
identiteit die u 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