Развертывание экземпляров контейнеров в виртуальной сети Azure
Виртуальная сеть Azure обеспечивает безопасное и конфиденциальное сетевое подключение для Azure и локальных ресурсов. Развертывание групп контейнеров в виртуальной сети Azure позволяет контейнерам безопасно обмениваться данными с другими ресурсами в виртуальной сети.
В этой статье показано использование команды az container create в Azure CLI для развертывания групп контейнеров в новой или в существующей виртуальной сети.
Внимание
- Перед использованием виртуальной сети необходимо делегировать подсети.
- Прежде чем развертывать группы контейнеров в виртуальных сетях, сначала рекомендуется проверить ограничение. Сетевые сценарии и ограничения см. в статье Сценарии и ресурсы виртуальной сети для Экземпляров контейнеров Azure.
- Развертывание группы контейнеров в виртуальной сети обычно доступно для контейнеров Linux и Windows в большинстве регионов, где Экземпляры контейнеров Azure доступно. Дополнительные сведения см. в доступных регионах.
Внимание
Сетевые профили больше не используются с выпуска API версии 2021-07-01
. Если вы используете эту или более новую версию, пропустите все шаги и действия, связанные с сетевыми профилями.
Примеры в этой статье отформатированы для выполнения в оболочке Bash. Если вы предпочитаете использовать другую оболочку, например PowerShell или командную строку, измените соответствующим образом символы продолжения строки.
Необходимые компоненты
Для управления всеми ресурсами, используемыми в следующих примерах, требуется группа ресурсов. Чтобы создать группу ресурсов, используйте az group create:
az group create --name myResourceGroup --location eastus
Развертывание в новой виртуальной сети
Примечание.
Если вы используете диапазон IP-адресов подсети /29, чтобы иметь только 3 IP-адреса. мы всегда рекомендуем перейти к одному диапазону выше (никогда не ниже). Например, используйте диапазон IP-адресов подсети /28, чтобы иметь не менее 1 или более буфера IP-адресов для каждой группы контейнеров. Это позволяет избежать зависаемых контейнеров, не в состоянии запустить, перезапустить или даже не остановить состояния.
Чтобы обеспечить развертывание в новой виртуальной сети и автоматическое создание сетевых ресурсов в Azure, укажите следующее при выполнении команды az container create:
- имя виртуальной сети;
- Префикс адреса виртуальной сети в формате CIDR.
- Имя подсети
- Префикс адреса подсети в формате CIDR.
Префиксы адресов виртуальной сети и подсети определяют адресное пространство соответственно для виртуальной сети и подсети. Эти значения представлены в нотации бесклассовой междоменной маршрутизации (CIDR), например 10.0.0.0/16
. Дополнительные сведения о работе с подсетями см. в статье Создание, изменение или удаление виртуальной сети.
После развертывания первой группы контейнеров с помощью этого метода можно развернуть в той же подсети, указав имена виртуальной сети и подсети или профиль сети, который Azure автоматически создает для вас. Так как Azure делегирует подсети службе "Экземпляры контейнеров Azure", в этой подсети можно развернуть только группы контейнеров.
Пример
Следующая команда az container create задает настройки для новой виртуальной сети и подсети. Укажите имя группы ресурсов, созданной в регионе, где доступны развертывания группы контейнеров в виртуальной сети. Эта команда развертывает общедоступный контейнер Майкрософт aci-helloworld, который запускает небольшой веб-сервер Node.js, обслуживающий статическую веб-страницу. В следующем разделе вы развернете вторую группу контейнеров в той же подсети и протестируете связь между двумя экземплярами контейнеров.
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
Развертывание в новой виртуальной сети с помощью этого метода может занять несколько минут, пока создаются сетевые ресурсы. После первоначального развертывания дальнейшие развертывания групп контейнеров в той же подсети выполняются быстрее.
Развертывание в существующей виртуальной сети
Чтобы развернуть группу контейнеров в существующей виртуальной сети, сделайте следующее:
- Создайте подсеть в существующей виртуальной сети, используйте существующую подсеть, в которой уже развернута группа контейнеров, или используйте существующую подсеть, очищенную от всех остальных ресурсов и настроек. Подсеть, используемая для групп контейнеров, может содержать только группы контейнеров. Перед развертыванием группы контейнеров в подсети необходимо явно делегировать подсеть перед подготовкой. После делегирования подсеть можно использовать только для групп контейнеров. Если попытаться развернуть в делегированной подсети ресурсы, отличные от групп контейнеров, операция завершится ошибкой.
- Разверните группу контейнеров с помощью az container create и укажите один из следующих вариантов:
- имя виртуальной сети и имя подсети;
- идентификатор ресурса виртуальной сети и идентификатор ресурса подсети, которые позволяют использовать виртуальную сеть из другой группы ресурсов;
Пример
В следующем примере выполняется развертывание второй группы контейнеров в той же ранее созданной подсети и проверяется связь между двумя экземплярами контейнера.
Сначала получите IP-адрес первой развернутой группы контейнеров — appcontainer:
az container show --resource-group myResourceGroup \
--name appcontainer \
--query ipAddress.ip --output tsv
В выходных данных отображается IP-адрес группы контейнеров в частной подсети. Например:
10.0.0.4
Теперь в качестве значения параметра CONTAINER_GROUP_IP
укажите IP-адрес, полученный командой az container show
, и выполните следующую команду az container create
. Этот второй контейнер, commchecker, запускает образ на базе Alpine Linux и выполняет wget
в отношении IP-адреса частной подсети первой группы контейнеров.
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
После завершения развертывания второго контейнера извлеките журналы, чтобы просмотреть выходные данные выполняемой wget
команды:
az container logs --resource-group myResourceGroup --name commchecker
Если второй контейнер успешно обменивается данными с первым, выходные данные должны выглядеть следующим образом:
Connecting to 10.0.0.4 (10.0.0.4:80)
index.html 100% |*******************************| 1663 0:00:00 ETA
Выходные данные журнала должны показывать, что программе wget
удалось подключиться и скачать файл индекса из первого контейнера, используя его частный IP-адрес в локальной подсети. Сетевой трафик между двумя группами контейнеров оставался в пределах виртуальной сети.
Пример — YAML
Возможно также развертывание группы контейнеров в существующей виртуальной сети с помощью файла YAML, шаблона Resource Manager или другого программного метода, например с помощью пакета SDK для Python.
Например, при использовании файла YAML можно выполнить развертывание в виртуальной сети с подсетью, делегированной в Экземпляры контейнеров Azure. Задайте следующие свойства.
ipAddress
— параметры IP-адреса для группы контейнеров.ports
— открываемые порты, если таковые имеются.protocol
— протокол (TCP или UDP) для открытого порта.
subnetIds
: идентификаторы ресурсов подсетей, которые необходимо развернуть вid
— идентификатор ресурса подсетиname
— имя подсети
Этот код YAML создает группу контейнеров с именем appcontaineryaml в виртуальной сети.
apiVersion: '2021-07-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'
osType: Linux
restartPolicy: Always
subnetIds:
- id: <subnet-id>
name: default
tags: null
type: Microsoft.ContainerInstance/containerGroups
Разверните группу контейнеров с помощью команды az container create, указав имя YAML-файла для значения параметра --file
.
az container create --resource-group myResourceGroup \
--file vnet-deploy-aci.yaml
После завершения развертывания выполните команду az container show, чтобы отобразить его состояние. Образец вывода:
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
Очистка ресурсов
Удаление экземпляров контейнеров
Когда завершите работу с созданными экземплярами контейнеров, удалите их с помощью следующих команд:
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
Удаление сетевых ресурсов
В настоящий момент этой функции требуется несколько дополнительных команд для удаления сетевых ресурсов, созданных ранее. Если вы использовали примеры команд из предыдущих разделов этой статьи для создания виртуальной сети и подсети, можно удалить эти сетевые ресурсы с помощью следующего скрипта. В сценарии предполагается, что группа ресурсов содержит одну виртуальную сеть с одним сетевым профилем.
Перед выполнением скрипта задайте в качестве переменной RES_GROUP
имя группы ресурсов, содержащей виртуальную сеть и подсеть, которые следует удалить. Обновите имя виртуальной сети, если вы не использовали aci-vnet
предлагаемое ранее имя. Скрипт отформатирован для оболочки Bash. Если вы предпочитаете другую оболочку, например PowerShell или командную строку, необходимо соответствующим образом настроить назначение переменных и методы доступа.
Предупреждение
Этот скрипт удаляет ресурсы! Он удаляет виртуальную сеть и все подсети, которые в ней содержатся. Убедитесь, что вам больше не требуются ресурсы в этой виртуальной сети, включая все содержащиеся в ней подсети, прежде чем запускать этот скрипт. После удаления эти ресурсы восстановить невозможно.
# 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
Следующие шаги
Сведения о развертывании новой виртуальной сети, подсети, профиля сети и группы контейнеров с помощью шаблона Resource Manager см. в статье "Создание группы контейнеров Azure с виртуальной сетью".
Сведения о развертывании Экземпляры контейнеров Azure, которые могут извлекать образы из Реестр контейнеров Azure через частную конечную точку, см. в статье "Развертывание в Экземпляры контейнеров Azure из Реестр контейнеров Azure с помощью управляемого удостоверения.