Adicionar sub-rede para um nodePool do AKS usando plugin Azure CNI
Published Jul 14 2023 05:00 AM 3,419 Views
Microsoft

O Plugin de rede CNI usado nos ambientes produtivos requer um bom planejamento para os clusters do Azure Kubernetes Services (AKS) para evitar que a exaustão de endereços IP fornecidos pela sub-rede do cluster devido ao crescimento do ambiente, tendo a necessidade de recriar o cluster para atender a essa demanda.

Este artigo irá passar sobre este cenário que encontramos em muitos ambientes produtivos, com a possibilidade de adicionar um novo bloco de endereçamento IP da rede virtual do AKS e dedicá-la para um conjunto de nodepool.

 

Introdução

Um aspecto importante na arquitetura de um cluster do Azure Kubernetes Services (AKS) é relacionado ao seu planejamento de conectividade de rede e segurança. Dentro deste planejamento a escolha do modelo de rede entre CNI ou Kubelet é um fator essencial para a administração do cluster.

Uma breve explicação entre os dois modos de rede no AKS:

 

Azure CNI

Plugin indicado para ambientes produtivos, requer um planejamento adequado, pois requer uma rede virtual e sub-rede para alocações dos nodes e pods do cluster AKS.

Pontos importantes sobre a CNI:

  • Cada node e pod recebe um endereço IP na rede virtual do Azure, sem necessidade de roteamento extra para se comunicar com outros serviços ou recursos.
  • A sub-rede deve ser grande o suficiente para fornecer endereços IP para cada node, pods e garantir nodes adicionais para escala e upgrade do cluster.
  • Cada node tem um parâmetro de configuração para o número máximo de pods aos quais ele dá suporte, portanto a quantidade de endereçamento IP é reservada antecipadamente na sub-rede para uso no cluster.

Importante!

O uso do plugin CNI Azure requer planejamento para não levar à exaustão de endereço IP ou à necessidade de recriar o cluster para uma nova sub-rede.

 

Azure Kubelet

Opção de rede usando kubelet é considerada modelo básico padrão para clusters do AKS

Pontos importantes:

  • Os Nodes recebem endereçamento IP da sub-rede virtual do Azure.
  • Os Pods recebem endereçamento IP de outro bloco de endereço diferente da rede virtual.
  • Tráfego entre Pods e Nodes usando roteamento extra através de UDR pode reduzir o desempenho da rede.
  • NAT é configurado para que os Pods possam alcançar recursos na rede virtual.
  • Conexões com as redes locais existentes ou entre peering com outras redes virtuais podem ser tornar complexas.

Quando considerar o uso do plugin kubelet:

  • Workloads pequenos, ambientes de teste ou desenvolvimento.
  • Sites simples com baixo tráfego.

Cenário

Temos um cluster AKS com dois nodepool sendo um de system e outro de user conforme a ilustração abaixo.

Para saber mais sobre a diferença entre node system e user system recomendo a leitura da documentação Use system node pools in Azure Kubernetes Service (AKS) - Azure Kubernetes Service | Microsoft Learn

fabiodasilva_1-1687526480437.png

 

O cluster está alocado em uma rede virtual com o bloco de endereço 10.200.0.0/23 e uma única sub-rede no qual está ocupando todo o endereçamento IP.

fabiodasilva_2-1687526480444.png

 

Adicionar um novo nodepool para uma sub-rede dedicada

Uma aplicação dentro do AKS pode exigir que os nodes de um cluster sejam divididos em nodepools separados para isolamento lógico. Essa separação também pode se beneficiar com o suporte de sub-redes dedicadas a cada nodepool o que também atende a necessidade de maior alocação de endereço IP usando CNI.

Primeira Etapa:

Adicionar novo bloco de endereço IP na rede virtual e criar a sub-rede correspondente.

 

fabiodasilva_3-1687526602447.png

 

fabiodasilva_4-1687526602455.png

 

Segunda etapa:

Iremos usar a CLI para adição do novo nodepool na sub-rede SNT-AKS-2

Importante!

Valide a versão do AZ CLI está na versão 2.35.0 ou acima

 

Encontrar o ID da Subnet

 

