Implementación del cifrado mTLS de Cilium con Advanced Container Networking Services (versión preliminar)

Importante

El cifrado mTLS de Cilium con Advanced Cluster Networking Services se encuentra actualmente en versión preliminar. Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.

En este artículo se muestra cómo implementar el cifrado mTLS de Cilium con Advanced Container Networking Services en clústeres de Azure Kubernetes Service (AKS).

Prerrequisitos

  • La versión mínima de la CLI de Azure necesaria para los pasos de este artículo es la 2.71.0. Para encontrar la versión, ejecute az --version. Si necesita instalar o actualizar, consulte Install Azure CLI.

  • El cifrado mTLS de Cilium solo se admite con Azure CNI impulsado por Cilium. Si usa cualquier otro complemento de red, no se admite el cifrado mTLS de Cilium. Consulte Configuración de Azure CNI Powered by Cilium.

  • Asegúrese de que el clúster de AKS ejecuta Kubernetes versión 1.34.0 o posterior.

  • Asegúrese de que el clúster usa la versión 1.18 o posterior de Cilium.

Instalación de la extensión de la CLI de Azure aks-preview

Importante

Las características en versión preliminar de AKS están disponibles a elección del usuario y en régimen de autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

Instale o actualice la extensión de versión preliminar de la CLI de Azure mediante el az extension add comando o az extension update .

La versión mínima de la extensión de la CLI de Azure aks-preview es 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

Registro de la marca de característica AdvancedNetworkingmTLSPreview

Registre la marca de características de AdvancedNetworkingmTLSPreview mediante el comando az feature register.

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

Compruebe el registro correcto mediante el az feature show comando . El registro tarda unos minutos en completarse.

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

Una vez que la característica muestre Registered, actualice el registro del Microsoft.ContainerService proveedor de recursos mediante el az provider register comando .

Habilitación de Advanced Container Networking Services y cifrado mTLS

Para continuar, debe tener un clúster de AKS con Servicios avanzados de redes de contenedores habilitado.

El comando az aks create con la marca Advanced Container Networking Services, --enable-acns, crea un nuevo clúster de AKS con todas las características avanzadas de Container Networking Services. Estas características abarcan:

  • Observabilidad de red de contenedor: Proporciona información sobre el tráfico de red. Para obtener más información, visite Observabilidad de Red de Contenedores.

  • Seguridad de red del contenedor: Ofrece características de seguridad como el filtrado de nombres de dominio completo (FQDN), la directiva L7 y el cifrado en tránsito. Para más información, visite Seguridad de red de contenedores.

Nota:

Los clústeres con el plano de datos de Cilium admiten la observabilidad de red de contenedor y la seguridad de red de contenedor a partir de la versión 1.29 de Kubernetes.

Nota:

El cifrado mTLS de Cilium está deshabilitado de forma predeterminada incluso después de habilitar ACNS. Para habilitar mTLS, establezca el tipo de cifrado mediante la marca --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

Habilitación de Advanced Container Networking Services y cifrado mTLS en un clúster existente

El az aks update comando con la marca Advanced Container Networking Services, --enable-acns, actualiza un clúster de AKS existente con todas las características de Advanced Container Networking Services, que incluyen Container Network Observability y la característica Container Network Security.

Importante

Al habilitar el cifrado mTLS en un clúster existente, se desencadena un reinicio de lanzamiento del agente de Cilium en todos los nodos. En el caso de los clústeres de gran tamaño, este proceso puede tardar algún tiempo y puede afectar temporalmente a las cargas de trabajo. Planee la actualización durante una ventana de mantenimiento o un período de tráfico bajo para minimizar la interrupción.

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

Obtener credenciales del clúster

Obtenga las credenciales del clúster mediante el az aks get-credentials comando .

az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Inscribir un espacio de nombres

Para inscribir una aplicación en mTLS, aplique la etiqueta mTLS al espacio de nombres que contiene los pods de aplicación.

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

El tráfico entre cargas de trabajo inscritas y no inscritas continúa en texto no cifrado sin causar problemas de conectividad o errores duros.

Comprobación de que mTLS está habilitado

Después de inscribir un espacio de nombres para Cilium mTLS, puede comprobar que la autenticación y el cifrado están activos mediante los métodos siguientes.

  1. Compruebe que ztunnel se ha habilitado:

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

    Debería ver la salida que indica que el cifrado ztunnel está habilitado.

  2. Compruebe qué espacios de nombres están habilitados:

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

    Esto muestra todos los namespaces etiquetados para el registro de ztunnel.

    Para comprobar que estos espacios de nombres están inscritos realmente en la tabla StateDB:

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

    Los resultados de esta consulta deben mostrar qué espacios de nombres se han procesado correctamente por el conciliador de inscripciones.

  3. Verificar que los pods estén inscritos en SPIRE

    Ejecutar el comando dentro del contenedor de SPIRE Server y listar las entradas.

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

    Este comando consulta el almacén de datos de SPIRE Server e imprime todas las identidades de carga de trabajo registradas.

    Busque entradas que coincidan con el formato SPIFFE:

    spiffe://<trust-domain>/ns/<namespace>/sa/<serviceaccount>
    
  4. Verificar la inscripción de pods en ztunnel

    Ztunnel expone un punto de conexión de administrador local que permite inspeccionar su configuración activa, incluidas las cargas de trabajo inscritas.

    Seleccione un pod ztunnel.

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

    Reenviar el punto de conexión de administración de ztunnel. ztunnel expone una API de administrador en el puerto 15000 (solo localhost de forma predeterminada).

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

    Inspeccione el volcado de configuración de ztunnel.

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

    Compruebe que el pod está registrado. Busque en el volcado de configuración la identidad de SPIFFE o el espacio de nombres/la cuenta de servicio de su carga de trabajo. Las entradas deben ser parecidas a los siguientes resultados:

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

Deshabilitación de mTLS en un clúster existente

Se recomienda dar de baja los espacios de nombres de mTLS antes de deshabilitarlo.

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

El cifrado mTLS se puede deshabilitar independientemente sin afectar a otras características de ACNS. Para deshabilitarlo, establezca la marca --acns-transit-encryption-type a none.

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