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

Uma desvantagem com a CNI tradicional é o esgotamento dos endereços IP do pod à medida que o cluster AKS cresce, o que resulta na necessidade de reconstruir todo o cluster em uma sub-rede maior. O novo recurso de alocação de IP dinâmico no Azure CNI resolve esse problema alocando IPs de pod de uma sub-rede separada da sub-rede que hospeda o cluster AKS.

Oferece os seguintes benefícios:

  • Melhor utilização de IP: os IPs são alocados dinamicamente para Pods de cluster a partir da sub-rede do Pod. Isso leva a uma melhor utilização de IPs no cluster em comparação com a solução CNI tradicional, que faz alocação estática de IPs para cada nó.
  • Escalável e flexível: as sub-redes de nós e pods podem ser dimensionadas de forma independente. Uma única sub-rede de pod pode ser compartilhada entre vários pools de nós de um cluster ou entre vários clusters AKS implantados na mesma VNet. Você também pode configurar uma sub-rede de pod separada para um pool de nós.
  • Alto desempenho: Como os pods recebem IPs de rede virtual, eles têm conectividade direta com outros pods de cluster e recursos na rede virtual. A solução suporta clusters muito grandes sem qualquer degradação no desempenho.
  • Políticas de VNet separadas para pods: como os pods têm uma sub-rede separada, você pode configurar políticas de VNet separadas para eles que são diferentes das políticas de nó. Isso permite muitos cenários úteis, como permitir conectividade com a Internet apenas para pods e não para nós, corrigir o IP de origem para pod em um pool de nós usando um Gateway NAT do Azure e usar 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 o Calico funcionam com esta nova solução.

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

Pré-requisitos

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

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

  • O mecanismo AKS e os clusters DIY não são suportados.

  • Versão da CLI 2.37.0 do Azure 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 az aks enable-addons comando, conforme mostrado no exemplo a seguir:

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

Planear o endereçamento IP

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

Os IPs são alocados aos 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; nós solicitarão 16 IPs na inicialização e solicitarão outro lote de 16 sempre que houver <8 IPs não alocados em sua alocação.

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

Para exibir e verificar os recursos NodeNetworkConfiguration (NNC) responsáveis por essas alocações de IP, você pode executar o seguinte comando:

kubectl get nodenetworkconfigs -n kube-system -o wide

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

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

CNI Predefinido Configurável na implantação
CNI tradicional do Azure 30 Sim (até 250)
Azure CNI 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ó permanecem as mesmas.

Parâmetros de implantação

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

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

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

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

Crie a 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, fazendo referência à sub-rede do nó usando --vnet-subnet-id e à sub-rede do pod usando --pod-subnet-id e habilitando 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 \
    --generate-ssh-keys

Adicionando pool de nós

Ao adicionar o pool de nós, faça referência à sub-rede do nó usando --vnet-subnet-id e à sub-rede do pod usando --pod-subnet-ido . 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

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

Obter o arquivo YAML

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

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

  3. Guarde o ficheiro.

Obter as credenciais do AKS

Defina as variáveis para assinatura, grupo de recursos e cluster. Considere o seguinte 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 na qual o arquivo container-azm-ms-agentconfig.yaml baixado é salvo.
  2. Aplique a configuração usando o kubectl apply -f container-azm-ms-agentconfig.yaml comando. Isso reiniciará o pod e, após 5-10 minutos, as métricas estarão visíveis.
  3. Exiba as métricas no cluster navegando até 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.

Perguntas frequentes sobre alocação dinâmica de endereços IP e suporte de sub-rede aprimorado

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

    Apenas 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 Pod de uma VNet diferente?

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

  • Alguns pools de nós em um cluster podem usar a CNI tradicional, enquanto outros usam a nova CNI?

    Todo o cluster deve usar apenas um tipo de CNI.

Próximos passos

Saiba mais sobre redes no AKS nos seguintes artigos: