Containerinstanties implementeren in een virtueel Azure-netwerk
Azure Virtual Network biedt veilige privénetwerken voor uw Azure- en on-premises resources. Door containergroepen te implementeren in een virtueel Azure-netwerk, kunnen uw containers veilig communiceren met andere resources in het virtuele netwerk.
In dit artikel wordt beschreven hoe u de opdracht az container create in de Azure CLI gebruikt om containergroepen te implementeren in een nieuw virtueel netwerk of een bestaand virtueel netwerk.
Zie Scenario's en resources voor virtuele netwerken voor netwerkscenario's en -beperkingen voor Azure Container Instances.
Belangrijk
Implementatie van containergroep in een virtueel netwerk is algemeen beschikbaar voor Linux-containers, in de meeste regio's waar Azure Container Instances beschikbaar is. Zie Regio's en beschikbaarheid van resources voor meer informatie.
Voorbeelden in dit artikel zijn opgemaakt voor de Bash-shell. Als u liever een andere shell gebruikt, zoals PowerShell of de opdrachtprompt, past u de vervolgtekens van de regel dienovereenkomstig aan.
Implementeren in nieuw virtueel netwerk
Als u wilt implementeren in een nieuw virtueel netwerk en Azure de netwerkresources automatisch voor u wilt laten maken, geeft u het volgende op wanneer u az container create uitvoert:
- Naam van virtueel netwerk
- Adres voor virtueel netwerk voorvoegsel in CIDR-indeling
- Subnetnaam
- Subnetadres voorvoegsel in CIDR-indeling
De adres voorvoegsels van het virtuele netwerk en subnet geven de adresruimten voor respectievelijk het virtuele netwerk en subnet op. Deze waarden worden weergegeven in Classless Inter-Domain Routing (CIDR)-notatie, bijvoorbeeld 10.0.0.0/16 . Zie Een subnet van een virtueel netwerk toevoegen, wijzigen of verwijderen voor meer informatie over het werken met subnetten.
Zodra u uw eerste containergroep met deze methode hebt geïmplementeerd, kunt u implementeren naar hetzelfde subnet door de namen van het virtuele netwerk en subnet op te geven, of door het netwerkprofiel op te geven dat automatisch door Azure voor u wordt gemaakt. Omdat Azure het subnet delegeert aan Azure Container Instances, kunt u alleen containergroepen implementeren in het subnet.
Voorbeeld
Met de volgende opdracht az container create geeft u instellingen op voor een nieuw virtueel netwerk en subnet. Geef de naam op van een resourcegroep die is gemaakt in een regio waar implementaties van containergroep in een virtueel netwerk beschikbaar zijn. Met deze opdracht wordt de openbare Microsoft aci-helloworld-container geïmplementeerd die een kleine webserver Node.js een statische webpagina wordt uitgevoerd. In de volgende sectie implementeert u een tweede containergroep in hetzelfde subnet en test u de communicatie tussen de twee container-exemplaren.
az container create \
--name appcontainer \
--resource-group myResourceGroup \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--vnet aci-vnet \
--vnet-address-prefix 10.0.0.0/16 \
--subnet aci-subnet \
--subnet-address-prefix 10.0.0.0/24
Wanneer u implementeert in een nieuw virtueel netwerk met behulp van deze methode, kan de implementatie enkele minuten duren terwijl de netwerkbronnen worden gemaakt. Na de eerste implementatie worden extra containergroepimplementaties naar hetzelfde subnet sneller voltooid.
Implementeren in bestaand virtueel netwerk
Een containergroep implementeren in een bestaand virtueel netwerk:
- Maak een subnet binnen uw bestaande virtuele netwerk, gebruik een bestaand subnet waarin al een containergroep is geïmplementeerd of gebruik een bestaand subnet dat alle andere resources leeg heeft
- Implementeer een containergroep met az container create en geef een van de volgende opties op:
- Naam van virtueel netwerk en subnetnaam
- Resource-id en subnetresource-id van het virtuele netwerk, waarmee u een virtueel netwerk uit een andere resourcegroep kunt gebruiken
- De naam of id van het netwerkprofiel, die u kunt verkrijgen met az network profile list
Voorbeeld
In het volgende voorbeeld wordt een tweede containergroep geïmplementeerd in hetzelfde subnet dat eerder is gemaakt, en wordt de communicatie tussen de twee container-exemplaren gecontroleerd.
Haal eerst het IP-adres op van de eerste containergroep die u hebt geïmplementeerd, de appcontainer:
az container show --resource-group myResourceGroup \
--name appcontainer \
--query ipAddress.ip --output tsv
In de uitvoer wordt het IP-adres van de containergroep in het privésubnet weergegeven. Bijvoorbeeld:
10.0.0.4
Stel nu in CONTAINER_GROUP_IP op het IP-adres dat u hebt opgehaald met de opdracht en az container show voer de volgende opdracht az container create uit. Met deze tweede container, commchecker, wordt een op Alpine Linux gebaseerde afbeelding uitgevoerd en uitgevoerd op basis van het IP-adres van het privé-subnet van de eerste wget containergroep.
CONTAINER_GROUP_IP=<container-group-IP-address>
az container create \
--resource-group myResourceGroup \
--name commchecker \
--image alpine:3.5 \
--command-line "wget $CONTAINER_GROUP_IP" \
--restart-policy never \
--vnet aci-vnet \
--subnet aci-subnet
Nadat deze tweede containerimplementatie is voltooid, haalt u de logboeken op, zodat u de uitvoer kunt zien van de wget opdracht die is uitgevoerd:
az container logs --resource-group myResourceGroup --name commchecker
Als de tweede container met de eerste container is gecommuniceerd, is de uitvoer vergelijkbaar met:
Connecting to 10.0.0.4 (10.0.0.4:80)
index.html 100% |*******************************| 1663 0:00:00 ETA
De logboekuitvoer moet laten zien dat het indexbestand verbinding heeft kunnen maken en downloaden vanuit de eerste container met behulp van het wget privé-IP-adres op het lokale subnet. Netwerkverkeer tussen de twee containergroepen blijft binnen het virtuele netwerk.
Voorbeeld - YAML
U kunt ook een containergroep implementeren in een bestaand virtueel netwerk met behulp van een YAML-bestand, een Resource Manager-sjabloon ofeen andere programmatische methode, zoals met de Python SDK.
Wanneer u bijvoorbeeld een YAML-bestand gebruikt, kunt u implementeren in een virtueel netwerk met een subnet dat is gedelegeerd Azure Container Instances. Geef de volgende eigenschappen op:
ipAddress: De instellingen voor het privé-IP-adres voor de containergroep.ports: de poorten die moeten worden geopend, indien aanwezig.protocol: Het protocol (TCP of UDP) voor de geopende poort.
networkProfile: Netwerkinstellingen voor het virtuele netwerk en subnet.id: De volledige Resource Manager resource-id van denetworkProfile.
Voer de opdracht az network profile list uit om de id van het netwerkprofiel op te halen, en geef de naam op van de resourcegroep die uw virtuele netwerk en gedelegeerd subnet bevat.
az network profile list --resource-group myResourceGroup \
--query [0].id --output tsv
Voorbeelduitvoer:
/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkProfiles/aci-network-profile-aci-vnet-aci-subnet
Zodra u de netwerkprofiel-id hebt, kopieert u de volgende YAML naar een nieuw bestand met de naam vnet-deploy-aci.yaml. Vervang networkProfile onder de waarde door de id die u zojuist hebt opgehaald en sla het bestand id op. Deze YAML maakt een containergroep met de naam appcontaineryaml in uw virtuele netwerk.
apiVersion: '2019-12-01'
location: westus
name: appcontaineryaml
properties:
containers:
- name: appcontaineryaml
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
ports:
- port: 80
protocol: TCP
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
ipAddress:
type: Private
ports:
- protocol: tcp
port: '80'
networkProfile:
id: /subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkProfiles/aci-network-profile-aci-vnet-subnet
osType: Linux
restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups
Implementeer de containergroep met de opdracht az container create, met de naam van het YAML-bestand voor de --file parameter :
az container create --resource-group myResourceGroup \
--file vnet-deploy-aci.yaml
Zodra de implementatie is voltooid, moet u de opdracht az container show uitvoeren om de status ervan weer te geven. Voorbeelduitvoer:
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- ------------------------------------------ ----------- --------- --------------- -------- ----------
appcontaineryaml myResourceGroup Running mcr.microsoft.com/azuredocs/aci-helloworld 10.0.0.5:80 Private 1.0 core/1.5 gb Linux westus
Resources opschonen
Container instances verwijderen
Wanneer u klaar bent met het werken met de container-exemplaren die u hebt gemaakt, verwijdert u deze met de volgende opdrachten:
az container delete --resource-group myResourceGroup --name appcontainer -y
az container delete --resource-group myResourceGroup --name commchecker -y
az container delete --resource-group myResourceGroup --name appcontaineryaml -y
Netwerkbronnen verwijderen
Voor deze functie zijn momenteel verschillende extra opdrachten vereist om de netwerkresources te verwijderen die u eerder hebt gemaakt. Als u de voorbeeldopdrachten in eerdere secties van dit artikel hebt gebruikt om uw virtuele netwerk en subnet te maken, kunt u het volgende script gebruiken om deze netwerkbronnen te verwijderen. In het script wordt ervan uit gegaan dat uw resourcegroep één virtueel netwerk met één netwerkprofiel bevat.
Voordat u het script gaat uitvoeren, stelt u de variabele in op de naam van de resourcegroep die het virtuele netwerk en subnet bevat dat RES_GROUP moet worden verwijderd. Werk de naam van het virtuele netwerk bij als u de eerder voorgestelde aci-vnet naam niet hebt gebruikt. Het script is opgemaakt voor de Bash-shell. Als u de voorkeur geeft aan een andere shell, zoals PowerShell of een opdrachtprompt, moet u de variabeletoewijzing en accessoires dienovereenkomstig aanpassen.
Waarschuwing
Met dit script worden resources verwijderd. Hiermee verwijdert u het virtuele netwerk en alle subnetten die het bevat. Zorg ervoor dat u de resources in het virtuele netwerk, inclusief eventuele subnetten die het bevat, niet meer nodig hebt voordat u dit script gaat uitvoeren. Zodra deze resources zijn verwijderd, kunnen ze niet meer worden teruggehaald.
# Replace <my-resource-group> with the name of your resource group
# Assumes one virtual network in resource group
RES_GROUP=<my-resource-group>
# Get network profile ID
# Assumes one profile in virtual network
NETWORK_PROFILE_ID=$(az network profile list --resource-group $RES_GROUP --query [0].id --output tsv)
# Delete the network profile
az network profile delete --id $NETWORK_PROFILE_ID -y
# Delete virtual network
az network vnet delete --resource-group $RES_GROUP --name aci-vnet
Volgende stappen
Zie Een Azure-containergroepmaken met VNet als u een nieuw virtueel netwerk, subnet, netwerkprofiel en containergroep wilt implementeren met behulp van een Resource Manager-sjabloon.