Implantar a criptografia WireGuard com serviços avançados de rede para contêineres

Este artigo mostra como implantar a criptografia WireGuard com os Serviços Avançados de Rede de Contêiner em clusters Azure Kubernetes Service (AKS).

Pré-requisitos

  • Uma conta Azure com uma assinatura ativa. Se você não tiver uma, crie uma conta gratuita antes de começar.
  • A versão mínima de Azure CLI necessária para as etapas neste artigo é 2.71.0. Para saber qual é a versão, execute az --version. Se precisar instalar ou atualizar, consulte Instalar Azure CLI.

  • A criptografia WireGuard só tem suporte com o Azure CNI alimentado pelo Cilium. Se você estiver usando qualquer outro plug-in de rede, não há suporte para criptografia WireGuard. Consulte Configurar Azure CNI alimentado por Cilium.

  • O WireGuard estabelece túneis criptografados na porta UDP 51871, que é exposta em cada nó do AKS. Verifique se a porta UDP 51871 tem permissão entre todos os IPs de nó, especialmente se o ambiente usar firewalls.

Habilitar Serviços Avançados de Rede de Contêiner e WireGuard

Para continuar, você deve ter um cluster do AKS com os Serviços Avançados de Rede de Contêineres habilitados.

O comando az aks create com o flag dos Serviços Avançados de Rede de Contêiner, --enable-acns, cria um novo cluster AKS com todos os recursos dos Serviços Avançados de Rede de Contêiner. Esses recursos incluem:

Observação

Clusters com o plano de dados Cilium dão suporte à Observabilidade de Rede de Contêiner e a segurança de rede de contêiner a partir da versão 1.29 do Kubernetes. O WireGuard é desabilitado por padrão mesmo depois de habilitar os Serviços Avançados de Rede de Contêiner. 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

Habilitar Os Serviços Avançados de Rede de Contêiner e o WireGuard em um cluster existente

O comando az aks update com o sinalizador --enable-acns de Serviços Avançados de Rede de Contêiner atualiza um cluster do AKS existente com todos os recursos dos Serviços Avançados de Rede de Contêiner, que incluem a Observabilidade de Rede de Contêiner e o recurso de Segurança de Rede de Contêiner.

Importante

Habilitar o WireGuard em um cluster existente disparará uma reinicialização de distribuição do agente Cilium em todos os nós. Para clusters grandes, esse processo pode levar algum tempo e pode afetar temporariamente as cargas de trabalho. É recomendável planejar a atualização durante uma janela de manutenção ou período de baixo tráfego para minimizar a interrupção

Observação

Somente clusters com o plano de dados Cilium dão suporte para os recursos de Segurança de Rede de Contêiner dos Serviços Avançados de Rede de Contêiner.

O WireGuard é desabilitado por padrão mesmo depois de habilitar os Serviços Avançados de Rede de Contêiner. 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 do 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

Validar se o WireGuard está habilitado com êxito usando a CLI cilium-dbg

Observação

Pode levar alguns minutos para que o WireGuard seja totalmente habilitado e configurado em todos os nós após a ativação.

  1. Executar um shell bash em um dos pods Cilium
kubectl -n kube-system exec -ti ds/cilium -- bash
  1. Verifique se o WireGuard está habilitado
cilium-dbg encrypt status

Resultado esperado:

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.

Resolução de problemas

Quando a criptografia WireGuard estiver habilitada em um cluster do AKS usando o Cilium CNI, você poderá usar a ferramenta CLI do cilium-dbg para inspecionar o status do túnel, verificar a conectividade de pares e depurar problemas relacionados à criptografia.

Inspecionar pares do WireGuard

Você pode inspecionar o status e a configuração do par em cada nó usando:

kubectl exec -n kube-system ds/cilium -- cilium-dbg debuginfo --output json | jq .encryption

Resultado esperado:

{
  "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"
  }
}

Esta saída mostra o estado atual da criptografia WireGuard no nó.

  • listen-port: a porta UDP (51871) em que este nó está escutando tráfego criptografado de pares.
  • peer-count: o número de pares WireGuard remotos configurados para este nó.
  • peers:
    • allowed-ips: lista de endereços IP de pods roteados pelo túnel criptografado para este par.
    • endpoint: o IP e a porta da interface WireGuard do par remoto.
    • last-handshake-time: Carimbo de data/hora da troca de chaves bem-sucedida mais recente com esse par.
    • public-key: a chave pública do par remoto.
    • transfer-rx/transfer-tx: o número total de bytes recebidos/transmitidos pelo túnel.
  • public-key: a chave pública da interface do WireGuard local.
  • node-encryption: criptografa o tráfego proveniente do próprio nó ou de pods de rede do host. No momento, somente o tráfego de pod é criptografado. A criptografia de nó ainda não tem suporte e permanece desabilitada por padrão.

Desabilitando o WireGuard em um cluster existente

O WireGuard pode ser desabilitado independentemente sem afetar outros recursos avançados dos Serviços de Rede de Contêiner. Para desabilitá-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 que leva a problemas de conectividade. Esse problema ocorre quando pontos de extremidade são adicionados ou removidos ou quando há atualizações de nós. Em alguns casos, esse problema pode levar a chamadas com falha para sendmsg e sendto. Para obter mais informações, consulte GitHub problema 33159.