Поделиться через


Развертывание экземпляров контейнеров в виртуальной сети 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

Развертывание в новой виртуальной сети с помощью этого метода может занять несколько минут, пока создаются сетевые ресурсы. После первоначального развертывания дальнейшие развертывания групп контейнеров в той же подсети выполняются быстрее.

Развертывание в существующей виртуальной сети

Чтобы развернуть группу контейнеров в существующей виртуальной сети, сделайте следующее:

  1. Создайте подсеть в существующей виртуальной сети, используйте существующую подсеть, в которой уже развернута группа контейнеров, или используйте существующую подсеть, очищенную от всех остальных ресурсов и настроек. Подсеть, используемая для групп контейнеров, может содержать только группы контейнеров. Перед развертыванием группы контейнеров в подсети необходимо явно делегировать подсеть перед подготовкой. После делегирования подсеть можно использовать только для групп контейнеров. Если попытаться развернуть в делегированной подсети ресурсы, отличные от групп контейнеров, операция завершится ошибкой.
  2. Разверните группу контейнеров с помощью 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

Следующие шаги