Visão geral a rede CNI do Azure no AKS (Serviço de Kubernetes do Azure)

Por padrão, os clusters do AKS usam o kubenet e criam uma rede virtual e uma sub-rede. Com o kubenet, os nós obtém um endereço IP de uma sub-rede da rede virtual. Em seguida, o NAT (conversão de endereços de rede) é configurado nos nós e os pods recebem um endereço IP "oculto" por trás do IP do nó. Essa abordagem reduz o número de endereços IP que você precisa reservar no espaço de rede para uso dos pods.

Com a CNI (Interface de Rede de Contêiner) do Azure, cada pod obtém um endereço IP da sub-rede e pode ser acessado diretamente. Os sistemas na mesma rede virtual que o cluster do AKS veem o IP do pod como o endereço de origem para qualquer tráfego vindo do pod. Os sistemas fora da rede virtual do cluster do AKS veem o IP do nó como o endereço de origem de qualquer tráfego vindo do pod. Esses endereços IP devem ser exclusivos em todo o seu espaço de rede e devem ser planejados com antecedência. Cada nó tem um parâmetro de configuração para o número máximo de pods aos quais ele dá suporte. O número equivalente de endereços IP por nó é então reservado com antecedência para esse nó. Essa abordagem exige mais planejamento e, muitas vezes, leva à exaustão do endereço IP ou à necessidade de recriar os clusters em uma sub-rede maior conforme as demandas de aplicativo aumentam.

Observação

Esse artigo apresenta apenas a CNI tradicional do Azure. Para Sobreposição de CNI do Azure, VNet CNI do Azure para alocação de IP dinâmico e VNet CNI do Azure – alocação de bloco estático (versão prévia). Em vez disso, consulte a documentação deles.

Pré-requisitos

  • A rede virtual do cluster do AKS deve permitir conectividade com a Internet de saída.

  • Os clusters do AKS não podem usar 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16 ou 192.0.2.0/24 para o intervalo de endereços do serviço do Kubernetes, o intervalo de endereços do pod ou o intervalo de endereços da rede virtual do cluster.

  • A identidade do cluster usada pelo cluster do AKS precisa ter, pelo menos, permissões de Colaborador de Rede na sub-rede da rede virtual. Se você quiser definir uma função personalizada em vez de usar a função de Colaborador de Rede interna, as seguintes permissões serão necessárias:

    • Microsoft.Network/virtualNetworks/subnets/join/action

    • Microsoft.Network/virtualNetworks/subnets/read

    • Microsoft.Authorization/roleAssignments/write

  • A sub-rede atribuída ao pool de nós do AKS não pode ser uma sub-rede delegada.

  • O AKS não aplica NSGs (grupos de segurança de rede) à sua sub-rede e não muda nenhum dos NSGs associados a essa sub-rede. Se você fornecer sua própria sub-rede e adicionar os NSGs associados a ela, verifique se as regras de segurança nos NSGs permitem o tráfego dentro do intervalo de CIDR do nó. Para saber mais, confira Grupos de segurança de rede.

Planejar o endereçamento IP para o cluster

Os clusters configurados com a rede CNI do Azure exigem um planejamento adicional. O tamanho da rede virtual e da sub-rede deve acomodar o número de pods que você planeja executar e o número de nós do cluster.

Endereços IP para os pods e os nós do cluster são atribuídos a partir da sub-rede especificada na rede virtual. Cada nó é configurado com um endereço IP primário. A CNI do Azure pré-configura 30 endereços IP extras por padrão. Esses endereços IP são atribuídos a pods agendados no nó. Quando você expandir o cluster, cada nó está configurado da mesma forma com endereços IP da sub-rede. Você também pode ver o máximo de pods por nó.

Importante

