Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Important
A partir de 30 de setembro de 2028, o Azure Kubernetes Service (AKS) deixou de suportar o Azure Network Policy Manager (NPM) em nós Linux . Para evitar interrupções no serviço, é necessário migrar clusters AKS que executam nós Linux do NPM para a Cilium Network Policy até à data de término do suporte. Para mais informações sobre esta reforma, consulte o anúncio de reforma do Azure Updates. Para se manter informado sobre anúncios e atualizações, siga as notas de lançamento do AKS.
Identificar aglomerados afetados
Para encontrar clusters AKS com pools de nós Linux usando o Azure Network Policy Manager (NPM), execute a consulta Azure Resource Graph que lista todos os clusters AKS onde agentPool.osType != "Windows" e properties.networkProfile.networkPolicy == "azure".
Important
A partir de 31 de março de 2028, o Azure Kubernetes Service (AKS) deixou de suportar a rede kubenet. Para evitar interrupções no serviço, atualize para a rede sobreposta Azure Container Networking Interface (CNI ) antes da data de fim do suporte. Para mais informações sobre esta descontinuação, consulte o problema do GitHub e o anúncio de descontinuação do Azure Updates. Para se manter informado sobre anúncios e atualizações, siga as notas de lançamento do AKS.
Instale um motor de políticas de rede e crie políticas de rede Kubernetes para controlar o fluxo de tráfego entre pods em clusters AKS usando a CLI do Azure ou Terraform.
Visão geral da política de rede
Por padrão, todos os pods em um cluster AKS podem enviar e receber tráfego sem limitações. Para melhorar a segurança, você pode definir regras que controlam o fluxo de tráfego.
A política de rede é uma especificação do Kubernetes que define políticas de acesso para comunicação entre pods. Ao usar diretivas de rede, você define um conjunto ordenado de regras para enviar e receber tráfego. Você aplica as regras a uma coleção de pods que correspondem a um ou mais seletores de rótulo.
Defines as regras da política de rede como manifestos YAML, e podes incluí-las em manifestos mais amplos que também criam uma implementação ou serviço.
Opções de política de rede no AKS
O Azure fornece três motores de políticas de rede para aplicar políticas de rede:
- Cilium (para os clusters AKS que usam Azure CNI Powered by Cilium)
- Azure Gestor de Política de Rede (NPM)
- Calico (uma solução open-source de rede e segurança de rede fundada pela Tigera)
Recomendamos a utilização do Cilium, que oferece suporte robusto para políticas nativas do Kubernetes, funcionalidades estendidas como políticas de Camada 7 e filtragem FQDN, e um plano de dados baseado em eBPF que oferece melhor desempenho, escalabilidade e segurança em comparação com soluções baseadas em IPTables.
Para aplicar as políticas especificadas, o Azure NPM utiliza IPTables nos nós em Linux. As políticas são convertidas em conjuntos de pares de IP permitidos e não permitidos. O sistema programa estes pares como IPTable regras de filtro.
Diferenças entre motores de políticas de rede: Cilium, Azure NPM e Calico
| Motor de política de rede | Plataformas suportadas | Opções de rede suportadas | Conformidade com especificações Kubernetes | Outras funcionalidades | Support |
|---|---|---|---|---|---|
| Cilium | Linux | Azure CNI | Suporta todos os tipos de apólices | FQDN, L3/4, L7 | Equipa de suporte e engenharia Azure |
| Azure NPM | Linux | Azure CNI | Suporta todos os tipos de apólices | N/A | Equipa de suporte e engenharia Azure |
| Calico | Linux, Windows Server 2019, Windows Server 2022 | Azure CNI (Linux, Windows Server 2019, Windows Server 2022) e kubenet (Linux) | Suporta todos os tipos de apólices | O AKS não testa nem suporta funcionalidades para além da aplicação de políticas networking.k8s.io. |
Equipa de suporte e engenharia Azure |
Limitações do Azure Network Policy Manager
O Azure NPM tem as seguintes limitações:
- Escalar para além de 250 nós e 20.000 pods não é suportado. Se você tentar dimensionar além desses limites, você pode enfrentar erros de falta de memória (OOM). Para melhor escalabilidade e suporte a IPv6, recomendamos usar ou atualizar para o Azure CNI Powered by Cilium como motor de políticas de rede.
- O IPv6 não é suportado. Caso contrário, ele suporta totalmente as especificações de política de rede no Linux.
- A partir de 30 de setembro de 2026, o Azure Kubernetes Service (AKS) deixa de suportar o Azure Network Policy Manager (NPM) nos nós Windows.
Problemas conhecidos com o Azure Network Policy Manager
Pode ter problemas temporários de conectividade para novas ligações para/desde pods em nós afetados ao editar ou eliminar uma política de rede "suficientemente grande". Atingir essa condição de corrida nunca afeta as conexões ativas.
Se essa condição de corrida ocorrer para um nó, o pod do Azure NPM nesse nó entrará em um estado em que não pode atualizar as regras de segurança, o que pode levar a uma conectividade inesperada para novas conexões de/para pods no nó afetado. Para atenuar o problema, o pod do Azure NPM reinicia automaticamente ~15 segundos após entrar nesse estado. Enquanto o Azure NPM está reinicializando no nó afetado, ele exclui todas as regras de segurança e, em seguida, reaplica as regras de segurança para todas as políticas de rede. Enquanto todas as regras de segurança estão sendo reaplicadas, há uma chance de conectividade temporária e inesperada para novas conexões de/para pods no nó afetado.
Para limitar a chance de atingir essa condição de corrida, você pode reduzir o tamanho da diretiva de rede. É mais provável que esse problema aconteça para uma diretiva de rede com várias ipBlock seções. Uma política de rede com quatro ou menosipBlock secções é menos provável que afete o problema.
Limitações do Calico
- A AKS não suporta a utilização da Calico gerida por AKS juntamente com a Calico Cloud ou a Calico Enterprise, pois esta combinação pode causar conflitos e comportamentos não intencionais. Se usar Calico Cloud ou Enterprise, a Microsoft recomenda vivamente desativar o Calico gerido por AKS. Contacte a Tigera para apoio com estes produtos.
- A Calico gerida pela AKS apenas suporta
networking.k8s.iopolíticas de rede. Se pretende usar políticasprojectcalico.org/v3, considere migrar para uma solução auto-hospedada, como Calico Cloud, Calico Enterprise ou BYOCNI.
Serviços de balanceador de carga e políticas de rede
O encaminhamento de serviços Kubernetes para serviços de entrada e saída envolve frequentemente a reescrita dos IPs de origem e destino do tráfego que está a ser processado, incluindo o tráfego que entra no cluster a partir de um LoadBalancer serviço. Este comportamento de reescrita significa que as políticas de rede podem não processar corretamente o tráfego recebido ou enviado para um serviço externo. Para mais informações, consulte a documentação das Políticas de Rede Kubernetes.
Para restringir que fontes podem enviar tráfego para um serviço de balanceador de carga, use spec.loadBalancerSourceRanges para configurar o bloqueio de tráfego que se aplica antes de ocorrerem quaisquer reescritas. Para mais informações, consulte a documentação do balanceador de carga AKS Standard.
Antes de começar
Você precisa da CLI do Azure versão 2.0.61 ou posterior instalada e configurada. Encontre a versão usando o az --version comando. Se precisar de instalar ou atualizar, veja Install CLI do Azure (Instalar o CLI do Azure).
Em vez de usar uma identidade atribuída pelo sistema, você também pode usar uma identidade atribuída pelo usuário. Para obter mais informações, consulte Usar identidades gerenciadas.
- Terraform instalado, versão 1.6 ou posterior.
- CLI do Azure instalada e autenticada. Encontre a versão usando o
az --versioncomando. Se precisar de instalar ou atualizar, veja Install CLI do Azure (Instalar o CLI do Azure). Utiliza a CLI do Azure para te ligares ao cluster depois de o Terraform o criar. -
Kubectl instalado. Você pode instalá-lo localmente usando o
az aks install-clicomando. Utilizakubectlpara verificar o comportamento da política de rede.
Crie um cluster AKS com Azure Network Policy Manager (Linux)
Defina variáveis de ambiente para o nome do grupo de recursos, nome do cluster e localização. Substitua os valores conforme necessário.
export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastusCria o grupo de recursos usando o
az group createcomando.az group create --resource-group $RESOURCE_GROUP --location $LOCATIONCrie um cluster AKS usando o
az aks createe especifiqueazurepara onetwork-pluginenetwork-policy.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 1 \ --network-plugin azure \ --network-policy azure \ --generate-ssh-keysAtenção
O Azure Network Policy Manager (NPM) para nós nodes Linux será retirado em 30 de setembro de 2028. Para novas implementações, recomendamos usar o Azure CNI Powered by Cilium com a Política de Rede Cilium. Para migrar clusters existentes, consulte Migrar de NPM para Política de Rede Cilium.
Criar um cluster AKS com a Calico
Crie um cluster AKS usando o az aks create comando. Especificar --network-plugin azure e --network-policy calico. Quando especificas --network-policy calico, ativas o Calico tanto nos pools de nós Linux como do Windows.
Se planeia adicionar conjuntos de nós do Windows ao seu cluster, inclua os parâmetros windows-admin-username e windows-admin-password que satisfaçam os requisitos de palavra-passe do Windows Server. Para criar um nome de utilizador para usar como credenciais de administrador para os seus contentores do Windows Server no seu cluster, o seguinte comando indica-lhe um nome de utilizador. Defina-o como WINDOWS_USERNAME.
echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME
Important
Neste momento, a utilização de políticas de rede Calico com nós Windows está disponível em novos clusters usando Kubernetes versão 1.20 ou posterior com Calico 3.17.2 e requer que utilize a rede Azure CNI. Os nós do Windows em clusters AKS com o Calico ativado também têm o IP flutuante ativado por padrão.
Para clusters com apenas pools de nós Linux executando o Kubernetes 1.20 com versões anteriores do Calico, a versão do Calico atualiza automaticamente para 3.17.2.
Instale o Azure Network Policy Manager ou Calico num cluster existente
Warning
Tenha em mente as seguintes informações ao instalar Azure NPM ou Calico num cluster existente:
- O processo de atualização aciona cada pool de nós para ser recriado simultaneamente. Não é possível atualizar cada pool de nós separadamente.
- Dentro de cada pool de nós, os nós seguem o mesmo processo de reimagem que as operações padrão de atualização de versões do Kubernetes. Este comportamento significa que nós buffer são temporariamente adicionados para minimizar a perturbação nas aplicações em execução durante o processo de reimagem dos nós. Quaisquer perturbações que possam ocorrer são semelhantes às que pode encontrar durante uma atualização da imagem do nó ou da versão do Kubernetes.
A seguinte informação aplica-se a upgrades de kubenet com Calico para Azure CNI Overlay com Calico:
- Em clusters kubenet com Calico ativado, o Calico é usado tanto como CNI como motor de políticas de rede.
- Nos clusters CNI do Azure, o Calico é usado apenas para imposição de política de rede, não como CNI. Isso pode causar um pequeno atraso entre o início do pod e o momento em que o Calico permite o tráfego de saída do pod.
Atualize um cluster existente para instalar Azure NPM ou Calico usando o az aks update comando e especificação azure ou calico para o --network-policy parâmetro. O seguinte comando de exemplo mostra como instalar qualquer um dos NPM do Azure:
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--network-policy azure
Atualizar um cluster existente com Azure NPM ou Calico para Cilium
Para clusters que já usam o Azure CNI, atualize o plano de dados da rede para Cilium. Os clusters Kubenet devem primeiro migrar para o Azure CNI Overlay e depois atualizar o plano de dados da rede para o Cilium como uma operação separada. Revise os pré-requisitos e siga os passos em Atualizar um cluster existente para Azure CNI Powered by Cilium.
Conectar-se ao cluster AKS
Configure kubectl para ligar ao seu cluster usando o comando az aks get-credentials. Este comando baixa credenciais e configura a CLI do Kubernetes para usá-las.
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Verificar a configuração da política de rede
Para iniciar a verificação da diretiva de rede, crie um aplicativo de exemplo e defina regras de tráfego.
Crie um namespace nomeado
demopara executar os pods de exemplo usando okubectl create namespacecomando.kubectl create namespace demoCrie um pod nomeado
serverpara servir na porta TCP 80 usando okubectl runcomando.kubectl run server -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --labels="app=server" --port=80 --command -- /agnhost serve-hostname --tcp --http=false --port "80"Cria um pod chamado
clientpara correr Bash usando okubectl runcomando.kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --command -- bashNote
Se quiser programar o cliente ou servidor num nó específico, adicione este bit antes do argumento
--commandno comando de criação do podkubectl run:--overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux|windows"}}}'.Numa janela separada, obtenha o endereço IP do
serverpod usando okubectl get podcomando.kubectl get pod --output=wide -n demoSua saída deve ser semelhante à saída de exemplo a seguir:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES server 1/1 Running 0 30s 10.224.0.72 akswin22000001 <none> <none>
Testar a conectividade utilizando políticas de rede
Sugestão
Para testar a conectividade sem políticas de rede, execute o seguinte comando na shell do cliente: /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp. Substitui <server-ip> pelo endereço IP do servidor pod. Se a conexão correr bem, não terá saída.
Crie um arquivo chamado
demo-policy.yamle cole o seguinte manifesto YAML:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: demo-policy namespace: demo spec: podSelector: matchLabels: app: server ingress: - from: - podSelector: matchLabels: app: client ports: - port: 80 protocol: TCPAplique o manifesto da política de rede usando o
kubectl applycomando.kubectl apply -f demo-policy.yamlNo shell do cliente, verifique a conectividade com o servidor usando o seguinte
/agnhostcomando:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpA conectividade com o tráfego é bloqueada porque o servidor está rotulado com
app=server, mas o cliente não está rotulado. Sua saída deve ser semelhante à saída de exemplo a seguir:TIMEOUTIdentifique o
cliente verifique a conectividade com o servidor com o comandokubectl label.kubectl label pod client -n demo app=clientSe a conexão correr bem, não terá saída.
Migrar para a Calico autogerida
O AKS só suporta Calico para políticas de rede padrão do Kubernetes e não testa outras funcionalidades. Se quiser passar para a Calico autogerida, siga as instruções da Tigera em Migrar da Calico gerida pela Azure para a Calico autogerida. A documentação da Tigera menciona que para a Calico autogerida se define --network-policy none como na secção de desinstalação.
Desinstalar o Azure Network Policy Manager ou o Calico
Note
Tenha em mente as seguintes informações ao desinstalar o Azure NPM ou o Calico de um cluster:
- O processo de desinstalação não remove Definições Personalizadas de Recursos (CRDs) e Recursos Personalizados (CRs) usados pela Calico. Estes CRDs e CRs têm todos nomes que terminam em projectcalico.org ou tigera.io. Pode remover manualmente estes CRDs e CRs associados após ter desinstalado com sucesso o Calico.
- A atualização não remove quaisquer recursos de políticas de rede no cluster, mas as políticas deixaram de ser aplicadas após o processo de desinstalação.
Remover o Azure Network Policy Manager ou o Calico de um cluster existente usando o az aks update comando e a especificação none para o --network-policy parâmetro.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--network-policy none
Alterar política de rede do cluster
Os passos seguintes mostram como alterar a política de rede existente de um cluster para Calico. O procedimento exige que a política de rede seja alterada para none e depois alterada para calico.
Os comandos utilizam variáveis especificadas anteriormente neste artigo: Crie um cluster AKS com o Azure Network Policy Manager (Linux). Caso contrário, substitua $RESOURCE_GROUP e $CLUSTER_NAME pelo grupo de recursos e nome do cluster.
Execute o comando seguinte para mostrar a política de rede existente do cluster.
az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query "networkProfile" \ --output tableExecute o seguinte comando para definir a política de rede para
none.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy noneExecute o seguinte comando para definir a política de rede para
calico.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy calico
Limpar recursos
Neste artigo, você criou um namespace e dois pods e aplicou uma diretiva de rede. Se já não precisares destes recursos, podes apagá-los.
Apaga os recursos usando o kubectl delete comando.
kubectl delete namespace demo
Se seguiu os passos deste artigo para criar um cluster AKS, use o az group delete comando para eliminar o grupo de recursos AKS e o seu grupo de recursos relacionados, com um nome que começa por MC_.
az group delete --resource-group $RESOURCE_GROUP --no-wait --yes
Criar um cluster AKS com política de rede Cilium usando o Terraform
Esta secção mostra como usar o Terraform para implementar um cluster AKS que utiliza Azure CNI Powered by Cilium para rede e aplicação de políticas de rede e, em seguida, usar um recurso do Kubernetes NetworkPolicy para controlar o tráfego entre pods.
Note
O código de exemplo desta secção encontra-se no repositório Azure Terraform GitHub. Você pode visualizar o arquivo de log que contém os resultados do teste das versões atual e anterior do Terraform.
Veja mais artigos e código de exemplo mostrando como usar o Terraform para gerenciar recursos do Azure.
Este exemplo implementa:
- Um grupo de recursos.
- Um cluster do AKS que utiliza a rede Azure CNI Overlay com o Cilium como motor de políticas de rede e plano de dados da rede.
Crie um diretório para testar e executar o código de exemplo do Terraform, e torne-o o diretório atual.
Crie um arquivo chamado
main.tfe insira o seguinte código:terraform { required_version = ">= 1.6.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } resource "azurerm_resource_group" "example" { name = "rg-aks-network-policy-example" location = "eastus" } resource "azurerm_kubernetes_cluster" "example" { name = "aks-network-policy-example" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name dns_prefix = "aksnetpolicyexample" default_node_pool { name = "default" node_count = 1 vm_size = "Standard_D2s_v3" upgrade_settings { drain_timeout_in_minutes = 0 max_surge = "10%" node_soak_duration_in_minutes = 0 } } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" network_plugin_mode = "overlay" network_policy = "cilium" network_data_plane = "cilium" load_balancer_sku = "standard" } }Inicializar o Terraform executando o
terraform initcomando. Este comando descarrega o fornecedor Azure necessário para gerir os recursos Azure com o Terraform.terraform initFormate e valide a configuração executando os
terraform fmtcomandos eterraform validate.terraform fmt terraform validateCrie um plano de execução do Terraform executando o
terraform plancomando. Este comando mostra-lhe os recursos que o Terraform cria ou modifica na sua subscrição do Azure.terraform planAplica o plano de execução do Terraform executando o
terraform applycomando. Este comando cria os recursos definidos no seumain.tfficheiro na sua subscrição do Azure.terraform apply
Liga-te ao cluster AKS usando o Terraform
Instale a ferramenta de linha de comandos do Kubernetes executando o
az aks install-clicomando e depois verifique a instalação.az aks install-cli kubectl version --clientConfigure
kubectlpara se ligar ao seu cluster executando oaz aks get-credentialscomando. Este comando baixa credenciais e configura a CLI do Kubernetes para usá-las.az aks get-credentials \ --resource-group rg-aks-network-policy-example \ --name aks-network-policy-exampleVerifica se o cluster está a funcionar executando o
kubectl get nodescomando.kubectl get nodes
Verificar a configuração da política de rede usando o Terraform
Para verificar a configuração da política de rede, crie uma aplicação de exemplo e defina regras de tráfego.
Crie um namespace nomeado
demopara executar os pods de exemplo usando okubectl create namespacecomando.kubectl create namespace demoCrie um pod nomeado
serverpara servir na porta TCP 80 executando okubectl runcomando.kubectl run server \ -n demo \ --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \ --labels="app=server" \ --port=80 \ --command -- /agnhost serve-hostname --tcp --http=false --port "80"Cria um pod nomeado
clientpara correr Bash usando okubectl runcomando.kubectl run -it client \ -n demo \ --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \ --command -- bashNuma janela separada, obtenha o endereço IP do
serverpod usando okubectl get podcomando.kubectl get pod --output=wide -n demoUse o endereço IP do pod
serverao testar a conectividade a partir da shellclientna secção seguinte.
Teste a conectividade com políticas de rede usando o Terraform
O exemplo inclui um manifesto do Kubernetes NetworkPolicy que permite tráfego de entrada para pods com o rótulo app=server apenas a partir de pods com o rótulo app=client, na porta 80/TCP.
Crie um arquivo chamado
network-policy.yamle insira o seguinte código:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: demo-policy namespace: demo spec: podSelector: matchLabels: app: server policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: client ports: - protocol: TCP port: 80Aplica a política de rede usando o
kubectl applycomando.kubectl apply -f network-policy.yamlNo
clientshell, teste a conectividade ao servidor usando o seguinte/agnhostcomando:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpA conectividade está bloqueada porque o servidor está rotulado com
app=server, mas o cliente não está rotulado. Sua saída deve ser semelhante à saída de exemplo a seguir:TIMEOUTRotule o
cliente verifique a conectividade com o servidor utilizando o comandokubectl label.kubectl label pod client -n demo app=clientNo
clientshell, teste novamente a conectividade ao servidor usando o mesmo/agnhostcomando:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpSe a conexão correr bem, não terá saída.
Verifica a política de rede usando os
kubectl get networkpolicycomandos ekubectl describe networkpolicy.kubectl get networkpolicy -n demo kubectl describe networkpolicy demo-policy -n demoA saída mostra que os pods rotulados
app=serverestão selecionados, o tráfego de entrada é permitido na porta TCP 80, e apenas os pods rotuladosapp=clientpodem iniciar ligações.
Limpar recursos usando o Terraform
Nesta secção, criou um namespace, dois pods e uma política de rede. Se já não precisar destes recursos Kubernetes, elimine-os antes de remover a infraestrutura do Azure subjacente.
Use o kubectl delete comando para eliminar os recursos.
kubectl delete namespace demo
Warning
O comando seguinte remove o grupo de recursos, o cluster AKS e todos os outros recursos associados ao grupo de recursos criado para esta amostra. Se implementaste outros recursos dentro desse grupo de recursos, o comando também os apaga.
Remova os recursos do Azure usando o terraform destroy comando.
terraform destroy