Implementar encriptação Cilium mTLS com Serviços Avançados de Rede de Contentores (Pré-visualização)

Importante

A encriptação Cilium mTLS com os Serviços de Rede Avançada de Cluster está atualmente em pré-visualização. Consulte os Termos de Utilização Complementares das Visualizações Prévias do Microsoft Azure para obter os termos legais que se aplicam às funcionalidades do Azure que estão em beta, em pré-visualização ou que ainda não foram lançadas para disponibilidade geral.

Este artigo mostra-lhe como implementar encriptação Cilium mTLS com Advanced Container Networking Services em clusters Azure Kubernetes Service (AKS).

Pré-requisitos

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

  • A encriptação Cilium mTLS é suportada apenas com o Azure CNI alimentado por Cilium. Se estiveres a usar qualquer outro plugin de rede, a encriptação Cilium mTLS não é suportada. Veja Configurar o Azure CNI Powered by Cilium.

  • Certifique-se de que o seu cluster AKS está a correr a versão Kubernetes 1.34.0 ou posterior.

  • Certifique-se de que o seu cluster está a usar Cilium versão 1.18 ou posterior.

Instalar a extensão da CLI do aks-preview Azure

Importante

Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Instale ou atualize a extensão de pré-visualização da CLI do Azure usando o comando az extension add ou az extension update.

A versão mínima da extensão aks-preview Azure CLI é 14.0.0b6.

# Install the aks-preview extension
az extension add --name aks-preview
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

Registar o sinalizador de funcionalidade AdvancedNetworkingmTLSPreview

Registe o sinalizador de funcionalidade AdvancedNetworkingmTLSPreview com o comando az feature register.

az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingmTLSPreview"

Verifique o registro bem-sucedido usando o az feature show comando. O registo demora alguns minutos a ser concluído.

az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingmTLSPreview"

Depois de o recurso ser exibido Registered, atualize o registro do Microsoft.ContainerService provedor de recursos usando o comando az provider register.

Ativar Serviços Avançados de Rede de Contentores e encriptação mTLS

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 Container Network Observability.

  • Segurança da Rede de Contentores: Oferece funcionalidades de segurança como filtragem de Nomes de Domínio Totalmente Qualificados (FQDN), Política L7 e encriptação em trânsito. Para saber mais, visite Container Network Security.

Observação

Clusters com o plano de dados Cilium suportam a Observabilidade da Rede de Contentores e a Segurança da Rede de Contentores a partir da versão 1.29 do Kubernetes.

Observação

A encriptação Cilium mTLS está desativada por defeito mesmo depois de ativar o ACNS. Para ativar o mTLS, defina o tipo de encriptação usando a flag --acns-transit-encryption-type mTLS.

# 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 mTLS \
    --generate-ssh-keys

Ativar Serviços Avançados de Rede de Contentores e encriptação mTLS num 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

Ativar a encriptação mTLS num cluster existente desencadeia um reinício de implementação do agente Cilium em todos os nós. Para clusters grandes, este processo pode demorar algum tempo e afetar temporariamente as cargas de trabalho. Planeie a atualização durante uma janela de manutenção ou período de baixo tráfego para minimizar a interrupção.

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns \
    --acns-transit-encryption-type mTLS

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

Inscrever um namespace

Para inscrever uma aplicação em mTLS, aplique o rótulo mTLS ao espaço de nomes que contém os pods da aplicação.

kubectl label namespace <namespace-name> io.cilium/mtls-enabled=true

O tráfego entre cargas de trabalho inscritas e não inscritas continua em texto simples sem causar problemas de conectividade ou falhas graves.

Verificar se o mTLS está ativado

Após inscrever um namespace para o Cilium mTLS, pode verificar que a autenticação e a encriptação estão ativas usando os seguintes métodos.

  1. Verifica se o ztunnel foi ativado:

    kubectl -n kube-system describe cm cilium-config | grep enable-ztunnel -A2
    

    Deverias ver o resultado a indicar que a encriptação do ztunnel está ativada.

  2. Verifique quais os namespaces inscritos:

    kubectl get namespaces -l io.cilium/mtls-enabled=true
    

    Isto mostra todos os namespaces rotulados para a inscrição no ztunnel.

    Para verificar se estes namespaces estão realmente inscritos na tabela StateDB:

    kubectl exec -n kube-system ds/cilium -- cilium-dbg statedb dump | jq '.["mtls-enrolled-namespaces"]'
    

    Os resultados desta consulta devem mostrar quais os namespaces que foram processados com sucesso pelo conciliador de inscrições.

  3. Verifique se os pods estão inscritos no SPIRE

    Executar no contentor do Servidor SPIRE e listar entradas:

    kubectl exec -n kube-system spire-server-0 -c spire-server -- \
    /opt/spire/bin/spire-server entry show
    

    Este comando consulta o armazenamento de dados SPIRE Server e imprime todas as identidades de cargas de trabalho registadas.

    Procure entradas que correspondam ao formato SPIFFE:

    spiffe://<trust-domain>/ns/<namespace>/sa/<serviceaccount>
    
  4. Verificar a inscrição de pods no ztunnel

    O Ztunnel expõe um endpoint administrativo local que permite inspecionar a sua configuração ativa, incluindo cargas de trabalho inscritas.

    Selecione um pod ztunnel.

    kubectl get pods -n kube-system \
    -l app.kubernetes.io/name=ztunnel-cilium \
    -o wide
    

    Redirecionar porta para o endpoint de administração do ztunnel. ztunnel expõe uma API de administração na porta 15000 (apenas para localhost por defeito).

    kubectl port-forward -n kube-system <ZTUNNEL_POD> 15000:15000
    

    Inspeciona o dump de configuração do ztunnel.

    curl -s http://localhost:15000/config_dump | jq
    

    Verifica se o teu pod está registado. Procura no dump de configuração a identidade SPIFFE da tua carga de trabalho ou a conta de namespace/serviço. Deverá ver entradas como o exemplo abaixo:

"workloads": [
    {
    "capacity": 1,
    "clusterId": "Kubernetes",
    "name": "test-server-5dc49df4cf-grr2f",
    "namespace": "ztunnel-test-enrolled",
    "networkMode": "Standard",
    "node": "10.224.0.5",
    "protocol": "HBONE",
    "serviceAccount": "default",
    "status": "Healthy",
    "trustDomain": "cluster.local",
    "uid": "30f37433-a83f-4e30-9946-f62cf5d10924",
    "workloadIps": [
        "192.168.0.50"
    ],
    "workloadType": "deployment"
    }
]

Desativar o mTLS num cluster existente

Recomenda-se desinscribir namespaces do mTLS antes de o desativar.

kubectl label namespace <namespace-name> io.cilium/mtls-enabled-

A encriptação mTLS pode ser desativada independentemente sem afetar outras funcionalidades da ACNS. Para o desativar, defina o flag --acns-transit-encryption-type para none.

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns \
    --acns-transit-encryption-type none