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


Использование частной конечной точки с средой azure Container Apps (предварительная версия)

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

Частная конечная точка использует частный IP-адрес из виртуальной сети. Эта конечная точка подключает вас приватно и безопасно к службе, созданной на Приватный канал Azure.

Частные конечные точки в приложениях контейнеров Azure поддерживают только входящий HTTP-трафик. Tcp-трафик не поддерживается.

Необходимые компоненты

Создание приложения-контейнера

Войдите на портал Azure.

  1. Введите Приложения-контейнеры в строке поиска вверху.

  2. В результатах поиска выберите Приложения-контейнеры.

  3. Выберите кнопку Создать.

  4. На вкладке "Основные сведения" на странице "Создание приложения контейнера" введите следующие значения.

    Параметр Действие
    Отток подписок Выберите свою подписку Azure.
    Группа ресурсов Выберите Создать и введите my-container-apps.
    Имя приложения-контейнера Введите my-container-app.
    Источник развертывания Выберите образ контейнера.
    Область/регион Выберите Центральная часть США.
  5. В поле "Создание среды приложений контейнеров" выберите ссылку "Создать".

  6. На странице Создание среды Контейнеров приложений Azure на вкладке Основные сведения введите следующие значения:

    Параметр Значение
    Имя среды Введите my-environment.
    Избыточность между зонами Выберите Отключено.
  7. Перейдите на вкладку "Сеть", чтобы создать виртуальную сеть. По умолчанию доступ к общедоступной сети включен, что означает отключение частных конечных точек.

  8. Отключите доступ к общедоступной сети.

  9. Оставьте собственный набор виртуальных сетей равным No. Вы можете использовать существующую виртуальную сеть, но частные конечные точки поддерживаются только средами профилей рабочих нагрузок, для которых требуется подсеть с минимальным диапазоном /27 CIDR или больше. Дополнительные сведения о размерах подсети см. в обзоре сетевой архитектуры.

  10. Установите для частных конечных точек значение "Да".

  11. Задайте имя частной конечной точки для моей частной конечной точки.

  12. В поле виртуальной сети частной конечной точки выберите ссылку "Создать".

  13. На странице "Создание виртуальная сеть" задайте виртуальная сеть my-private-endpoint-vnet. Нажмите ОК.

  14. В поле подсети виртуальной сети частной конечной точки выберите ссылку "Создать".

  15. На странице "Создание подсети" задайте имя подсети my-private-endpoint-vnet-subnet. Нажмите ОК.

  16. Оставьте для DNS значение "Зона Частная зона DNS Azure".

  17. Нажмите кнопку создания.

  18. На вкладке "Основные сведения" на странице "Создание приложения контейнера" нажмите кнопку "Далее: контейнер>".

  19. На вкладке "Создание приложения контейнера" на вкладке "Контейнер " выберите "Использовать образ быстрого запуска".

  20. Выберите "Рецензирование" и создайте его в нижней части страницы.

    Если ошибки не обнаружены, станет доступна кнопка Создать.

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

  21. Нажмите кнопку создания.

    Отобразится страница с сообщением Выполняется развертывание. После успешного завершения развертывания появится сообщение: развертывание завершено.

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

Необходимые компоненты

  • Учетная запись Azure с активной подпиской.

  • Последняя версия Azure CLI. Чтобы убедиться, что вы используете последнюю версию, выполните следующую команду.

    az upgrade
    
  • Последняя версия расширения приложений контейнеров Azure для Azure CLI. Чтобы убедиться, что вы используете последнюю версию, выполните следующую команду.

    az extension add --name containerapp --upgrade --allow-preview true
    

    Примечание.

    Начиная с мая 2024 г. расширения Azure CLI больше не поддерживают предварительные версии функций по умолчанию. Чтобы получить доступ к функциям предварительной версии контейнерных приложений, установите расширение "Приложения контейнеров" с --allow-preview trueпомощью .

Дополнительные сведения о предварительных требованиях и настройке см . в кратком руководстве. Развертывание первого приложения контейнера с помощью containerapp up.

Настройка переменных среды

Задайте следующие переменные среды.

RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
ENVIRONMENT_NAME="my-environment"
CONTAINERAPP_NAME="my-container-app"
VNET_NAME="my-custom-vnet"
SUBNET_NAME="my-custom-subnet"
PRIVATE_ENDPOINT="my-private-endpoint"
PRIVATE_ENDPOINT_CONNECTION="my-private-endpoint-connection"
PRIVATE_DNS_ZONE="privatelink.${LOCATION}.azurecontainerapps.io"
DNS_LINK="my-dns-link"

