Nasazení instancí kontejnerů do virtuální sítě Azure
Azure Virtual Network poskytuje zabezpečené privátní sítě pro vaše prostředky Azure a místní prostředky. Nasazením skupin kontejnerů do virtuální sítě Azure můžou kontejnery bezpečně komunikovat s dalšími prostředky ve virtuální síti.
Tento článek ukazuje, jak pomocí příkazu az container create v Azure CLI nasadit skupiny kontejnerů do nové virtuální sítě nebo existující virtuální sítě.
Důležité
- Před použitím virtuální sítě musí být podsítě delegovány.
- Před nasazením skupin kontejnerů ve virtuálních sítích doporučujeme nejprve zkontrolovat omezení. Scénáře a omezení sítí najdete v tématu Scénáře a prostředky virtuální sítě pro službu Azure Container Instances.
- Nasazení skupiny kontejnerů do virtuální sítě je obecně dostupné pro kontejnery Linuxu a Windows ve většině oblastí, kde je služba Azure Container Instances dostupná. Podrobnosti najdete v dostupných oblastech.
Důležité
Profily sítě byly vyřazeny z 2021-07-01
verze rozhraní API. Pokud používáte tuto nebo novější verzi, ignorujte všechny kroky a akce související se síťovými profily.
Příklady v tomto článku jsou formátovány pro prostředí Bash. Pokud dáváte přednost jinému prostředí, jako je PowerShell nebo příkazový řádek, upravte znaky pokračování řádku odpovídajícím způsobem.
Požadavky
Definování proměnných prostředí
Cesta automatizovaného nasazení používá následující proměnné prostředí a názvy prostředků v rámci této příručky. Uživatelé, kteří procházejí průvodcem ručně, můžou používat vlastní proměnné a názvy jako upřednostňované.
export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myACIResourceGroup$RANDOM_ID"
export MY_VNET_NAME="aci-vnet"
export MY_SUBNET_NAME="aci-subnet"
export MY_SUBNET_ID="/subscriptions/$(az account show --query id --output tsv)/resourceGroups/$MY_RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$MY_VNET_NAME/subnets/$MY_SUBNET_NAME"
export MY_APP_CONTAINER_NAME="appcontainer"
export MY_COMM_CHECKER_NAME="commchecker"
export MY_YAML_APP_CONTAINER_NAME="appcontaineryaml"
Vytvoření skupiny zdrojů
Ke správě všech prostředků použitých v následujících příkladech potřebujete skupinu prostředků. Pokud chcete vytvořit skupinu prostředků, použijte příkaz az group create:
az group create --name $MY_RESOURCE_GROUP_NAME --location eastus
Úspěšná operace by měla vytvořit výstup podobný následujícímu kódu JSON:
Výsledky:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/myACIResourceGroup123abc",
"location": "abcdef",
"managedBy": null,
"name": "myACIResourceGroup123",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Nasazení do nové virtuální sítě
Poznámka:
Pokud používáte rozsah IP adres podsítě /29, abyste měli jenom 3 IP adresy. doporučujeme vždy přejít o jeden rozsah výše (nikdy níže). Použijte například rozsah IP adres podsítě /28, abyste mohli mít alespoň 1 nebo více vyrovnávací paměti PROTOKOLU IP pro každou skupinu kontejnerů. Tímto způsobem se můžete vyhnout zablokovaným kontejnerům, nemůžete spustit, restartovat nebo dokonce zastavit stavy.
Pokud chcete nasadit do nové virtuální sítě a nechat Azure automaticky vytvořit síťové prostředky, při spuštění příkazu az container create zadejte následující:
- Název virtuální sítě
- Předpona adresy virtuální sítě ve formátu CIDR
- Název podsítě
- Předpona adresy podsítě ve formátu CIDR
Předpony adres virtuální sítě a podsítě určují adresní prostory virtuální sítě a podsítě. Tyto hodnoty jsou reprezentovány v zápisu CIDR (Classless Inter-Domain Routing), například 10.0.0.0/16
. Další informace o práci s podsítěmi najdete v tématu Přidání, změna nebo odstranění podsítě virtuální sítě.
Jakmile pomocí této metody nasadíte svou první skupinu kontejnerů, můžete ji nasadit do stejné podsítě zadáním názvů virtuální sítě a podsítí nebo profilu sítě, který azure automaticky vytvoří za vás. Vzhledem k tomu, že Azure deleguje podsíť do služby Azure Container Instances, můžete do podsítě nasadit pouze skupiny kontejnerů.
Příklad
Následující příkaz az container create určuje nastavení pro novou virtuální síť a podsíť. Zadejte název skupiny prostředků, která byla vytvořena v oblasti, ve které jsou dostupná nasazení skupin kontejnerů ve virtuální síti. Tento příkaz nasadí veřejný kontejner Microsoft aci-helloworld, na kterém běží malý webový server Node.js obsluhující statickou webovou stránku. V další části nasadíte druhou skupinu kontejnerů do stejné podsítě a otestujete komunikaci mezi dvěma instancemi kontejneru.
az container create \
--name $MY_APP_CONTAINER_NAME \
--resource-group $MY_RESOURCE_GROUP_NAME \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--vnet $MY_VNET_NAME \
--vnet-address-prefix 10.0.0.0/16 \
--subnet $MY_SUBNET_NAME \
--subnet-address-prefix 10.0.0.0/24
Úspěšná operace by měla vytvořit výstup podobný následujícímu kódu JSON:
Výsledky:
{
"confidentialComputeProperties": null,
"containers": [
{
"command": null,
"environmentVariables": [],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"instanceView": {
"currentState": {
"detailStatus": "",
"exitCode": null,
"finishTime": null,
"startTime": "0000-00-00T00:00:00.000000+00:00",
"state": "Running"
},
"events": [
{
"count": 1,
"firstTimestamp": "0000-00-00T00:00:00+00:00",
"lastTimestamp": "0000-00-00T00:00:00+00:00",
"message": "Successfully pulled image \"mcr.microsoft.com/azuredocs/aci-helloworld@sha256:0000000000000000000000000000000000000000000000000000000000000000\"",
"name": "Pulled",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "0000-00-00T00:00:00+00:00",
"lastTimestamp": "0000-00-00T00:00:00+00:00",
"message": "pulling image \"mcr.microsoft.com/azuredocs/aci-helloworld@sha256:0000000000000000000000000000000000000000000000000000000000000000\"",
"name": "Pulling",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "0000-00-00T00:00:00+00:00",
"lastTimestamp": "0000-00-00T00:00:00+00:00",
"message": "Started container",
"name": "Started",
"type": "Normal"
}
],
"previousState": null,
"restartCount": 0
},
"livenessProbe": null,
"name": "appcontainer",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"readinessProbe": null,
"resources": {
"limits": null,
"requests": {
"cpu": 1.0,
"gpu": null,
"memoryInGb": 1.5
}
},
"securityContext": null,
"volumeMounts": null
}
],
"diagnostics": null,
"dnsConfig": null,
"encryptionProperties": null,
"extensions": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/myACIResourceGroup123/providers/Microsoft.ContainerInstance/containerGroups/appcontainer",
"identity": null,
"imageRegistryCredentials": null,
"initContainers": [],
"instanceView": {
"events": [],
"state": "Running"
},
"ipAddress": {
"autoGeneratedDomainNameLabelScope": null,
"dnsNameLabel": null,
"fqdn": null,
"ip": "10.0.0.4",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "Private"
},
"location": "eastus",
"name": "appcontainer",
"osType": "Linux",
"priority": null,
"provisioningState": "Succeeded",
"resourceGroup": "myACIResourceGroup123abc",
"restartPolicy": "Always",
"sku": "Standard",
"subnetIds": [
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/myACIResourceGroup123/providers/Microsoft.Network/virtualNetworks/aci-vnet/subnets/aci-subnet",
"name": null,
"resourceGroup": "myACIResourceGroup123abc"
}
],
"tags": {},
"type": "Microsoft.ContainerInstance/containerGroups",
"volumes": null,
"zones": null
}
Při nasazení do nové virtuální sítě pomocí této metody může nasazení trvat několik minut, než se síťové prostředky vytvoří. Po počátečním nasazení se další nasazení skupin kontejnerů do stejné podsítě dokončí rychleji.
Nasazení do existující virtuální sítě
Nasazení skupiny kontejnerů do existující virtuální sítě:
- Vytvořte podsíť ve stávající virtuální síti, použijte existující podsíť, ve které je už nasazená skupina kontejnerů, nebo použijte existující podsíť vyprázdněnou ze všech ostatních prostředků a konfigurace. Podsíť, kterou používáte pro skupiny kontejnerů, může obsahovat pouze skupiny kontejnerů. Před nasazením skupiny kontejnerů do podsítě musíte před zřízením explicitně delegovat podsíť. Po delegování je možné podsíť použít pouze pro skupiny kontejnerů. Pokud se do delegované podsítě pokusíte nasadit jiné prostředky než skupiny kontejnerů, operace selže.
- Nasaďte skupinu kontejnerů pomocí příkazu az container create a zadejte jednu z následujících možností:
- Název virtuální sítě a název podsítě
- ID prostředku virtuální sítě a ID prostředku podsítě, které umožňuje používat virtuální síť z jiné skupiny prostředků
Nasazení pomocí souboru YAML
Skupinu kontejnerů můžete také nasadit do existující virtuální sítě pomocí souboru YAML, šablony Resource Manageru nebo jiné programové metody, jako je sada Python SDK.
Například při použití souboru YAML můžete nasadit do virtuální sítě s podsítí delegovanou do služby Azure Container Instances. Zadejte následující vlastnosti:
ipAddress
: Nastavení privátní IP adresy pro skupinu kontejnerů.ports
: Porty, které se mají otevřít, pokud existuje.protocol
: Protokol (TCP nebo UDP) pro otevřený port.
subnetIds
: ID prostředků podsítí, do které se mají nasadit.id
: ID prostředku podsítěname
: Název podsítě
Tento YAML vytvoří ve vaší virtuální síti skupinu kontejnerů. Do polí názvů a ID podsítě zadejte název skupiny kontejnerů do pole ID podsítě. Pro název používáme appcontaineryaml . Pokud potřebujete najít ID podsítě a už nemáte přístup k předchozím výstupům, můžete ho zobrazit pomocí příkazu az container show . Vyhledejte pole pod položkou id
subnetIds
.
apiVersion: '2021-07-01'
location: eastus
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'
osType: Linux
restartPolicy: Always
subnetIds:
- id: <subnet_id>
name: default
tags: null
type: Microsoft.ContainerInstance/containerGroups
Následující příkaz Bash je určený pro cestu automatizovaného nasazení.
echo -e "apiVersion: '2021-07-01'\nlocation: eastus\nname: $MY_YAML_APP_CONTAINER_NAME\nproperties:\n containers:\n - name: $MY_YAML_APP_CONTAINER_NAME\n properties:\n image: mcr.microsoft.com/azuredocs/aci-helloworld\n ports:\n - port: 80\n protocol: TCP\n resources:\n requests:\n cpu: 1.0\n memoryInGB: 1.5\n ipAddress:\n type: Private\n ports:\n - protocol: tcp\n port: '80'\n osType: Linux\n restartPolicy: Always\n subnetIds:\n - id: $MY_SUBNET_ID\n name: default\ntags: null\ntype: Microsoft.ContainerInstance/containerGroups" > container-instances-vnet.yaml
Nasaďte skupinu kontejnerů pomocí příkazu az container create a zadejte název souboru YAML pro --file
parametr:
az container create --resource-group $MY_RESOURCE_GROUP_NAME \
--file container-instances-vnet.yaml
Následující příkaz Bash je určený pro cestu automatizovaného nasazení.
rm container-instances-vnet.yaml
Po dokončení nasazení spusťte příkaz az container show a zobrazte jeho stav:
az container list --resource-group $MY_RESOURCE_GROUP_NAME --output table
Výstup by měl vypadat podobně jako v následujícím příkladu:
Výsledky:
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- ------------------------ --------- ------------------------------------------ -------------- --------- --------------- -------- ----------
appcontainer myACIResourceGroup123abc Succeeded mcr.microsoft.com/azuredocs/aci-helloworld 10.0.0.4:80,80 Private 1.0 core/1.5 gb Linux abcdef
appcontaineryaml myACIResourceGroup123abc Succeeded mcr.microsoft.com/azuredocs/aci-helloworld 10.0.0.5:80,80 Private 1.0 core/1.5 gb Linux abcdef
Předvedení komunikace mezi instancemi kontejnerů
Následující příklad nasadí třetí skupinu kontejnerů do stejné podsítě vytvořené dříve. Pomocí image Alpine Linux ověřuje komunikaci mezi sebou a první instancí kontejneru.
Poznámka:
Vzhledem k omezování rychlosti při načítání veřejných imagí Dockeru, jako je například Alpine Linux, která se zde používá, se může zobrazit chyba ve formuláři:
(RegistryErrorResponse) Z registru Dockeru index.docker.io se obdrží chybová odpověď. Zkuste to prosím znovu později. Kód: RegistryErrorResponse Message: Z registru Dockeru index.docker.io se obdrží chybová odpověď. Zkuste to prosím znovu později.
Následující příkaz Bash je určený pro cestu automatizovaného nasazení.
echo -e "Due to rate limiting in effect for pulling public Docker images like the Alpine Linux one used here, you may receive an error in the form:\n\n(RegistryErrorResponse) An error response is received from the docker registry 'index.docker.io'. Please retry later.\nCode: RegistryErrorResponse\nMessage: An error response is received from the docker registry 'index.docker.io'. Please retry later.\n\nIf this occurs, the automated deployment will exit. You can try again or go to the end of the guide to see instructions for cleaning up your resources."
Nejprve získejte IP adresu první skupiny kontejnerů, kterou jste nasadili, appcontainer:
az container show --resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_APP_CONTAINER_NAME \
--query ipAddress.ip --output tsv
Výstup zobrazí IP adresu skupiny kontejnerů v privátní podsíti. Příklad:
Výsledky:
10.0.0.4
Teď nastavte CONTAINER_GROUP_IP
ip adresu, kterou jste načetli pomocí az container show
příkazu, a spusťte následující az container create
příkaz. Tento druhý kontejner, čárkacker, spustí image založenou na Alpine Linuxu a spustí wget
se s IP adresou privátní podsítě první skupiny kontejnerů.
az container create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_COMM_CHECKER_NAME \
--image alpine:3.4 \
--command-line "wget 10.0.0.4" \
--restart-policy never \
--vnet $MY_VNET_NAME \
--subnet $MY_SUBNET_NAME
Po dokončení tohoto druhého nasazení kontejneru si stáhněte protokoly, abyste viděli výstup wget
příkazu, který spustil:
az container logs --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_COMM_CHECKER_NAME
Pokud druhý kontejner úspěšně komunikoval s prvním, výstup je podobný následujícímu:
Connecting to 10.0.0.4 (10.0.0.4:80)
index.html 100% |*******************************| 1663 0:00:00 ETA
Výstup protokolu by měl ukázat, že wget
se mohl připojit a stáhnout soubor indexu z prvního kontejneru pomocí jeho privátní IP adresy v místní podsíti. Síťový provoz mezi těmito dvěma skupinami kontejnerů zůstal ve virtuální síti.
Vyčištění prostředků
Pokud nechcete tyto prostředky dál používat, můžete je odstranit, abyste se vyhnuli poplatkům za Azure. Všechny prostředky, které jste použili v této příručce, můžete vyčistit odstraněním skupiny prostředků pomocí příkazu az group delete . Po odstranění jsou tyto prostředky nedostupné.
Další kroky
Pokud chcete nasadit novou virtuální síť, podsíť, profil sítě a skupinu kontejnerů pomocí šablony Resource Manageru, přečtěte si téma Vytvoření skupiny kontejnerů Azure s virtuální sítí.
Pokud chcete nasadit službu Azure Container Instances, která může načíst image z azure Container Registry prostřednictvím privátního koncového bodu, přečtěte si téma Nasazení do služby Azure Container Instances ze služby Azure Container Registry pomocí spravované identity.