Configurar a rede CNI do Azure para alocação dinâmica de IPs e suporte avançado à sub-rede no AKS (Serviço de Kubernetes do Azure)

Uma desvantagem do CNI tradicional é o esgotamento de endereços IP de pods à medida que o cluster do AKS cresce, resultando na necessidade de recriar o cluster inteiro em uma sub-rede maior. A nova capacidade de alocação de IP dinâmico no CNI do Azure resolve esse problema alocando IPs de pods de uma sub-rede separada da sub-rede que hospeda o cluster do AKS.

Ele oferece os seguintes benefícios:

  • Melhor utilização de IPs: os IPs são alocados dinamicamente para os pods do cluster da sub-rede de pods. Isso leva a uma melhor utilização de IPs no cluster em comparação com a solução CNI tradicional, que faz a alocação estática de IPs para cada nó.
  • Escalonável e flexível: as sub-redes de nó e de pods podem ser dimensionadas de forma independente. Uma única sub-rede de pods pode ser compartilhada entre vários pools de nós de um cluster ou em vários clusters do AKS implantados na mesma VNet. Você também pode configurar uma sub-rede de pods separada para um pool de nós.
  • Alto desempenho: como pods são atribuídos a IPs de rede virtual, eles têm conectividade direta com outros recursos e pods de clusters na VNet. A solução dá suporte a clusters muito grandes sem degradação no desempenho.
  • Políticas de VNet separadas para pods: como os pods têm uma sub-rede separada, você pode configurar para eles políticas de VNet separadas que são diferentes das políticas de nós. Isso permite muitos cenários úteis, como permitir a conectividade com a Internet apenas para pods e não para nós, corrigindo o IP de origem para o pod em um pool de nós usando um Gateway da NAT do Azure e usando NSGs para filtrar o tráfego entre pools de nós.
  • Políticas de rede do Kubernetes: as políticas de rede do Azure e do Calico funcionam com essa nova solução.

Este artigo mostra como usar a rede CNI do Azure para alocação dinâmica de IPs e suporte avançado à sub-rede no AKS.

Pré-requisitos

Observação

Ao usar a alocação dinâmica de IPs, não há suporte para expor um aplicativo como um Serviço de Link Privado usando um Serviço de Load Balancer do Kubernetes.

  • Examine os pré-requisitos para configurar a rede básica da CNI do Azure no AKS, pois os mesmos pré-requisitos se aplicam a este artigo.

  • Examine os parâmetros de implantação para configurar a rede básica de CNI do Azure no AKS, conforme os mesmos parâmetros se aplicam.

  • Não há suporte para os clusters do mecanismo do AKS e do tipo DIY.

  • CLI do Azure versão 2.37.0 ou posterior.

  • Se você tiver um cluster existente, precisará habilitar o Container Insights para monitorar o uso da sub-rede IP. Você pode habilitar o Container Insights usando o comando az aks enable-addons, conforme mostrado no exemplo a seguir:

    az aks enable-addons --addons monitoring --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
    

planejar o endereçamento IP

Planejar seu endereçamento IP é muito mais simples com esse recurso. Como os nós e os pods são dimensionados de forma independente, seus espaços de endereço também podem ser planejados separadamente. Como as sub-redes dos pods podem ser configuradas de acordo com a granularidade de um pool de nós, você sempre pode adicionar /uma nova sub-rede quando adiciona um pool de nós. O pods do sistema em um cluster/pool de nós também recebem IPs da sub-rede de pods, portanto, esse comportamento precisa ser considerado.

Os IPs são alocados a nós em lotes de 16. A alocação de IP da sub-rede do pod deve ser planejada com um mínimo de 16 IPs por nó no cluster; os nós solicitarão 16 IPs na inicialização e outro lote de 16 sempre que houver <8 IPs não alocados em seu lote.

O planejamento de IPs para os serviços Kubernetes e a ponte Docker permanecem inalterados.

Máximo de pods por nó em um cluster com alocação dinâmica de IPs e suporte de sub-rede avançado

Os valores de pods por nó ao usar o CNI do Azure com alocação dinâmica de IPs diferem ligeiramente em relação ao comportamento tradicional de CNI:

CNI Padrão Configurável na implantação
CNI tradicional do Azure 30 Sim (até 250)
CNI do Azure com alocação dinâmica de IPs 250 Sim (até 250)

Todas as outras orientações relacionadas à configuração do máximo de pods por nós permanecem as mesmas.

