Início Rápido: Criar Gateway de Aplicativo para contêineres gerenciados pelo Controlador ALB

Esse guia pressupõe que você esteja seguindo a estratégia de implantaçãogerenciada pelo controlador ALB, em que todos os Gateway de Aplicativo para recursos de contêineres são gerenciados pelo controlador ALB. O ciclo de vida é determinado pelos recursos definidos no Kubernetes. O Controlador ALB cria o recurso Gateway de Aplicativo para Contêineres quando um recurso personalizado ApplicationLoadBalancer é definido no cluster. O Gateway de Aplicativo para o ciclo de vida de Contêineres baseia-se no ciclo de vida do recurso personalizado.

Pré-requisitos

Verifique se você implantou primeiro o Controlador ALB no cluster do Kubernetes. Consulte o Início Rápido: implantar Gateway de Aplicativo para contêineres de Controlador ALB se você ainda não implantou o controlador ALB.

Preparar sua rede virtual/sub-rede para Gateway de Aplicativo para contêineres

Se você não tiver uma sub-rede disponível com pelo menos 250 endereços IP disponíveis e delegada ao recurso Gateway de Aplicativo para Contêineres, use as etapas a seguir para criar uma sub-rede e habilitar a delegação de sub-rede. O novo espaço de endereço de sub-rede não pode sobrepor nenhuma sub-rede existente na VNet.

Se você quiser implantar o Gateway de Aplicativo para Contêineres na rede virtual que contém o cluster do AKS, execute o comando a seguir para localizar e atribuir a rede virtual do cluster. Essas informações são usadas na próxima etapa, .

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)

Execute o seguinte comando para criar uma sub-rede contendo pelo menos 250 endereços IP disponíveis e habilitar a delegação de sub-rede para o recurso de associação Gateway de Aplicativo para Contêineres:

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)

Delegar permissões para identidade gerenciada

O Controlador ALB precisa da capacidade de provisionar novos Gateway de Aplicativo para recursos de Contêineres e ingressar na sub-rede destinada ao recurso de associação Gateway de Aplicativo para Contêineres.

Nesse exemplo, delegamos a função de Gateway de Aplicativo para o Configuration Manager de Contêineres ao grupo de recursos que contém o cluster gerenciado e delegamos a função de Colaborador de Rede à sub-rede usada pela sub-rede de associação do Gateway de Aplicativo para Contêineres, que contém a permissão Microsoft.Network/virtualNetworks/subnets/join/action.

Se desejar, você pode criar e atribuir uma função personalizada com a permissão Microsoft.Network/virtualNetworks/subnets/join/action para eliminar outras permissões contidas na função Colaborador de Rede . Saiba mais sobre como Gerenciar permissões de sub-rede.

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" 

Criar recurso do Kubernetes do ApplicationLoadBalancer

  1. Definir o namespace do Kubernetes para o recurso ApplicationLoadBalancer
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: alb-test-infra
EOF
  1. Defina o recurso ApplicationLoadBalancer, especificando a ID da sub-rede na qual o recurso de associação Gateway de Aplicativo para Contêineres deve ser implantado. A associação estabelece a conectividade do Gateway de Aplicativo para Contêineres para a sub-rede definida (e redes conectadas, quando aplicável) para poder fazer proxy do tráfego para um back-end definido.

Observação

Quando o Controlador ALB criar o Gateway de Aplicativo para recursos de Contêineres no ARM, ele usará as seguintes convenções de nomenclatura para seus recursos:

  • alb-<8 caracteres gerados aleatoriamente> para definir o recurso Gateway de Aplicativo para Contêineres
  • as-<8 caracteres gerados aleatoriamente> para definir o recurso de associação

Se você quiser alterar o nome dos recursos criados no Azure, considere seguir a estratégia traga sua própria implantação.

Execute o comando a seguir para criar o recurso Gateway de Aplicativo para Contêineres e associação.

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

Validar a criação do Gateway de Aplicativo para recursos de Contêineres

Depois que o recurso ApplicationLoadBalancer tiver sido criado, você poderá acompanhar o progresso da implantação do Gateway de Aplicativo para recursos de Contêineres. A implantação faz a transição do InProgress para o estado Programado quando o provisionamento é concluído. Pode levar de 5 a 6 minutos para que o Gateway de Aplicativo para que os recursos de contêineres sejam criados.

Você pode verificar o status do recurso ApplicationLoadBalancer executando o seguinte comando:

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

Exemplo de saída de um provisionamento bem-sucedido do Gateway de Aplicativo para o recurso contêineres do 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

Próximas etapas

Parabéns, você instalou o Controlador ALB no cluster e implantou os recursos do Gateway de Aplicativo para Contêineres no Azure!

Experimente alguns dos guias de instruções para implantar um aplicativo de exemplo, demonstrando alguns dos conceitos de balanceamento de carga do contêiner do Gateway de Aplicativo para Contêineres.