Implementar encriptação WireGuard com Serviços Avançados de Rede de Contentores

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.
  • 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.

  1. Execute um shell bash em um dos pods Cilium
kubectl -n kube-system exec -ti ds/cilium -- bash
  1. 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.