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.
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
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:
Observabilidad de red de contenedor: Proporciona información sobre el tráfico de red. Para obtener más información, visite Observabilidad de la red de contenedor.
Seguridad de red de contenedor: ofrece características de seguridad como el filtrado de FQDN. 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 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.
- Para más información sobre los servicios avanzados de redes de contenedores para Azure Kubernetes Service (AKS), consulte ¿Qué son los servicios avanzados de redes de contenedores para Azure Kubernetes Service (AKS)?.
Azure Kubernetes Service