создание группы ресурсов Azure;

Создайте группу ресурсов для упорядочивания служб, связанных с развертыванием приложения контейнера.

az group create \
    --name $RESOURCE_GROUP \
    --location $LOCATION

Создание виртуальной сети

Среда в Azure Container Apps создает безопасную границу вокруг группы приложений-контейнеров. Развертываемые в одной среде приложения-контейнеры развертываются в одной виртуальной сети и записывают журналы в одну рабочую область Log Analytics.

  1. Создайте виртуальную сеть Azure для связывания с средой "Приложения контейнеров". Виртуальная сеть должна иметь подсеть, доступную для развертывания среды. Вы можете использовать существующую виртуальную сеть, но частные конечные точки поддерживаются только средами профилей рабочих нагрузок, для которых требуется подсеть с минимальным диапазоном /27 CIDR или больше. Дополнительные сведения о размерах подсети см. в обзоре сетевой архитектуры.

    az network vnet create \
        --resource-group $RESOURCE_GROUP \
        --name $VNET_NAME \
        --location $LOCATION \
        --address-prefix 10.0.0.0/16
    
  2. Создайте подсеть для связывания с виртуальной сетью и для хранения частной конечной точки.

    az network vnet subnet create \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 10.0.0.0/21
    
  3. Получение идентификатора подсети. Это используется для создания частной конечной точки.

    SUBNET_ID=$(az network vnet subnet show \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --query "id" \
        --output tsv)
    

Создать среду

  1. Создайте среду "Приложения контейнеров" с помощью виртуальной сети, развернутой на предыдущих шагах. Частные конечные точки поддерживаются только средами профилей рабочих нагрузок, которые являются типом по умолчанию для новых сред.

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    
  2. Получение идентификатора среды. Это используется для настройки среды.

    ENVIRONMENT_ID=$(az containerapp env show \
        --resource-group $RESOURCE_GROUP \
        --name $ENVIRONMENT_NAME \
        --query "id" \
        --output tsv)
    
  3. Отключите доступ к общедоступной сети для среды. Это необходимо для включения частных конечных точек.

    az containerapp env update \
        --id $ENVIRONMENT_ID \
        --public-network-access Disabled
    

Создание частной конечной точки

Создайте частную конечную точку в среде и подсети, созданной ранее.

az network private-endpoint create \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --name $PRIVATE_ENDPOINT \
    --subnet $SUBNET_ID \
    --private-connection-resource-id $ENVIRONMENT_ID \
    --connection-name $PRIVATE_ENDPOINT_CONNECTION \
    --group-id managedEnvironments

Настройка частной зоны DNS

  1. Получение IP-адреса частной конечной точки. Это можно использовать для добавления записи DNS в частную зону DNS.

    PRIVATE_ENDPOINT_IP_ADDRESS=$(az network private-endpoint show \
        --name $PRIVATE_ENDPOINT \
        --resource-group $RESOURCE_GROUP \
        --query 'customDnsConfigs[0].ipAddresses[0]' \
        --output tsv)
    
  2. Получите домен среды по умолчанию. Это можно использовать для добавления записи DNS в частную зону DNS.

    DNS_RECORD_NAME=$(az containerapp env show \
        --id $ENVIRONMENT_ID \
        --query 'properties.defaultDomain' \
        --output tsv | sed 's/\..*//')
    
  3. Создайте частную зону DNS.

    az network private-dns zone create \
        --resource-group $RESOURCE_GROUP \
        --name $PRIVATE_DNS_ZONE
    
  4. Создайте связь между виртуальной сетью и частной зоной DNS.

    az network private-dns link vnet create \
        --resource-group $RESOURCE_GROUP \
        --zone-name $PRIVATE_DNS_ZONE \
        --name $DNS_LINK \
        --virtual-network $VNET_NAME \
        --registration-enabled false
    
  5. Добавьте запись для частной конечной точки в частную зону DNS.

    az network private-dns record-set a add-record \
        --resource-group $RESOURCE_GROUP \
        --zone-name $PRIVATE_DNS_ZONE \
        --record-set-name $DNS_RECORD_NAME \
        --ipv4-address $PRIVATE_ENDPOINT_IP_ADDRESS
    

Развертывание приложения-контейнера

Разверните приложение-контейнер в вашей среде. Это приложение контейнера просто использует образ краткого руководства.

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

az containerapp up \
    --name $CONTAINERAPP_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --environment $ENVIRONMENT_NAME \
    --image mcr.microsoft.com/k8se/quickstart:latest \
    --target-port 80 \
    --ingress external \
    --query properties.configuration.ingress.fqdn

Проверка подключения частной конечной точки

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

Создание виртуальной машины.

Войдите на портал Azure.

  1. Найдите виртуальные машины в верхней строке поиска.

  2. В результатах поиска выберите Виртуальные машины.

  3. Нажмите кнопку создания.

  4. На вкладке "Основные сведения" на странице "Создание виртуальной машины" введите следующие значения.

    Параметр Действие
    Отток подписок Выберите свою подписку Azure.
    Группа ресурсов Выберите my-container-apps.
    Virtual machine name Введите azurevm.
    Область/регион Выберите Центральная часть США.
    Параметры доступности Выберите Избыточность инфраструктуры не требуется.
    Тип безопасности Выберите Стандартное.
    Изображения Выберите Windows Server 2022 Datacenter : Azure Edition — x64-го поколения 2-го поколения.
    Имя пользователя Введите azureuser.
    Пароль Введите пароль.
    Подтверждение пароля Введите пароль еще раз.
    Общедоступные входящие порты Выберите Отсутствует.
  5. На вкладке "Сеть" введите следующие значения.

    Параметр Действие
    Виртуальная сеть Выберите my-private-endpoint-vnet.
    Подсеть Выберите my-private-endpoint-vnet-subnet (10.0.0.0/23).
    Общедоступный IP-адрес Выберите Отсутствует.
    Группа безопасности сети сетевого адаптера Выберите Дополнительно.
  6. Выберите Review + Create (Просмотреть и создать).

  7. Нажмите кнопку создания.

Настройка переменных среды

Задайте следующие переменные среды.

VM_NAME="azurevm"
VM_ADMIN_USERNAME="azureuser"

Создание виртуальной машины.

Выполните следующую команду.

az vm create \
    --resource-group $RESOURCE_GROUP \
    --name $VM_NAME \
    --image Win2022Datacenter \
    --public-ip-address "" \
    --vnet-name $VNET_NAME \
    --subnet $SUBNET_NAME \
    --admin-username $VM_ADMIN_USERNAME

После выполнения этой команды появится запрос на ввод пароля администратора для виртуальной машины.

Имя пользователя администратора должно составлять от 1 до 20 символов.

Пароль администратора имеет следующие требования:

  • Должно быть от 12 до 123 символов длиной.
  • Должно содержать 3 из следующих: 1 строчные буквы, 1 верхний регистр, 1 номер и 1 специальный символ.

Проверка подключения

  1. Войдите на портал Azure.

  2. Найдите виртуальную машину, созданную в верхней строке поиска, и выберите ее в результатах поиска.

  3. На странице "Обзор" виртуальной машины выберите "Подключиться", а затем нажмите кнопку "Подключиться через бастион".

  4. На странице Бастиона выберите "Развернуть бастион".

  5. Задайте имя пользователя и пароль виртуальной машины, которые вы использовали при создании виртуальной машины.

  6. Нажмите Подключиться.

  7. После подключения запустите PowerShell на виртуальной машине.

  8. В PowerShell выполните следующую команду. Замените <заполнители вашими значениями> .

    nslookup <CONTAINER_APP_ENDPOINT>
    

    Выходные данные аналогичны следующему примеру с значениями, заменяющими <ЗАПОЛНИТЕЛИ.>

    Server:  UnKnown
    Address:  168.63.129.16
    
    Non-authoritative answer:
    Name:    <ENVIRONMENT_DEFAULT_DOMAIN>.privatelink.<LOCATION>.azurecontainerapps.io
    
    Address:  10.0.0.4
    Aliases:  <CONTAINER_APP_ENDPOINT>
    
  9. Откройте браузер на виртуальной машине.

  10. Перейдите к конечной точке приложения-контейнера. Выходные данные для образа приложения контейнера быстрого запуска отображаются.

Очистка ресурсов

Если вы не собираетесь продолжать использовать это приложение, можно удалить группу ресурсов my-container-apps . При этом удаляется экземпляр приложений контейнеров Azure и все связанные службы. Она также удаляет группу ресурсов, созданную службой "Приложения контейнеров", и которая содержит пользовательские сетевые компоненты.

Внимание

Следующая команда удаляет указанную группу ресурсов и все ресурсы, содержащиеся в ней. Если ресурсы вне области этого руководства существуют в указанной группе ресурсов, они также будут удалены.

az group delete --name $RESOURCE_GROUP