Compartir a través de


Configuración de la característica de filtrado de FQDN para la seguridad de red de contenedor en Servicios avanzados de redes de contenedores

En este artículo se muestra cómo configurar los Servicios avanzados de redes de contenedores con la característica Seguridad de red de contenedores en clústeres de AKS.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa. Si no tiene una, cree una cuenta gratuita antes de empezar.

La versión mínima de la CLI de Azure necesaria para los pasos de este artículo es la 2.56.0. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Instalación de la versión preliminar de la extensión de la CLI de Azure en versión preliminar de AKS

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

# 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

Habilitación de Servicios avanzados de redes de contenedores

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:

Nota:

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

# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"

# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --generate-ssh-keys \
    --location eastus \
    --max-pods 250 \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --network-dataplane cilium \
    --node-count 2 \
    --pod-cidr 192.168.0.0/16 \
    --kubernetes-version 1.29 \
    --enable-acns

Habilitación de Servicios avanzados de redes de contenedores en un clúster existente

El comando az aks update con la marca Advanced Container Networking Services, --enable-acns, actualiza un clúster de AKS existente con todas las características avanzadas de Container Networking Services, que incluye Observabilidad de red de contenedor y la característica Seguridad de red de contenedor.

Nota:

Solo los clústeres con el plano de datos de Cilium admiten características de seguridad de red de contenedor de Advanced Container Networking Services.

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns

Obtener credenciales del clúster

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

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

Prueba de la conectividad con una directiva

En esta sección se muestra cómo observar una directiva que se aplica a través del Agente de Cilium. Se realiza una solicitud DNS a un FQDN permitido y otro caso en el que se bloquea.

Cree un archivo denominado demo-policy.yaml y pegue el siguiente manifiesto de YAML:

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "allow-bing-fqdn"
spec:
  endpointSelector:
    matchLabels:
      app: demo-container
  egress:
    - toEndpoints:
      - matchLabels:
          "k8s:io.kubernetes.pod.namespace": kube-system
          "k8s:k8s-app": kube-dns
      toPorts:
        - ports:
           - port: "53"
             protocol: ANY
          rules:
            dns:
              - matchPattern: "*.bing.com"
    - toFQDNs:
      - matchPattern: "*.bing.com"

Especifique el nombre del manifiesto de YAML y aplíquelo mediante [kubectl apply][kubectl-apply]:

kubectl apply –f demo-policy.yaml -n demo

Creación de un pod de demostración

Cree un pod client que ejecute Bash:

kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.43 --labels="app=demo-container" --command -- bash

Un shell con utilidades para probar el FQDN debe abrirse con la salida siguiente:

If you don't see a command prompt, try pressing enter.
bash-5.0#

En una ventana independiente, ejecute el siguiente comando para obtener el nodo del pod en ejecución.

kubectl get po -n demo --sort-by="{spec.nodeName}" -o wide

La salida debería tener un aspecto similar al ejemplo siguiente:

NAME     READY   STATUS    RESTARTS   AGE     IP              NODE                                NOMINATED NODE   READINESS GATES
client   1/1     Running   0          5m50s   192.168.0.139   aks-nodepool1-22058664-vmss000001   <none>           <none>

El pod se ejecuta en un nodo denominado aks-nodepool1-22058664-vmss000001. Obtenga la instancia del agente de Cilium que se ejecuta en ese nodo:

k get po -n kube-system -o wide --field-selector spec.nodeName="aks-nodepool1-22058664-vmss000001" | grep "cilium"

El cilium-s4x24 esperado debe estar en la salida.

cilium-s4x24                          1/1     Running   0          47m   10.224.0.4      aks-nodepool1-22058664-vmss000001   <none>           <none>

Inspección de un agente de Cilium

Use la CLI de cilium para supervisar el tráfico que se está bloqueando.

kubectl exec -it -n kube-system cilium-s4x24 -- sh
Defaulted container "cilium-agent" out of: cilium-agent, install-cni-binaries (init), mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init), block-wireserver (init)
#

Dentro de este shell, ejecute cilium monitor -t drop:

Listening for events on 2 CPUs with 64x4096 of shared memory
Press Ctrl-C to quit
time="2024-10-08T17:48:27Z" level=info msg="Initializing dissection cache..." subsys=monitor

Comprobación de la directiva

Desde el primer shell, cree una solicitud al FQDN permitido, *.bing.com, según lo especificado por la directiva. Esto debe ser correcto y permitido por el agente.

bash-5.0# ./agnhost connect www.bing.com:80

A continuación, cree otra solicitud a un FQDN que se espera que se bloquee:

bash-5.0# ./agnhost connect www.example.com:80

El agente de Cilium bloqueó la solicitud con la salida:

xx drop (Policy denied) flow 0xfddd76f6 to endpoint 0, ifindex 29, file bpf_lxc.c:1274, , identity 48447->world: 192.168.0.149:45830 -> 93.184.215.14:80 tcp SYN

Limpieza de recursos

Si no planea usar esta aplicación, elimine los demás recursos que creó en este artículo mediante el comando az group delete.

  az group delete --name $RESOURCE_GROUP

Pasos siguientes

En este artículo de procedimientos, ha aprendido a instalar y habilitar características de seguridad con Servicios avanzados de redes de contenedores para el clúster de AKS.