Inicio rápido: Creación de Application Gateway para contenedores administrado por el controlador ALB

En esta guía se da por supuesto que sigue la estrategia de implementación de administración por el controlador ALB, en la que todos los recursos de Puerta de enlace de aplicaciones para contenedores se administran mediante el controlador ALB. El ciclo de vida se determina con los recursos definidos en Kubernetes. El controlador ALB crea el recurso de Application Gateway para contenedores cuando se define un recurso personalizado ApplicationLoadBalancer en el clúster. El ciclo de vida de Application Gateway para contenedores se basa en el ciclo de vida del recurso personalizado.

Requisitos previos

Asegúrese de que ha implementado primero el controlador ALB en el clúster de Kubernetes. Consulte Inicio rápido: Implementación del controlador ALB de Application Gateway para contenedores si aún no ha implementado el controlador ALB.

Prepare la red virtual o subred para Application Gateway para contenedores

Si no tiene una subred disponible con al menos 250 direcciones IP disponibles y delegada en el recurso de Application Gateway para contenedores, siga los siguientes pasos para crear una nueva subred y habilitar la delegación de subred. El nuevo espacio de direcciones de subred no puede superponerse a ninguna subred existente en la red virtual.

Si desea implementar Application Gateway para contenedores en la red virtual que contiene el clúster de AKS, ejecute el siguiente comando para buscar y asignar la red virtual del clúster. Esta información se usa en el siguiente paso.

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)

Ejecute el siguiente comando para crear una nueva subred que contenga al menos 250 direcciones IP disponibles y habilite la delegación de subred para el recurso de asociación de Application Gateway para contenedores:

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)

Delegación de permisos a una identidad administrada

El controlador ALB necesita la capacidad de aprovisionar nuevos recursos de Application Gateway para contenedores y unir la subred destinada al recurso de asociación de Application Gateway para contenedores.

En este ejemplo, delegamos la función Administrador de configuración de AppGW for Containers en el grupo de recursos que contiene el clúster administrado y delegamos la función Colaborador de red en la subred utilizada por la subred de asociación de Application Gateway para contenedores, que contiene el permiso Microsoft.Network/virtualNetworks/subnets/join/action.

Si lo desea, puede crear y asignar un rol personalizado con el permiso Microsoft.Network/virtualNetworks/subnets/join/action para eliminar otros permisos contenidos en el rol Colaborador de red. Obtenga más información sobre la administración de permisos de subred.

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" 

Creación de un recurso de Kubernetes applicationLoadBalancer

  1. Definición del espacio de nombres de Kubernetes para el recurso ApplicationLoadBalancer
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: alb-test-infra
EOF
  1. Defina el recurso ApplicationLoadBalancer y especifique el identificador de subred en el que se debe implementar el recurso de asociación Application Gateway para contenedores. La asociación establece conectividad de Application Gateway para contenedores a la subred definida (y a las redes conectadas cuando corresponda) para poder redirigir el tráfico mediante proxy a un back-end definido.

Nota:

Cuando el controlador ALB crea la Application Gateway para los recursos Containers en ARM, usará las siguientes convenciones de nomenclatura para sus recursos:

  • alb-<8 genera caracteres aleatoriamente> para definir la Application Gateway para el recurso Containers
  • as-<8 genera caracteres aleatoriamente> para definir el recurso de asociación

Si desea cambiar el nombre de los recursos creados en Azure, considere la posibilidad de seguir la estrategia traiga su propia implementación.

Ejecute el siguiente comando para crear el recurso y asociación de Application Gateway para Containers.

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

Validación de la creación de los recursos de Application Gateway para contenedores

Una vez creado el recurso ApplicationLoadBalancer, puede realizar un seguimiento del progreso de la implementación de los recursos de Application Gateway para contenedores. La implementación pasa del estado InProgress al estado Programado cuando se ha completado el aprovisionamiento. Los recursos de Application Gateway para contenedores pueden tardar entre 5 y 6 minutos en crearse.

Puede comprobar el estado del recurso ApplicationLoadBalancer mediante la ejecución del siguiente comando:

kubectl get applicationloadbalancer alb-test -n alb-test-infra -o yaml -w

Salida de ejemplo de un aprovisionamiento correcto de los recursos de Application Gateway para contenedores desde 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

Pasos siguientes

Enhorabuena, ha instalado el controlador ALB en el clúster y ha implementado los recursos de Application Gateway para Containers en Azure.

Pruebe algunas de las guías paso a paso para implementar una aplicación de ejemplo, en las que se muestran algunos conceptos de equilibrio de carga de Application Gateway para Containers.