Partilhar via


Guia de início rápido: criar gateway de aplicativo para contêineres gerenciados pelo controlador ALB

Este guia pressupõe que você esteja seguindo a estratégia de implantação do controladorgerenciado por ALB, onde todos os recursos do Application Gateway for Containers são gerenciados pelo controlador ALB. O ciclo de vida é determinado pelos recursos definidos no Kubernetes. O Controlador ALB cria o recurso Application Gateway for Containers quando um recurso personalizado ApplicationLoadBalancer é definido no cluster. O ciclo de vida do Application Gateway for Containers é baseado no ciclo de vida do recurso personalizado.

Pré-requisitos

Certifique-se de ter implantado primeiro o Controlador ALB em seu cluster Kubernetes. Consulte Guia de início rápido: implantar o Application Gateway for Containers ALB Controller se você ainda não tiver implantado o controlador ALB.

Prepare sua rede/sub-rede virtual para o Application Gateway for Containers

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

Se desejar implantar o Application Gateway for Containers na rede virtual que contém o cluster AKS, execute o seguinte comando 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 nova 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 Application Gateway for Containers:

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 à identidade gerenciada

O ALB Controller precisa da capacidade de provisionar novos recursos do Application Gateway for Containers e de ingressar na sub-rede destinada ao recurso de associação do Application Gateway for Containers.

Neste exemplo, delegamos a função AppGW for Containers Configuration Manager 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 Application Gateway for Containers, 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 de 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 ApplicationLoadBalancer Kubernetes

  1. Definir o namespace 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 do Application Gateway for Containers deve ser implantado. A associação estabelece conectividade do Application Gateway for Containers para a sub-rede definida (e redes conectadas, quando aplicável) para poder fazer proxy do tráfego para um back-end definido.

Nota

Quando o controlador ALB cria os recursos do Application Gateway for Containers em ARM, ele usará as seguintes convenções de nomenclatura para seus recursos:

  • alb-8< caracteres> gerados aleatoriamente para definir o recurso Application Gateway for Containers
  • 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 seguinte comando para criar o recurso e a associação do Application Gateway for 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

Validar a criação dos recursos do Application Gateway for Containers

Depois que o recurso ApplicationLoadBalancer tiver sido criado, você poderá acompanhar o progresso da implantação dos recursos do Application Gateway for Containers. A implantação transita do estado InProgress para o estado programado quando o provisionamento é concluído. Pode levar de 5 a 6 minutos para que os recursos do Application Gateway for Containers 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 recurso Application Gateway for Containers 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óximos passos

Parabéns, você instalou o ALB Controller em seu cluster e implantou os recursos do Application Gateway for Containers no Azure!

Experimente alguns dos guias de instruções para implantar um aplicativo de exemplo, demonstrando alguns dos conceitos de balanceamento de carga do Application Gateway for Container.