O número de endereços IP necessários deve incluir considerações para operações de atualização e dimensionamento. Ao definir o intervalo de endereços IP para dar suporte a apenas um número fixo de nós, você não poderá atualizar nem dimensionar o cluster.

  • Quando você atualiza seu cluster AKS, um novo nó é implantado no cluster. Serviços e cargas de trabalho começam a ser executados no novo nó e um nó mais antigo é removido do cluster. Esse processo de atualização contínua requer um mínimo de um bloco adicional de endereços IP a serem disponibilizados. Sua contagem de nós, em seguida, é n + 1.

    • Essa consideração é particularmente importante quando você usa pools de nós do Windows Server. Os nós do Windows Server no AKS não aplicam automaticamente as atualizações do Windows. Em vez disso, você executa uma atualização no pool de nós. Essa atualização implanta novos nós com a imagem mais recente e os patches de segurança do nó base do Windows Server 2019. Para obter mais informações sobre a atualização do pool de nós do Windows Server, consulte Fazer upgrade de um pool de nós no AKS.
  • Quando você dimensiona um cluster AKS, um novo nó é implantado no cluster. Serviços e cargas de trabalho começam a ser executados no novo nó. Seu intervalo de endereços IP precisa levar em consideração como você pode querer aumentar o número de nós e pods que seu cluster pode suportar. Um nó adicional para operações de atualização também deve ser incluído. Sua contagem de nós, em seguida, é n + number-of-additional-scaled-nodes-you-anticipate + 1.

Se você espera que seus nós executem o número máximo de pods, destruam e implantem os pods regularmente, também deve incluir alguns endereços IP adicionais por nó. Alguns segundos podem ser necessários para excluir um serviço e liberar seu endereço IP para que um novo serviço seja implantado e adquira o endereço. Esses endereços IP extras consideram essa possibilidade.

O plano de endereço IP de um cluster do AKS consiste em uma rede virtual, pelo menos uma sub-rede para nós e pods, e um intervalo de endereços de serviço do Kubernetes.

Intervalo de endereços/ recurso do Azure Limites e dimensionamento
Rede virtual A rede virtual do Azure pode ser tão grande quanto /8, mas é limitada a 65.536 endereços IP configurados. Considere todas as suas necessidades de rede, incluindo a comunicação com serviços em outras redes virtuais, antes de configurar seu espaço de endereço. Por exemplo, caso configure um espaço de endereço muito grande, poderá encontrar problemas de sobreposição de outros espaços de endereço na rede.
Sub-rede Deve ser grande o suficiente para acomodar os nós, pods e todos os recursos do Kubernetes e do Azure que possam ser provisionados no cluster. Por exemplo, se você implantar um Azure Load Balancer interno, os IPs de front-end serão alocados da sub-rede do cluster, e não IPs públicos. O tamanho da sub-rede também deve levar em conta as operações de atualização ou futuras necessidades de dimensionamento.

Use a seguinte equação para calcular o tamanho mínimo da sub-rede, incluindo um nó adicional para as operações de atualização: (number of nodes + 1) + ((number of nodes + 1) * maximum pods per node that you configure)

Exemplo de um cluster de 50 nós: (51) + (51 * 30 (default)) = 1,581 (/21 ou maior)

Exemplo de um cluster de 50 nós que também inclui provisionamento para escalar verticalmente mais 10 nós: (61) + (61 * 30 (default)) = 1,891 (/21 ou maior)

Se você não especificar um número máximo de pods por nó durante a criação do cluster, o número máximo de pods por nó será definido como 30. O número mínimo de endereços IP necessário tem base nesse valor. Se você calcular seus requisitos mínimos de endereço IP com um valor máximo diferente, consulte Máximo de pods por nó para definir esse valor ao implantar o cluster.

Intervalo de endereços de serviço do Kubernetes Qualquer elemento de rede ligado ou conectado a essa rede virtual não deve usar esse intervalo. O endereço de serviço CIDR deve ser menor do que /12. Você pode reutilizar esse intervalo em diferentes clusters do AKS.
Endereço IP do serviço DNS do Kubernetes Endereços IP dentro do intervalo de endereços de serviço do Kubernetes usados pela descoberta do serviço de cluster. Não use o primeiro endereço IP no intervalo de endereços. O primeiro endereço no seu intervalo de sub-rede é usado para o endereço kubernetes.default.svc.cluster.local.

Máximo de pods por nó

O número máximo de pods por nó em um cluster do AKS é 250. O número máximo padrão de pods por nó varia entre o kubenet e a rede CNI do Azure, bem como o método de implantação do cluster.

Método de implantação Padrão do Kubenet Padrão da CNI do Azure Configurável na implantação
CLI do Azure 110 30 Sim (até 250)
Modelo do Resource Manager 110 30 Sim (até 250)
Portal 110 110 (configurável na guia Pools de Nós) Sim (até 250)

Configurar o máximo de pods por nó para novos clusters

Configure o número máximo de pods por nó no momento da implantação do cluster ou conforme você adiciona novos pools de nós. O valor máximo de pods por nó pode ser definido como até 250.

Caso não especifique maxPods ao criar novos pools de nós, você receberá um valor padrão de 30 para o CNI do Azure.

Um valor mínimo para o máximo de pods por nó é imposto para garantir o espaço dos pods do sistema que são críticos para a integridade do cluster. O valor mínimo que pode ser definido para o máximo de pods por nó é 10 se e somente se a configuração de cada pool de nós tiver espaço para um mínimo de 30 pods. Por exemplo, definir o máximo de pods por nó para o mínimo de 10 exige que cada pool de nós individual tenha um mínimo de três nós. Esse requisito se aplica a cada novo pool de nós criado também, portanto, se 10 for definido como o máximo de pods por nó, cada pool de nós subsequente adicionado deverá ter, pelo menos, três nós.

Rede Mínimo Máximo
CNI do Azure 10 250
Kubenet 10 250

Observação

O valor mínimo na tabela anterior é estritamente imposto pelo serviço do AKS. Não é possível definir um valor para maxPods menor do que o mínimo mostrado, pois isso pode impedir que o cluster seja iniciado.

  • CLI do Azure: especifica o argumento --max-pods ao implantar um cluster com o comando az aks create. O valor máximo é 250.
  • Modelo do Resource Manager: especifica a propriedade maxPods no objeto ManagedClusterAgentPoolProfile ao implantar um cluster com um modelo do Resource Manager. O valor máximo é 250.
  • Portal do Azure: altere o campo Max pods per node nas configurações do pool de nós ao criar um cluster ou adicionar um novo pool de nós.

Configurar o máximo de pods por nó para clusters existentes

A configuração de maxPods por nó pode ser definida ao criar um novo pool de nós. Caso precise aumentar a configuração de maxPods em um cluster existente, adicione um novo pool de nós com a nova contagem de maxPods desejada. Depois de migrar o pods para o novo pool, exclua o pool mais antigo. Para excluir qualquer pool mais antigo em um cluster, verifique se você está definindo os modos do pool de nós conforme o documento sobre pools de nós do sistema.

Parâmetros de implantação

Quando você cria um cluster do AKS, os seguintes parâmetros são configuráveis para a rede CNI do Azure:

Rede virtual: a rede virtual na qual você deseja implantar o cluster do Kubernetes. Se você quiser criar uma nova rede virtual para o cluster, selecione Criar nova e siga as etapas na seção Criar rede virtual. Se você quiser selecionar uma rede virtual existente, verifique se ela está no mesmo local e na mesma assinatura do Azure que o cluster do Kubernetes. Para obter mais informações sobre limites e cotas para uma rede virtual do Azure, consulte Limites, cotas e restrições de assinatura e serviço do Azure.

Sub-rede: a sub-rede dentro da rede virtual em que você quer implantar o cluster. Se você quiser criar uma nova sub-rede na rede virtual para o cluster, selecione Criar nova e siga as etapas na seção Criar sub-rede. Para conectividade híbrida, o intervalo de endereços não deve se sobrepor a nenhuma outra rede virtual em seu ambiente.

Plug-in de rede do Azure: quando o plug-in de rede do Azure é usado, o serviço LoadBalancer interno com "externalTrafficPolicy=Local" não pode ser acessado por meio de VMs com um IP em clusterCIDR que não pertence ao cluster do AKS.