# az network vnet subnet show -g AKS-PRD-BR -n SNT-AKS-2  --vnet-name VNET-AKS-PRD-BR
{
  "addressPrefix": "10.100.0.0/24",
  "addressPrefixes": null,
  "applicationGatewayIpConfigurations": null,
  "delegations": [],
  "etag": "W/\"6c3026f7-0a21-4fd6-af97-d9eb41c1ef3b\"",
  "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/AKS-PRD-BR/providers/Microsoft.Network/virtualNetworks/VNET-AKS-PRD-BR/subnets/SNT-AKS-2",
  "ipAllocations": null,
  "ipConfigurationProfiles": null,
  "ipConfigurations": null,

 

 

A saída do comando copie a linha correspondente ao seu SubnetID

 

Verificar os nodes do cluster

 

# kubectl get node -o wide
NAME                                STATUS   ROLES   AGE   VERSION   INTERNAL-IP   EXTERNAL-IP
aks-agentpool-41582112-vmss000000   Ready    agent   45m    v1.24.9    10.200.0.53
aks-prdnode01-41582112-vmss000000   Ready    agent   45m   v1.24.9   10.200.0.4

 

Na saída do comando visualizamos os nodes "agentpool" e "prdnode01" recebendo endereçamento IP do bloco 10.200.0.0/23

 

Adicionar nodepool prdnode02 na sub-rede SNT-AKS-2

Como adicionados um novo bloco de endereço IP na rede virtual devemos atualizar o cluster com o comando "az aks update -g <resourceGroup> -n <clusterName>" sem argumentos opcionais. Esse comando executará uma operação de atualização sem fazer nenhuma alteração.

Para mais informações veja a documentação Use multiple node pools in Azure Kubernetes Service (AKS) - Azure Kubernetes Service | Microsoft Lea...

 

 

az aks update -g AKS-PRD-BR -n aks-prd-br-01

 

 

Após execução do comando az aks update, execute o bloco de comandos abaixo para adicionar o novo nodepool na sub-rede dedicada.

 

az aks nodepool add \
    --resource-group AKS-PRD-BR \
    --cluster-name aks-prd-br-01 \
    --name prdnode02 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/AKS-PRD-BR/providers/Microsoft.Network/virtualNetworks/VNET-AKS-PRD-BR/subnets/SNT-AKS-2

 

 

Após a execução do comando podemos visualizar novamente os nodes do cluster AKS.

 

kubectl get nodes -o wide
NAME                                STATUS   ROLES   AGE     VERSION   INTERNAL-IP   EXTERNAL-IP
aks-agentpool-41582112-vmss000000   Ready    agent   83m     v1.24.9   10.200.0.53
aks-prdnode01-41582112-vmss000000   Ready    agent   83m     v1.24.9   10.200.0.4
aks-prdnode02-14816076-vmss000000   Ready    agent   3m31s   v1.24.9   10.100.0.4
aks-prdnode02-14816076-vmss000001   Ready    agent   3m34s   v1.24.9   10.100.0.33

 

 

Adicionados um novo nodepool "prdnode02" com duas instancias e visualizamos que estes novos nodes recebem endereço IP da sub-rede dedicada 10.100.0.0/24.

 

Verificando as informações pelo portal.

fabiodasilva_5-1687527177969.png

 

Tela do Azure mostrando o novo nodepool criado.

fabiodasilva_6-1687527177981.png

 

Tela do Azure com as propriedades do novo nodepool, visualizamos em qual sub-rede os nodes estão associados.

 

Conclusão

Neste artigo vimos como podemos adicionar um novo nodepool de um cluster do AKS em uma sub-rede dedicada em cenários nos quais os clientes precisam isolamento lógico dos nodes em sub-redes separadas ou resolver problemas de exaustão de endereçamento IP sem a necessidade de recriar o cluster.

Atualização do diagrama com a adição do novo nodepool em uma subre-rede dedicada.

fabiodasilva_7-1687527178007.png

 

Referências

Use multiple node pools in Azure Kubernetes Service (AKS) - Azure Kubernetes Service | Microsoft Lea...

Concepts - Networking in Azure Kubernetes Services (AKS) - Azure Kubernetes Service | Microsoft Lear...

Configure Azure CNI networking in Azure Kubernetes Service (AKS) - Azure Kubernetes Service | Micros...

Best practices for network resources in Azure Kubernetes Service (AKS) - Azure Kubernetes Service | ...

 

Co-Authors
Version history
Last update:
‎Jul 14 2023 06:55 AM
Updated by: