Configurar a rede de Sobreposição de CNI do Azure no AKS (Serviço de Kubernetes do Azure)
A CNI (Interface de Rede de Contêiner do Azure) tradicional atribui um endereço IP de VNet a cada pod. Ela atribui esse endereço IP a partir de um conjunto pré-reservado de IPs em cada nó ou de uma sub-rede separada reservada para pods. Essa abordagem requer o planejamento de endereço IP, e pode levar ao esgotamento de endereços, o que causa dificuldades de dimensionamento de clusters à medida que as demandas do aplicativo aumentam.
Com a Sobreposição de CNI do Azure, os nós de cluster são implantados em uma sub-rede do Azure Rede Virtual (VNet). Os pods recebem endereços IP de um CIDR privado logicamente diferente da VNet que hospeda os nós. O tráfego de pod e nó dentro do cluster usa uma rede de sobreposição. A NAT (Conversão de Endereços de Rede) usa o endereço IP do nó para acessar recursos fora do cluster. Essa solução poupa uma quantidade significativa de endereços IP de VNet e permite que você dimensione seu cluster para tamanhos grandes. Uma vantagem extra é que você pode reutilizar o CIDR privado em diferentes clusters do AKS, o que estende o espaço ip disponível para aplicativos em contêineres no AKS (Serviço de Kubernetes do Azure).
Visão geral da rede de sobreposição
Na rede de sobreposição, somente os nós de cluster do Kubernetes recebem IPs de sub-redes. Os pods recebem IPs de um CIDR privado fornecido no momento da criação do cluster. Cada nó recebe um espaço de endereço /24
extraído do mesmo CIDR. Nós extra criados quando você escala horizontalmente um cluster automaticamente, recebem espaços de endereço /24
do mesmo CIDR. A CNI do Azure atribui IPs a pods por meio desse espaço /24
.
Um domínio de roteamento separado é criado na pilha de Rede do Azure para o espaço CIDR privado do pod, que cria uma rede de sobreposição para comunicação direta entre pods. Não é necessário provisionar rotas personalizadas na sub-rede do cluster ou usar um método de encapsulamento para túnel de tráfego entre os pods, o que proporciona um desempenho de conectividade entre os pods equivalente ao das VMs em uma VNet. As cargas de trabalho em execução nos pods nem sequer sabem que a manipulação do endereço de rede está acontecendo.
A comunicação com pontos de extremidade fora do cluster, como VNets locais e emparelhadas, acontece usando o IP do nó por meio da NAT. A CNI do Azure converte o IP de origem (IP de sobreposição do pod) do tráfego para o endereço IP primário da VM, o que permite que a pilha de Rede do Azure encaminhe o tráfego para o destino. Pontos de extremidade fora do cluster não podem se conectar diretamente a um pod. Você precisa publicar o aplicativo do pod como um serviço de Load Balancer do Kubernetes para torná-lo acessível na VNet.
Você pode fornecer a conectividade de saída com a Internet para pods de sobreposição usando um Load Balancer de SKU Padrão ou um Gateway da NAT Gerenciado. Você também pode controlar o tráfego de saída direcionando-o para um firewall usando Rotas definidas pelo usuário na sub-rede do cluster.
Você pode configurar a conectividade de entrada com o cluster usando um controlador de entrada, como o Roteamento de aplicativo HTTP ou Nginx. Você não pode configurar a conectividade de entrada usando o Gateway de Aplicativo do Azure. Para detalhes, consulte Limitações com a Sobreposição de CNI do Azure.
Diferenças entre o Kubenet e a Sobreposição de CNI do Azure
Assim como a Sobreposição de CNI do Azure, o Kubenet atribui endereços IP a pods de um espaço de endereço logicamente diferente da VNet, mas ele tem dimensionamento e outras limitações. A tabela abaixo fornece uma comparação detalhada entre o Kubenet e a Sobreposição de CNI do Azure. Se você não quiser atribuir endereços IP de VNet a pods devido à escassez de IP, recomendamos usar a Sobreposição de CNI do Azure.
Área | Sobreposição de CNI do Azure | Kubenet |
---|---|---|
Escalar o cluster | 5.000 nós e 250 pods/nó | 400 nós e 250 pods/nó |
Configuração de rede | Simples - não são necessárias configurações adicionais para rede de pods | Complexo – Requer tabelas de rotas e UDRs na sub-rede de cluster para a rede do pod |
Desempenho da conectividade do pod | Desempenho em par com VMs em uma VNet | Salto extra acrescenta pequena latência |
Políticas de rede do Kubernetes | Políticas de Rede do Azure, Calico, Cilium | Calico |
Plataformas de SO com suporte | Linux e Windows Server 2022, 2019 | Apenas Linux |
Planejamento de endereço IP
- Nós de cluster: ao configurar o cluster do AKS, verifique se as sub-redes de VNet têm espaço suficiente para crescer para dimensionamento futuro. Você pode atribuir cada pool de nós a uma sub-rede dedicada. Uma sub-rede
/24
pode caber até 251 nós, pois os três primeiros endereços IP são reservados para tarefas de gerenciamento. - Pods: a solução de sobreposição atribui um espaço de endereço
/24
para pods em cada nó do CIDR privado especificado durante a criação do cluster. O tamanho/24
é fixo e não pode ser aumentado ou reduzido. Você pode executar até 250 pods em um nó. Ao planejar o espaço de endereço do pod, verifique se o CIDR privado é grande o suficiente para fornecer espaços de endereço/24
para novos nós a fim de dar suporte à futura expansão do cluster.- Ao planejar o espaço de endereço IP para pods, considere os seguintes fatores:
- O mesmo espaço do CIDR do pod pode ser usado em vários clusters do AKS independentes na mesma VNet.
- O espaço so CIDR do pod não deve se sobrepor ao intervalo de sub-rede do cluster.
- O espaço de CIDR do pod não deve se sobrepor a redes conectadas diretamente (como o peering de VNets, ExpressRoute ou VPN). Se tiver IPs de origem dentro do intervalo podCIDR, o tráfego externo precisará ser traduzido para um IP não sobreposto por meio de SNAT para se comunicar com o cluster.
- Ao planejar o espaço de endereço IP para pods, considere os seguintes fatores:
- Intervalo de endereços de serviço do Kubernetes: o tamanho do endereço de serviço do CIDR depende do número de serviços de cluster que você planeja criar. Deve ser menor que
/12
. Esse intervalo não deve se sobrepor ao intervalo do CIDR do pod, ao intervalo de sub-redes de cluster e ao intervalo de IP usado em VNets emparelhadas e redes locais. - Endereço IP do serviço de DNS do Kubernetes: Esse endereço IP está dentro do intervalo de endereços de serviço do Kubernetes que é usado pela descoberta do serviço de cluster. Não use o primeiro endereço IP no intervalo de endereços, pois esse endereço é usado para o endereço
kubernetes.default.svc.cluster.local
.
Grupos de segurança de rede
O tráfego de pod para pod com a Sobreposição de CNI do Azure não é encapsulado, e as regras de sub-rede do grupo de segurança de rede são aplicadas. Se o NSG de sub-rede contiver regras de negação que afetam o tráfego CIDR do pod, verifique se as regras a seguir estão em vigor para garantir a funcionalidade de cluster adequada (além de todos os requisitos de saída do AKS):
- Tráfego de CIDR de nó para CIDR de nó em todas as portas e protocolos
- Tráfego de CIDR de nó para CIDR de pod em todas as portas e protocolos (necessário para roteamento de tráfego de serviço)
- Tráfego de CIDR de pod para CIDR de pod em todas as portas e protocolos (necessário para pod para pod e pod para o tráfego de serviço, incluindo DNS)
O tráfego de um pod para qualquer destino fora do bloco CIDR do pod utiliza SNAT para definir o IP de origem para o IP do nó em que o pod é executado.
Se você quiser restringir o tráfego entre cargas de trabalho no cluster, recomendamos usar políticas de rede.
Máximo de pods por nó
Você pode configurar o número máximo de pods por nó no momento da criação do cluster ou ao adicionar um novo pool de nós. O padrão para a Sobreposição de CNI do Azure é 250. O valor máximo que você pode especificar na Sobreposição de CNI do Azure é 250 e o valor mínimo é 10. O valor máximo de pods por nó configurado durante a criação de um pool de nós se aplica apenas aos nós nesse pool de nós.
Como escolher um modelo de rede para usar
A CNI do Azure oferece duas opções de endereçamento IP para pods: a configuração tradicional que atribui IPs de VNet a pods e a Rede de sobreposição. A escolha de qual opção usar para seu cluster do AKS deve levar em conta o equilíbrio entre a flexibilidade e as necessidades de configuração avançada. As considerações a seguir ajudam a delinear quando cada modelo de rede pode ser o mais adequado.
Use a rede de sobreposição quando:
- Você quer escalar para um grande número de Pods, mas tem um espaço de endereços IP limitado na sua VNet.
- A maior parte da comunicação do pod estiver dentro do cluster.
- Você não precisa de recursos avançados do AKS, como nós virtuais.
Use a opção de VNet tradicional quando:
- Você tem espaço de endereço IP disponível.
- A maior parte da comunicação do pod destina-se a recursos fora do cluster.
- Os recursos fora do cluster precisam acessar pods diretamente.
- Você precisa de recursos avançados do AKS, como nós virtuais.
Limitações com a sobreposição de CNI do Azure
A Sobreposição da CNI do Azure tem as seguintes limitações:
- Você não pode usar o Gateway de Aplicativo como um AGIC (Controlador de Entrada) para um cluster de sobreposição.
- Você não pode usar o Gateway de Aplicativos para contêineres em um cluster de Sobreposição.
- Não há suporte para Conjuntos de Disponibilidade de Máquinas Virtuais (VMAS) para Sobreposição.
- Você não pode usar máquinas virtuais da série DCsv2 em pools de nós. Para atender aos requisitos de Computação Confidencial, considere usar VMs confidenciais da série DCasv5 ou DCadsv5.
- Caso você esteja usando sua própria sub-rede para implantar o cluster, os nomes da sub-rede, da VNET e do grupo de recursos que contém a VNET devem ter 63 caracteres ou menos. Isso vem do fato de que esses nomes serão usados como rótulos em nós de trabalho do AKS e, portanto, estão sujeitos a regras de sintaxe de rótulo do Kubernetes.
Configurar clusters de sobreposição
Observação
Você deve ter a CLI versão 2.48.0 ou posterior para usar o argumento --network-plugin-mode
. Para o Windows, você deve ter a extensão mais recente da CLI do Azure aks-preview instalada e pode seguir as instruções abaixo.
Crie um cluster com a Sobreposição de CNI do Azure usando o comando az aks create
. Use o argumento --network-plugin-mode
para especificar um cluster de sobreposição. Se o CIDR do pod não for especificado, o AKS atribuirá um espaço padrão: viz. 10.244.0.0/16
.
clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"
az aks create \
--name $clusterName \
--resource-group $resourceGroup \
--location $location \
--network-plugin azure \
--network-plugin-mode overlay \
--pod-cidr 192.168.0.0/16 \
--generate-ssh-keys
Adicionar um novo pool de nós a uma sub-rede dedicada
Depois de criar um cluster com a Sobreposição de CNI do Azure, você pode criar outro pool de nós e atribuir os nós a uma nova sub-rede da mesma VNet. Essa abordagem pode ser útil se você quiser controlar os IPs de entrada ou saída do host de/para destinos na mesma VNET ou VNets emparelhadas.
clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"
nodepoolName="newpool1"
subscriptionId=$(az account show --query id -o tsv)
vnetName="yourVnetName"
subnetName="yourNewSubnetName"
subnetResourceId="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnetName/subnets/$subnetName"
az aks nodepool add --resource-group $resourceGroup --cluster-name $clusterName \
--name $nodepoolName --node-count 1 \
--mode system --vnet-subnet-id $subnetResourceId
Rede de pilha dupla
Você pode implantar seus clusters do AKS em um modo de pilha dupla ao usar a Rede de sobreposição e uma rede virtual do Azure de pilha dupla. Nessa configuração, os nós recebem um endereço IPv4 e IPv6 da sub-rede da rede virtual do Azure. Os pods recebem endereço IPv4 e IPv6 de um espaço de endereço logicamente diferente da sub-rede da rede virtual do Azure dos nós. A NAT (Conversão de Endereços de Rede) é configurada para que os pods possam alcançar recursos na rede virtual do Azure. O endereço IP de origem do tráfego é NAT para o endereço IP primário do nó da mesma família (IPv4 para IPv4 e IPv6 para IPv6).
Pré-requisitos
- É necessário ter a CLI do Azure 2.48.0 ou posterior instalada.
- Kubernetes versão 1.26.3 ou posterior.
Limitações
Não há suporte para os recursos a seguir com rede de pilha dupla:
- Políticas de rede do Azure
- Políticas de rede do Calico
- Gateway da NAT
- Complemento de nós virtuais
Implantar um cluster do AKS de pilha dupla
Os atributos a seguir são fornecidos para dar suporte a clusters de pilha dupla:
--ip-families
: recebe uma lista separada por vírgulas de famílias de IPs a serem habilitadas no cluster.- Somente
ipv4
ouipv4,ipv6
são suportados.
- Somente
--pod-cidrs
: recebe uma lista separada por vírgulas de intervalos de IPs de notação CIDR para atribuir IPs de pods.- A contagem e a ordem dos intervalos nesta lista devem corresponder ao valor fornecido para
--ip-families
. - Se nenhum valor for fornecido, o valor padrão
10.244.0.0/16,fd12:3456:789a::/64
será usado.
- A contagem e a ordem dos intervalos nesta lista devem corresponder ao valor fornecido para
--service-cidrs
: recebe uma lista separada por vírgulas de intervalos de IPs de notação CIDR para atribuir os IPs de serviço.- A contagem e a ordem dos intervalos nesta lista devem corresponder ao valor fornecido para
--ip-families
. - Se nenhum valor for fornecido, o valor padrão
10.0.0.0/16,fd12:3456:789a:1::/108
será usado. - A sub-rede IPv6 atribuída a
--service-cidrs
não pode ser maior do que a/108.
- A contagem e a ordem dos intervalos nesta lista devem corresponder ao valor fornecido para
Criar um cluster do AKS de pilha dupla
Crie um grupo de recursos do Azure para o cluster usando o comando [az-group-create][
az group create
].az group create --location <region> --name <resourceGroupName>
Criar um cluster do AKS de pilha dupla utilizando o comando
az aks create
com o parâmetro--ip-families
definido comoipv4,ipv6
.az aks create \ --location <region> \ --resource-group <resourceGroupName> \ --name <clusterName> \ --network-plugin azure \ --network-plugin-mode overlay \ --ip-families ipv4,ipv6 \ --generate-ssh-keys
Criar uma carga de trabalho de exemplo
Após a criação do cluster, você poderá implementar suas cargas de trabalho. Este artigo o orienta em um exemplo de implantação de carga de trabalho de um servidor da Web NGINX.
Implantar um servidor Web NGINX
O complemento de roteamento de aplicativos é a maneira recomendada para entrada em um cluster do AKS. Para obter mais informações sobre o complemento de roteamento de aplicativos e um exemplo de como implantar um aplicativo com o complemento, consulte Entrada NGINX gerenciada com o complemento de roteamento de aplicativo.
Exponha a carga de trabalho através de um serviço do tipo LoadBalancer
Importante
Atualmente, há duas limitações relacionadas aos serviços IPv6 no AKS.
- Azure Load Balancer envia investigações de integridade para destinos IPv6 de um endereço de link local. Nos pools de nós do Azure Linux, esse tráfego não pode ser roteado para um pod, de modo que o tráfego que flui para os serviços IPv6 implantados com
externalTrafficPolicy: Cluster
falha. Os serviços IPv6 devem ser implantados comexternalTrafficPolicy: Local
, o que faz com quekube-proxy
responda à investigação no nó. - Antes do Kubernetes versão 1.27, somente o primeiro endereço IP de um serviço será provisionado para o balanceador de carga, portanto, um serviço de pilha dupla recebe apenas um IP público para sua família de IP listada pela primeira vez. Para fornecer um serviço de pilha dupla para uma única implantação, crie dois serviços direcionados ao mesmo seletor, um para IPv4 e outro para IPv6. Isso não é mais uma limitação no Kubernetes 1.27 ou posterior.
Exponha a implantação do NGINX usando o comando
kubectl expose deployment nginx
.kubectl expose deployment nginx --name=nginx-ipv4 --port=80 --type=LoadBalancer' kubectl expose deployment nginx --name=nginx-ipv6 --port=80 --type=LoadBalancer --overrides='{"spec":{"ipFamilies": ["IPv6"]}}'
Você recebe uma saída mostrando que os serviços foram expostos.
service/nginx-ipv4 exposed service/nginx-ipv6 exposed
Quando a implantação estiver exposta e os serviços
LoadBalancer
estiverem totalmente provisionados, obtenha os endereços IP dos serviços usando o comandokubectl get services
.kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ipv4 LoadBalancer 10.0.88.78 20.46.24.24 80:30652/TCP 97s nginx-ipv6 LoadBalancer fd12:3456:789a:1::981a 2603:1030:8:5::2d 80:32002/TCP 63s
Verifique a funcionalidade através de uma solicitação da Web de linha de comando a partir de um host compatível com IPv6. O Azure Cloud Shell não é compatível com IPv6.
SERVICE_IP=$(kubectl get services nginx-ipv6 -o jsonpath='{.status.loadBalancer.ingress[0].ip}') curl -s "http://[${SERVICE_IP}]" | head -n5
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>
Rede de pilha dupla com CNI do Azure alimentado por Cilium – (Versão Prévia)
Você pode implantar seus clusters do AKS de pilha dupla com o CNI do Azure alimentado pelo Cilium. Isso também permite que você controle o tráfego IPv6 com o mecanismo de Política de Rede do Cilium.
Importante
As versões prévias do recurso AKS estão disponíveis em uma base de autoatendimento e aceitação. As visualizações são fornecidas "como estão" e "conforme disponíveis" e estão excluídas dos acordos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
Pré-requisitos
- É necessário ter a versão mais recente da extensão de visualização do AKS.
- É necessário ter o Kubernetes versão 1.29 ou superior.
Instalar a extensão aks-preview da CLI do Azure
Instale a extensão aks-preview usando o comando
az extension add
.az extension add --name aks-preview
Atualize para a versão mais recente da extensão liberada usando o comando
az extension update
.az extension update --name aks-preview
Registrar o sinalizador de recurso "AzureOverlayDualStackPreview"
Registre o sinalizador de recurso
AzureOverlayDualStackPreview
usando o comandoaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "AzureOverlayDualStackPreview"
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 "AzureOverlayDualStackPreview"
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 clusters de sobreposição com o CNI do Azure da plataforma pelo Cilium
Crie um cluster com a Sobreposição de CNI do Azure usando o comando az aks create
. Use o argumento --network-dataplane cilium
para especificar o plano de dados Cilium.
clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"
az aks create \
--name $clusterName \
--resource-group $resourceGroup \
--location $location \
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--ip-families ipv4,ipv6 \
--generate-ssh-keys\
Para obter mais informações sobre o CNI do Azure da plataforma Cilium, consulte CNI do Azure CNI da Plataforma Cilium.
Nós do Windows de rede de pilha dupla – (Versão Prévia)
Você pode implantar seus clusters do AKS de pilha dupla com nós do Windows.
Importante
As versões prévias do recurso AKS estão disponíveis em uma base de autoatendimento e aceitação. As visualizações são fornecidas "como estão" e "conforme disponíveis" e estão excluídas dos acordos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
Instalar a extensão aks-preview da CLI do Azure
Instale a extensão aks-preview usando o comando
az extension add
.az extension add --name aks-preview
Atualize para a versão mais recente da extensão liberada usando o comando
az extension update
.az extension update --name aks-preview
Registrar o sinalizador de recurso "AzureOverlayDualStackPreview"
Registre o sinalizador de recurso
AzureOverlayDualStackPreview
usando o comandoaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "AzureOverlayDualStackPreview"
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 "AzureOverlayDualStackPreview"
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 um cluster de sobreposição
Crie um cluster com a Sobreposição de CNI do Azure usando o comando az aks create
.
clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"
az aks create \
--name $clusterName \
--resource-group $resourceGroup \
--location $location \
--network-plugin azure \
--network-plugin-mode overlay \
--ip-families ipv4,ipv6 \
--generate-ssh-keys\
Adicionar um nodepool do Windows ao cluster
Adicione um nodepool do Windows ao cluster usando o comando [az aks nodepool add
][az-aks-nodepool-add].
az aks nodepool add \
--resource-group $resourceGroup \
--cluster-name $clusterName \
--os-type Windows \
--name winpool1 \
--node-count 2
Próximas etapas
Para saber como atualizar os clusters existentes para a sobreposição da CNI do Azure, confira Atualizar modos IPAM e tecnologia de Plano de dados do Serviço de Kubernetes do Azure (AKS).
Para saber como utilizar o AKS com seu próprio plug-in da CNI (Interface de Rede de Contêiner), consulte Trazer seu próprio plug-in da CNI (Interface de Rede de Contêiner).
Azure Kubernetes Service