Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
Use o ambiente bash em Azure Cloud Shell. Para obter mais informações, consulte Get iniciado com Azure Cloud Shell.
Se você preferir executar comandos de referência da CLI localmente, instalar o Azure CLI. Se você estiver executando em Windows ou macOS, considere executar Azure CLI em um contêiner do Docker. Para obter mais informações, consulte Como executar o Azure CLI em um contêiner do Docker.
Se você estiver usando uma instalação local, entre no Azure CLI usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas em seu terminal. Para obter outras opções de entrada, consulte Authenticate para Azure usando Azure CLI.
Quando for solicitado, instale a extensão Azure CLI no primeiro uso. Para obter mais informações sobre extensões, consulte Use e gerencie extensões com o Azure CLI.
Execute o comando az version para localizar 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 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:
Observabilidade de Rede de Contêiner: Fornece insights sobre o tráfego de rede. Para saber mais, visite Observabilidade de Rede de Contêiner.
Segurança de Rede de Contêiner: Oferece recursos de segurança, como filtragem de FQDN (Nome de Domínio Totalmente Qualificado). Para saber mais, visite Segurança de Rede de Contêiner.
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.
- Executar um shell bash em um dos pods Cilium
kubectl -n kube-system exec -ti ds/cilium -- bash
- 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.