Parâmetros de implantação

Os parâmetros de implantação para configurar a rede básica de CNI do Azure no AKS são válidos, com duas exceções:

  • O parâmetro subnet agora se refere à sub-rede relacionada aos nós do cluster.
  • Uma parâmetro adicional pod subnet é usado para especificar a sub-rede cujos endereços IP serão alocados dinamicamente para pods.

Configurar a rede com a alocação dinâmica de IPs e suporte de sub-rede avançado – CLI do Azure

Usar a alocação dinâmica de IPs e o suporte de sub-rede avançado em seu cluster é semelhante a usar o método padrão para configurar um cluster do CNI do Azure. O exemplo a seguir orienta a criação de uma nova rede virtual com uma sub-rede para nós e uma sub-rede para pods e a criação de um cluster que usa o CNI do Azure com alocação dinâmica de IPs e suporte de sub-rede avançado. Certifique-se de substituir variáveis como $subscription com seus valores.

Crie uma rede virtual com duas sub-redes.

RESOURCE_GROUP_NAME="myResourceGroup"
VNET_NAME="myVirtualNetwork"
LOCATION="westcentralus"
SUBNET_NAME_1="nodesubnet"
SUBNET_NAME_2="podsubnet"

# Create the resource group
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

# Create our two subnet network 
az network vnet create --resource-group $RESOURCE_GROUP_NAME --location $LOCATION --name $VNET_NAME --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_1 --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_2 --address-prefixes 10.241.0.0/16 -o none 

Crie o cluster, referenciando a sub-rede do nó usando --vnet-subnet-id e a sub-rede do pod usando --pod-subnet-id e ativando o complemento de monitoramento.

CLUSTER_NAME="myAKSCluster"
SUBSCRIPTION="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --location $LOCATION \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_1 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_2 \
    --enable-addons monitoring

Adicionar pool de nós

Ao adicionar um pool de nós, faça referência à sub-rede de nós usando --vnet-subnet-id e a sub-rede de pods usando --pod-subnet-id. O exemplo a seguir cria duas novas sub-redes que são referenciadas na criação de um novo pool de nós:

SUBNET_NAME_3="node2subnet"
SUBNET_NAME_4="pod2subnet"
NODE_POOL_NAME="mynodepool"

az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_3 --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_4 --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --name $NODE_POOL_NAME \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_3 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_4 \
    --no-wait

Monitorar o uso da sub-rede IP

A CNI do Azure oferece a capacidade de monitorar o uso da sub-rede IP. Para habilitar o monitoramento de uso da sub-rede IP, siga as etapas abaixo:

Obter o arquivo YAML

  1. Baixe ou execute grep do arquivo chamado container-azm-ms-agentconfig.yaml do GitHub.

  2. Encontrar azure_subnet_ip_usage em integrações. Defina enabled como true.

  3. Salve o arquivo.

Obter as credenciais do AKS

Defina as variáveis para assinatura, grupo de recursos e cluster. Considere as seguintes opções como exemplos:

az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME

Aplicar a configuração

  1. Abra o terminal na pasta em que o arquivo container-azm-ms-agentconfig.yaml baixado está salvo.

  2. Primeiro, aplique a configuração usando o comando: kubectl apply -f container-azm-ms-agentconfig.yaml

  3. Esse procedimento reiniciará o pod e, após cinco a dez minutos, as métricas ficarão visíveis.

  4. Para ver as métricas no cluster, acesse Pastas de Trabalho na página do cluster no portal do Azure e localize a pasta de trabalho chamada "Uso de IP da sub-rede". A saída será como a seguinte:

    A diagram of the Azure portal's workbook blade is shown, and metrics for an AKS cluster's subnet IP usage are displayed.

Perguntas frequentes sobre alocação dinâmica de IPs e suporte de sub-rede avançado

  • Posso atribuir várias sub-redes de pods a um cluster/pool de nós?

    Somente uma sub-rede pode ser atribuída a um cluster ou pool de nós. No entanto, vários clusters ou pools de nós podem compartilhar uma única sub-rede.

  • Posso atribuir sub-redes de pods de uma VNet diferente?

    Não, a sub-rede de pods deve ser da mesma VNet que o cluster.

  • Alguns pools de nós podem usar o CNI tradicional enquanto outros usam o novo CNI?

    O cluster inteiro deve usar apenas um tipo de CNI.

Próximas etapas

Saiba mais sobre a rede no AKS nos seguintes artigos: