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.
Este artigo mostra-lhe como implementar encriptação WireGuard com Advanced Container Networking Services em clusters Azure Kubernetes Service (AKS).
Pré-requisitos
- Uma conta no Azure com uma subscrição ativa. Se você não tiver uma, crie uma conta gratuita antes de começar.
Usa o ambiente Bash em Azure Cloud Shell. Para mais informações, consulte Comece com Azure Cloud Shell.
Se preferires executar comandos de referência de CLI localmente, instala o Azure CLI. Se estiveres a correr no Windows ou macOS, considera executar Azure CLI num contentor Docker. Para mais informações, veja Como executar o Azure CLI num contentor Docker.
Se estiveres a usar uma instalação local, inicia sessão na Azure CLI usando o comando az login. Para concluir o processo de autenticação, siga os passos exibidos no seu terminal. Para outras opções de iniciação de sessão, veja Autenticar para Azure usando Azure CLI.
Quando for solicitado, instale a extensão Azure CLI na primeira utilização. Para mais informações sobre extensões, veja Usar e gerir extensões com a Azure CLI.
Execute az version para descobrir a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
A versão mínima do Azure CLI exigida para os passos deste artigo é a 2.71.0. Para localizar a versão, execute
az --version. Se precisares de instalar ou atualizar, vê Install Azure CLI.A encriptação WireGuard é suportada apenas com o Azure CNI alimentado pela Cilium. Se você estiver usando qualquer outro plug-in de rede, a criptografia WireGuard não é suportada. Veja Configure Azure CNI gerido por Cilium.
O WireGuard estabelece túneis criptografados pela porta UDP 51871, que é exposta em cada nó AKS. Verifique se a porta UDP 51871 é permitida entre todos os IPs de nós, especialmente se seu ambiente usa firewalls.
Habilite os Serviços Avançados de Rede de Contêineres e o WireGuard
Para continuar, você deve ter um cluster AKS com Advanced Container Networking Services habilitado.
O az aks create comando com o sinalizador Advanced Container Networking Services, --enable-acns, cria um novo cluster AKS com todos os recursos Advanced Container Networking Services. Estas características abrangem:
Observabilidade da rede de contêineres: fornece informações sobre o tráfego da rede. Para saber mais, visite Observabilidade da rede de contêineres.
Segurança de rede de contêineres: Oferece recursos de segurança, como filtragem FQDN (Fully Qualified Domain Name). Para saber mais, visite Segurança de rede de contêiner.
Observação
Os clusters com o plano de dados Cilium suportam a Observabilidade da Rede de Contêineres e a segurança da Rede de Contêineres a partir da versão 1.29 do Kubernetes.
O WireGuard está desativado por defeito mesmo após ativar os Serviços Avançados de Rede de Containers. Para habilitar o WireGuard, defina o tipo de criptografia usando o sinalizador --acns-transit-encryption-type wireguard.
# Set environment variables for the AKS cluster name and resource group. Make sure to replace the placeholders with your own values.
export CLUSTER_NAME="<aks-cluster-name>"
export RESOURCE_GROUP="<resourcegroup-name>"
# Create an AKS cluster
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--location eastus \
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--enable-acns \
--acns-transit-encryption-type wireguard \
--generate-ssh-keys
Habilite os Serviços Avançados de Rede de Contêiner e o WireGuard em um cluster existente
O az aks update comando com o sinalizador Advanced Container Networking Services, --enable-acns, atualiza um cluster AKS existente com todos os recursos Advanced Container Networking Services, que inclui Observabilidade de Rede de Contêiner e o recurso Segurança de Rede de Contêiner .
Importante
Habilitar o WireGuard em um cluster existente acionará uma reinicialização de implementação do agente Cilium em todos os nós. Para clusters grandes, esse processo pode levar algum tempo e afetar temporariamente as cargas de trabalho. Recomenda-se planejar a atualização durante uma janela de manutenção ou período de baixo tráfego para minimizar interrupções
Observação
Somente clusters com o plano de dados Cilium suportam os recursos de Segurança de Rede de Contêiner dos Serviços Avançados de Rede de Contêiner.
O WireGuard está desativado por defeito mesmo após ativar os Serviços Avançados de Rede de Containers. Para habilitar o WireGuard, defina o tipo de criptografia usando o sinalizador --acns-transit-encryption-type wireguard.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns \
--acns-transit-encryption-type wireguard
Obter credenciais de cluster
Obtenha suas credenciais de cluster usando o az aks get-credentials comando.
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Validar a configuração
Valide se o WireGuard está habilitado com êxito usando cilium-dbg cli
Observação
Pode levar alguns minutos para que o WireGuard esteja totalmente habilitado e configurado em todos os nós após a ativação.
- Execute um shell bash em um dos pods Cilium
kubectl -n kube-system exec -ti ds/cilium -- bash
- Verifique se o WireGuard está ativado
cilium-dbg encrypt status
Resultados esperados:
Encryption: Wireguard
Interface: cilium_wg0
Public key: jikeOvVATORm/1GD0kZLxKhw1lofdsfdgiXWVyVIR3T0=
Number of peers: 2
O número de pares deve ser igual ao número de nós menos um.
Solução de problemas
Quando a criptografia do WireGuard está habilitada em um cluster AKS usando o Cilium CNI, você pode usar a ferramenta cilium-dbg CLI para inspecionar o status do túnel, verificar a conectividade de pares e depurar problemas relacionados à criptografia.
Inspecione os pares do WireGuard
Pode inspecionar o estado e a configuração dos pares em cada nó utilizando:
kubectl exec -n kube-system ds/cilium -- cilium-dbg debuginfo --output json | jq .encryption
Resultados esperados:
{
"wireguard": {
"interfaces": [
{
"listen-port": 51871,
"name": "cilium_wg0",
"peer-count": 1,
"peers": [
{
"allowed-ips": [
"10.244.1.31/32",
"10.244.1.206/32",
"10.224.0.6/32"
],
"endpoint": "10.224.0.6:51871",
"last-handshake-time": "2025-04-24T11:13:49.102Z",
"public-key": "3qwZEQLdK5IcFcdXxtr1m8RkDqznPVWEEirJ88+zDyk=",
"transfer-rx": 2457024,
"transfer-tx": 15746568
}
],
"public-key": "jikeOvVATORm/1GD0kZLxKhw1lofdsfdgiXWVyVIR3T0="
}
],
"node-encryption": "Disabled"
}
}
Este resultado mostra o estado atual da criptografia do WireGuard no nó.
- listen-port: A porta UDP (51871) onde este nó está ouvindo tráfego criptografado de outros nós.
- peer-count: o número de peers remotos do WireGuard configurados para este nó.
- Pares:
- allowed-ips: lista de endereços IP de pod encaminhados através do túnel criptografado para este par.
- endpoint: O IP e a porta da interface WireGuard do peer remoto.
- last-handshake-time: carimbo de data/hora da troca de chaves bem-sucedida mais recente com este par.
- Chave pública: a chave pública do par remoto.
- transfer-rx / transfer-tx: O número total de bytes recebidos/transmitidos através do túnel.
- chave pública: a chave pública da interface local do WireGuard.
- node-encryption: criptografa o tráfego originado do próprio nó ou de pods de rede host. Atualmente, apenas o tráfego de pods é criptografado. A criptografia de nó ainda não é suportada e permanece desativada por padrão.
Desativando o WireGuard em um cluster existente
O WireGuard pode ser desativado independentemente sem afetar outras funcionalidades dos Serviços Avançados de Rede de Contentores. Para desativá-lo, defina o sinalizador --acns-transit-encryption-type=none.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns \
--acns-transit-encryption-type none
Problemas conhecidos
- Os pacotes podem ser descartados ao configurar o dispositivo WireGuard, levando a problemas de conectividade. Este problema ocorre quando endpoints são adicionados ou removidos ou quando ocorrem atualizações de nós de rede. Em alguns casos, esse problema pode levar a chamadas com falha para sendmsg e sendto. Para mais informações, consulte GitHub edição 33159.