Intervalo de endereços do serviço do Kubernetes: este parâmetro é o conjunto de IPs virtuais que o Kubernetes atribui aos serviços internos no seu cluster. Esse intervalo não poderá ser atualizado depois que você criar o cluster. Você pode usar qualquer intervalo de endereço particular que atenda aos seguintes requisitos:

  • Não deve estar dentro do intervalo de endereços IP da rede virtual do cluster
  • Não deve se sobrepor a nenhuma outra rede virtual com a qual a rede virtual do cluster está emparelhada
  • Não deve sobrepor IPs locais
  • Não deve estar dentro dos intervalos 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16 ou 192.0.2.0/24

Embora seja tecnicamente possível especificar um intervalo de endereços de serviço na mesma rede virtual do cluster, isso não é recomendado. Um comportamento imprevisível pode ocorrer se forem usados intervalos de IP sobrepostos. Para mais informações, consulte a seção FAQ deste artigo. Para obter mais informações sobre os serviços do Kubernetes, consulte Serviços na documentação do Kubernetes.

Endereço IP do serviço DNS do Kubernetes: O endereço IP para o serviço DNS do cluster. Esse endereço deve estar dentro do intervalo de endereços do serviço Kubernetes. Não use o primeiro endereço IP no intervalo de endereços. O primeiro endereço no seu intervalo de sub-rede é usado para o endereço kubernetes.default.svc.cluster.local.

Perguntas frequentes

  • Posso implantar VMs na sub-rede do cluster?

    Sim. No entanto, para a CNI do Azure para alocação de IP dinâmica, as VMs não podem ser implantadas na sub-rede do pod.

  • Qual IP de origem os sistemas externos veem em um tráfego originado em um pod com o CNI do Azure habilitado?

    Os sistemas na mesma rede virtual que o cluster do AKS veem o IP do pod como o endereço de origem para qualquer tráfego vindo do pod. Os sistemas fora da rede virtual do cluster do AKS veem o IP do nó como o endereço de origem de qualquer tráfego vindo do pod.

    No entanto, para a CNI do Azure para alocação de IP dinâmica, não importa se a conexão está dentro da mesma rede virtual ou redes virtuais cruzadas, o IP do pod é sempre o endereço de origem para qualquer tráfego do pod. Isso ocorre porque a CNI do Azure para alocação de IP dinâmica implementa a infraestrutura de Rede de Contêiner do Microsoft Azure, que oferece experiência de ponta a ponta. Portanto, elimina o uso de ip-masq-agent, que ainda é usado pela CNI tradicional do Azure.

  • Posso configurar políticas de rede por pod?

    Sim, a política de rede do Kubernetes está disponível no AKS. Para obter mais informações, consulte Proteger o tráfego entre os pods usando as políticas de rede no AKS.

  • O número máximo de pods implantados em um nó é configurável?

    Sim, ao implantar um cluster com a CLI do Azure ou um modelo do Resource Manager. Consulte Máximo de pods por nó.

    Não é possível alterar o número máximo de pods por nó em um cluster existente.

  • Como configurar propriedades adicionais para a sub-rede que criei durante a criação do cluster AKS? Por exemplo, pontos de extremidade do serviço.

    A lista completa de propriedades para a rede virtual e as sub-redes que você cria durante a criação do cluster do AKS pode ser configurada na página de configuração de rede virtual padrão no portal do Azure.

  • Eu posso usar uma sub-rede diferente na rede virtual do cluster para o intervalo de endereços de serviço do Kubernetes?

    Não é recomendado, mas essa configuração é possível. O intervalo de endereços do serviço é um conjunto de VIPs (IPs virtuais) que o Kubernetes atribui aos serviços internos no cluster. O Azure Networking não tem visibilidade do intervalo de IP de serviço do cluster do Kubernetes. A falta de visibilidade no intervalo de endereços de serviço do cluster pode levar a problemas. É possível criar posteriormente uma nova sub-rede na rede virtual do cluster que se sobrepõe ao intervalo de endereços de serviço. Se tal sobreposição ocorrer, o Kubernetes poderá atribuir um serviço a um IP que já esteja em uso por outro recurso na sub-rede, causando comportamento ou falhas imprevisíveis. Ao garantir que você use um intervalo de endereços fora da rede virtual do cluster, é possível evitar esse risco de sobreposição.

Próxima etapa

Saiba mais sobre a rede no AKS nos seguintes artigos: