Краткое руководство. Создание Шлюз приложений для контейнеров — создание собственного развертывания

В этом руководстве предполагается, что вы используете собственную стратегию развертывания, где контроллер ALB ссылается на Шлюз приложений для ресурсов контейнеров, созданных в Azure. Предполагается, что жизненные циклы ресурсов управляются в Azure независимо от того, что определено в Kubernetes.

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

Убедитесь, что вы сначала развернули контроллер ALB в кластере Kubernetes. Вы можете следовать краткому руководству по развертыванию Шлюз приложений контроллера ALB контейнеров, если вы еще не развернули контроллер ALB.

Создание ресурса Шлюз приложений для контейнеров

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

RESOURCE_GROUP='<your resource group name>'
AGFC_NAME='alb-test' # Name of the Application Gateway for Containers resource to be created
az network alb create -g $RESOURCE_GROUP -n $AGFC_NAME

Создание внешнего ресурса

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

FRONTEND_NAME='test-frontend'
az network alb frontend create -g $RESOURCE_GROUP -n $FRONTEND_NAME --alb-name $AGFC_NAME

Создание ресурса связи

Делегирование подсети ресурсу связи

Чтобы создать ресурс сопоставления, сначала необходимо ссылаться на подсеть для Шлюз приложений для контейнеров, чтобы установить подключение. Убедитесь, что подсеть для связи Шлюз приложений для контейнеров является по крайней мере классом C или больше (/24 или меньшим префиксом CIDR). На этом шаге можно повторно использовать существующую подсеть и включить делегирование подсети или создать новую виртуальную сеть, подсеть и включить делегирование подсети.

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

VNET_NAME='<name of the virtual network to use>'
VNET_RESOURCE_GROUP='<the resource group of your VNET>'
ALB_SUBNET_NAME='subnet-alb' # subnet name can be any non-reserved subnet name (i.e. GatewaySubnet, AzureFirewallSubnet, AzureBastionSubnet would all be invalid)

Включите делегирование подсети для службы контейнеров Шлюз приложений. Делегирование для Шлюз приложений для контейнеров определяется типом ресурса Microsoft.ServiceNetworking/trafficControllers.

az network vnet subnet update \
    --resource-group $VNET_RESOURCE_GROUP  \
    --name $ALB_SUBNET_NAME \
    --vnet-name $VNET_NAME \
    --delegations 'Microsoft.ServiceNetworking/trafficControllers'
ALB_SUBNET_ID=$(az network vnet subnet list --resource-group $VNET_RESOURCE_GROUP --vnet-name $VNET_NAME --query "[?name=='$ALB_SUBNET_NAME'].id" --output tsv)
echo $ALB_SUBNET_ID

Делегирование разрешений управляемому удостоверению

Контроллер ALB должен подготовить новые Шлюз приложений для ресурсов контейнеров и присоединить подсеть, предназначенную для ресурса сопоставления контейнеров Шлюз приложений.

В этом примере мы делегируем роль AppGW для контейнеров Configuration Manager группе ресурсов и делегируем роль участника сети подсети, используемой подсетью связи контейнеров Шлюз приложений, которая содержит разрешение Microsoft.Network/virtualNetworks/subnets/join/action.

При необходимости можно создать и назначить настраиваемую роль с помощью Microsoft.Network/virtualNetworks/subnets/join/action разрешения, чтобы устранить другие разрешения, содержащиеся в роли участника сети. Дополнительные сведения об управлении разрешениями подсети.

IDENTITY_RESOURCE_NAME='azure-alb-identity'

resourceGroupId=$(az group show --name $RESOURCE_GROUP --query id -otsv)
principalId=$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query principalId -otsv)

# Delegate AppGw for Containers Configuration Manager role to RG containing Application Gateway for Containers resource
az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $resourceGroupId --role "fbc52c3f-28ad-4303-a892-8a056630b8f1" 

# Delegate Network Contributor permission for join to association subnet
az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $ALB_SUBNET_ID --role "4d97b98b-1d4f-4787-a291-c67834d212e7" 

Создание ресурса связи

Выполните следующую команду, чтобы создать ресурс связи и подключить его к указанной подсети. Для создания сопоставления контейнеров может потребоваться 5–6 Шлюз приложений минут.

ASSOCIATION_NAME='association-test'
az network alb association create -g $RESOURCE_GROUP -n $ASSOCIATION_NAME --alb-name $AGFC_NAME --subnet $ALB_SUBNET_ID

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

Поздравляем, вы установили контроллер балансировки нагрузки в кластере и развернули Шлюз приложений для ресурсов контейнеров в Azure!

Ознакомьтесь с несколькими руководствами по развертыванию примера приложения, демонстрируя некоторые Шлюз приложений для балансировки нагрузки контейнера.