Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве предполагается, что вы следуете стратегии развертывания, управляемой контроллером ALB, где все ресурсы шлюза приложений для контейнеров управляются контроллером ALB. Жизненный цикл определяется ресурсами, определенными в Kubernetes. Контроллер ALB создает ресурс Шлюза приложений для контейнеров, когда в кластере определен настраиваемый ресурс ApplicationLoadBalancer. Жизненный цикл шлюза приложений для контейнеров зависит от жизненного цикла пользовательского ресурса.
Предварительные требования
Убедитесь, что вы сначала развернули контроллер ALB в кластере Kubernetes. См. Краткое руководство: развертывание шлюза приложений для контроллера ALB контейнеров, если вы еще не развернули контроллер ALB.
Подготовьте виртуальную сеть или подсеть для шлюза приложений для контейнеров.
Если у вас нет подсети с по крайней мере 250 доступными IP-адресами, делегированной шлюзу приложений для контейнеров, выполните следующие действия, чтобы создать новую подсеть и включить делегирование для подсети. Новое адресное пространство подсети не может перекрывать существующие подсети в виртуальной сети.
- Новая подсеть в управляемой виртуальной сети AKS
- Новая подсеть в управляемой виртуальной сети, отличной от AKS
Если вы хотите развернуть Шлюз приложений для контейнеров в виртуальной сети, содержащей кластер AKS, выполните следующую команду, чтобы найти и назначить виртуальную сеть кластера. Эти сведения используются на следующем шаге.
AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'
MC_RESOURCE_GROUP=$(az aks show --name $AKS_NAME --resource-group $RESOURCE_GROUP --query "nodeResourceGroup" -o tsv)
CLUSTER_SUBNET_ID=$(az vmss list --resource-group $MC_RESOURCE_GROUP --query '[0].virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].subnet.id' -o tsv)
read -d '' VNET_NAME VNET_RESOURCE_GROUP VNET_ID <<< $(az network vnet show --ids $CLUSTER_SUBNET_ID --query '[name, resourceGroup, id]' -o tsv)
Выполните следующую команду, чтобы создать новую подсеть, содержащую по крайней мере 250 доступных IP-адресов, и включить делегирование подсети для ассоциированного ресурса Шлюз приложений для контейнеров.
SUBNET_ADDRESS_PREFIX='<network address and prefix for an address space under the vnet that has at least 250 available addresses (/24 or larger subnet)>'
ALB_SUBNET_NAME='subnet-alb' # subnet name can be any non-reserved subnet name (i.e. GatewaySubnet, AzureFirewallSubnet, AzureBastionSubnet would all be invalid)
az network vnet subnet create \
--resource-group $VNET_RESOURCE_GROUP \
--vnet-name $VNET_NAME \
--name $ALB_SUBNET_NAME \
--address-prefixes $SUBNET_ADDRESS_PREFIX \
--delegations 'Microsoft.ServiceNetworking/trafficControllers'
ALB_SUBNET_ID=$(az network vnet subnet show --name $ALB_SUBNET_NAME --resource-group $VNET_RESOURCE_GROUP --vnet-name $VNET_NAME --query '[id]' --output tsv)
Делегирование разрешений управляемому удостоверению
Контроллер ALB должен иметь возможность подготавливать новые ресурсы "Шлюз приложений для контейнеров" и присоединяться к подсети, предназначенной для ассоциативных ресурсов "Шлюза приложений для контейнеров".
В этом примере мы делегируем роль AppGW for Containers Configuration Manager группе ресурсов, содержащей управляемый кластер, и делегируем роль участника сети подсети, используемой в ассоциации шлюза приложений для контейнеров, которая содержит разрешение Microsoft.Network/virtualNetworks/subnets/join/action.
При необходимости можно создать и назначить настраиваемую роль с разрешением Microsoft.Network/virtualNetworks/subnets/join/action, чтобы устранить другие разрешения, содержащиеся в роли сетевого администратора. Дополнительные сведения об управлении разрешениями подсети.
IDENTITY_RESOURCE_NAME='azure-alb-identity'
MC_RESOURCE_GROUP=$(az aks show --name $AKS_NAME --resource-group $RESOURCE_GROUP --query "nodeResourceGroup" -otsv | tr -d '\r')
mcResourceGroupId=$(az group show --name $MC_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 AKS Managed Cluster RG
az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $mcResourceGroupId --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"
Создание ресурса ApplicationLoadBalancer Kubernetes
- Определение пространства имен Kubernetes для ресурса ApplicationLoadBalancer
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: alb-test-infra
EOF
- Определите ресурс ApplicationLoadBalancer, указав идентификатор подсети, в которую должен быть развернут Шлюз приложений для сопоставления контейнеров. Ассоциация устанавливает подключение от Шлюз приложений для контейнеров к определенной подсети (и подключённым сетям, где применимо), чтобы иметь возможность проксировать трафик к заданному бэкэнду.
Примечание.
Когда контроллер ALB создает Шлюз приложений для ресурсов контейнеров в ARM, он будет использовать следующие соглашения об именовании для своих ресурсов:
- alb-8< случайных символов>, сгенерированных для определения ресурса Шлюз приложений для контейнеров
- <в виде 8 случайно сгенерированных символов> для определения связанного ресурса
Если вы хотите изменить имя ресурсов, созданных в Azure, рассмотрите возможность использования собственной стратегии развертывания.
Выполните следующую команду, чтобы создать ресурс "Шлюз приложений для контейнеров" и его ассоциацию.
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: ApplicationLoadBalancer
metadata:
name: alb-test
namespace: alb-test-infra
spec:
associations:
- $ALB_SUBNET_ID
EOF
Проверка создания Application Gateway для ресурсов контейнеров
После создания ресурса ApplicationLoadBalancer можно отслеживать ход развертывания ресурса Application Gateway for Containers. Развертывание переходит из InProgressв состояние "Запрограммированное " при завершении подготовки. Для создания ресурсов "Шлюза приложений для контейнеров" может потребоваться 5–6 минут.
Чтобы проверить состояние ресурса ApplicationLoadBalancer , выполните следующую команду:
kubectl get applicationloadbalancer alb-test -n alb-test-infra -o yaml -w
Пример выходных данных успешного развертывания ресурса Шлюз приложений для контейнеров из Kubernetes.
status:
conditions:
- lastTransitionTime: "2023-06-19T21:03:29Z"
message: Valid Application Gateway for Containers resource
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:03:29Z"
message: alb-id=/subscriptions/xxx/resourceGroups/yyy/providers/Microsoft.ServiceNetworking/trafficControllers/alb-zzz
observedGeneration: 1
reason: Ready
status: "True"
type: Deployment
Следующие шаги
Поздравляем, вы установили контроллер балансировки нагрузки в кластере и развернули Шлюз приложений для ресурсов контейнеров в Azure!
Ознакомьтесь с несколькими руководствами по развертыванию примера приложения, которые демонстрируют некоторые концепции балансировки нагрузки при использовании Application Gateway для контейнеров.