Configurar a Rede da CNI do Azure para uma alocação estática de blocos de CIDR e suporte aprimorado a sub-redes no Serviço de Kubernetes do Azure (AKS)
Uma limitação da Alocação Dinâmica de IP da CNI do Azure é a escalabilidade do tamanho da sub-rede de pods para além de uma sub-rede /16. Mesmo com uma sub-rede grande, os clusters grandes podem continuar limitados a 65 mil pods devido a um limite de mapeamento de endereços do Azure. A nova funcionalidade de alocação estática de blocos na CNI do Azure resolve esse problema atribuindo blocos de CIDR aos Nós em vez de a IPs individuais.
Ele oferece os seguintes benefícios:
- Melhor escalabilidade de IP: os blocos de CIDR são alocados estaticamente para os nós de cluster e estão presentes por todo o tempo de vida do nó, em oposição à alocação dinâmica tradicional de IPs individuais com a CNI tradicional. Isso permite o roteamento com base em blocos de CIDR e ajuda a ampliar o limite de clusters para até 1 milhão de pods, em vez dos tradicionais 65 mil pods por cluster. Sua Rede Virtual do Azure precisa ser grande o suficiente para acomodar a escala do seu cluster.
- Flexibilidade: sub-redes de nós e de pods podem ser ampliadas 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 são atribuídos a IPs de rede virtual, os pods têm conectividade direta com outros recursos e pods de clusters na VNet.
- 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: Cilium, NPM do Azure e Calico funcionam com essa nova solução.
Este artigo mostra como usar a Rede da CNI do Azure para a alocação estática de CIDRs e o suporte aprimorado à sub-rede no AKS.
Pré-requisitos
Observação
Ao usar a alocação estática de blocos de CIDRs, a exposição de um aplicativo como um Serviço de Link Privado usando um Serviço de Balanceador de Carga do Kubernetes não tem suporte.
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.
Versão
2.37.0
da CLI do Azure ou posterior com a extensão aks-preview da versão "2.0.0b2" ou posteriorSe 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:Registre o sinalizador de recurso no nível da assinatura para a sua assinatura: "Microsoft.ContainerService/AzureVnetScalePreview"
az aks enable-addons --addons monitoring --name <cluster-name> --resource-group <resource-group-name>
Limitações
Abaixo estão algumas das limitações do uso da Alocação Estática de Blocos da CNI do Azure:
- A versão mínima do Kubernetes necessária é 1.28
- O tamanho máximo de sub-rede com suporte é x.x.x.x/12 — aprox. 1 milhão de IPs
- Somente um único modo de operação pode ser usado para cada sub-rede. Se usar o modo de Alocação Estática de Blocos, uma sub-rede não poderá usar o modo de Alocação Dinâmica de IPs em um cluster ou pool de nós diferente com a mesma sub-rede e vice-versa.
- Tem suporte apenas em novos clusters ou ao adicionar pools de nós com uma sub-rede diferente aos clusters existentes. A migração ou atualização de clusters ou pools de nós existentes não tem suporte.
- Em todos os blocos de CIDR atribuídos a um nó no pool de nós, um IP será selecionado como o IP primário do nó. Portanto, os administradores de rede que selecionam o valor
--max-pods
devem tentar usar o cálculo abaixo para atender melhor às suas necessidades e obter um uso ideal de IPs na sub-rede:
max_pods
=(N * 16) - 1
em que N é qualquer inteiro positivo e N > 0
Disponibilidade de região
Esse recurso não está disponível nas seguintes regiões:
- Sul dos EUA
- Leste dos EUA 2
- Oeste dos EUA
- Oeste dos EUA 2
planejar o endereçamento IP
Planejar seu endereçamento IP é mais flexível e mais granular. 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.
Nesse cenário, blocos de CIDR de /28 (16 IPs) são alocados para os nós com base na sua configuração "--max-pod" para o seu pool de nós, que define o número máximo de pods por nó. 1 IP é reservado em cada nó entre todos os IPs disponíveis nesse nó para fins internos.
Portanto, ao determinar e planejar seus IPs, é essencial definir sua configuração "--max-pods". Confira abaixo a melhor maneira de calculá-la: max_pods_per_node = (16 * N) - 1
onde N é qualquer número inteiro positivo maior que 0
Valores ideais sem desperdício de IPs requerem que o valor máximo de pods esteja em conformidade com a expressão acima.
- Exemplo 1: max_pods = 30, Blocos CIDR alocados por nó = 2, Total de IPs disponíveis para pods = (16 * 2) - 1 = 32 - 1 = 31, Desperdício de IP por nó = 31 - 30 = 1 [Baixo desperdício – Caso Aceitável]
- Exemplo 2: max_pods = 31, Blocos CIDR alocados por nó = 2, Total de IPs disponíveis para pods = (16 * 2) - 1 = 32 - 1 = 31, Desperdício de IP por nó = 31 - 31 = 0 [Caso Ideal]
- Exemplo 3: max_pods = 32, Blocos CIDR alocados por nó = 3, Total de IPs disponíveis para pods = (16 * 3) - 1 = 48 - 1 = 47, Desperdício de IP por nó = 47 - 32 = 15 [Alto Desperdício – Caso Não Recomendado]
O planejamento de IPs para serviços do Kubernetes permanece inalterado.
Observação
Verifique se a sua VNet tem um espaço de endereços contíguos suficientemente grande para dar suporte à escala do seu cluster.
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 id de sub-rede de vnet agora faz referência à sub-rede relacionada aos nós do cluster.
- O parâmetro ID de sub-rede de pods é usado para especificar a sub-rede cujos endereços IP serão alocados estaticamente ou dinamicamente para os pods no pool de nós.
- O parâmetro modo de alocação de IP para pods especifica se deve ser usada a alocação estática ou dinâmica individual de blocos.
Antes de começar
- Se estiver usando a CLI do Azure, você precisará da extensão
aks-preview
. Confira Instalar a extensão da CLI do Azureaks-preview
. - Se estiver usando o ARM ou a API REST, a versão da API do AKS precisa ser 2024-01-02-preview ou posterior.
Instale a extensão aks-preview
da CLI do Azure
Instale a extensão
aks-preview
usando o comandoaz extension add
.az extension add --name aks-preview
Atualize para a última versão da extensão usando o comando
az extension update
. A extensão deve ter uma versão "2.0..0b2" ou posterioraz extension update --name aks-preview
Registrar o sinalizador de recurso AzureVnetScalePreview
Registre o sinalizador de recurso
AzureVnetScalePreview
usando o comandoaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "AzureVnetScalePreview"
Demora alguns minutos para o status exibir Registrado.
Verifique o status do registro usando o comando
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "AzureVnetScalePreview"
Quando o status reflete Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando
az provider register
.az provider register --namespace Microsoft.ContainerService
Configurar a rede com alocação estática de blocos de CIDR e suporte aprimorado à sub-rede: CLI do Azure
O uso da alocação estática de blocos de CIDR no seu cluster é semelhante ao método padrão para configurar uma CNI do Azure de cluster para a alocação dinâmica de IP. O exemplo a seguir descreve 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 a CNI do Azure com alocação estática de blocos de CIDR. Certifique-se de substituir as variáveis como $subscription
por seus próprios valores.
Crie uma rede virtual com duas sub-redes.
resourceGroup="myResourceGroup"
vnet="myVirtualNetwork"
location="myRegion"
# Create the resource group
az group create --name $resourceGroup --location $location
# Create our two subnet network
az network vnet create --resource-group $resourceGroup --location $location --name $vnet --address-prefixes 10.0.0.0/8 -o none
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnet --name nodesubnet --address-prefixes 10.240.0.0/16 -o none
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnet --name podsubnet --address-prefixes 10.40.0.0/13 -o none
Crie o cluster fazendo referência à sub-rede de nós usando --vnet-subnet-id
, a sub-rede de pods usando --pod-subnet-id
, --pod-ip-allocation-mode
para definir o modo de alocação de IP e habilite o complemento de monitoramento.
clusterName="myAKSCluster"
subscription="aaaaaaa-aaaaa-aaaaaa-aaaa"
az aks create \
--name $clusterName \
--resource-group $resourceGroup \
--location $location \
--max-pods 250 \
--node-count 2 \
--network-plugin azure \
--pod-ip-allocation-mode StaticBlock \
--vnet-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/nodesubnet \
--pod-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/podsubnet \
--enable-addons monitoring \
--generate-ssh-keys
Adicionar pool de nós
Ao adicionar o pool de nós, faça referência à sub-rede de nós usando --vnet-subnet-id
, à sub-rede de pods usando --pod-subnet-id
e ao modo de alocação usando "--pod-ip-allocation-mode". O exemplo a seguir cria duas novas sub-redes que são referenciadas na criação de um novo pool de nós:
az network vnet subnet create -g $resourceGroup --vnet-name $vnet --name node2subnet --address-prefixes 10.242.0.0/16 -o none
az network vnet subnet create -g $resourceGroup --vnet-name $vnet --name pod2subnet --address-prefixes 10.243.0.0/16 -o none
az aks nodepool add --cluster-name $clusterName -g $resourceGroup -n newnodepool \
--max-pods 250 \
--node-count 2 \
--vnet-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/node2subnet \
--pod-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/pod2subnet \
--pod-ip-allocation-mode StaticBlock \
--no-wait
Alocação estática de blocos de CIDR e perguntas frequentes sobre o suporte à sub-rede aprimorado
Posso atribuir várias sub-redes de pods a um cluster?
Várias sub-redes podem ser atribuídas a um cluster, mas apenas uma sub-rede pode ser atribuída a cada pool de nós. Pools de nós diferentes no mesmo cluster ou em um cluster diferente podem compartilhar a mesma 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.
É possível que alguns pools de nós em um cluster usem a Alocação Dinâmica de IP enquanto outros usam a nova Alocação Estática de Blocos?
Sim, pools de nós diferentes podem usar modos de alocação diferentes. No entanto, após ser usada em um modo de alocação, uma sub-rede só pode ser usada no mesmo modo de alocação em todos os pools de nós associados.
Próximas etapas
Saiba mais sobre a rede no AKS nos seguintes artigos:
Azure Kubernetes Service