Condividi tramite


Configurare la funzionalità di filtro FQDN per la sicurezza di rete dei contenitori in Servizi di rete avanzata dei contenitori

Questo articolo illustra come configurare Advanced Container Networking Services con la funzionalità Sicurezza di rete dei contenitori nei cluster del servizio Azure Kubernetes.

Prerequisiti

La versione minima dell'interfaccia della riga di comando di Azure necessaria per i passaggi descritti in questo articolo è 2.56.0. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Installare l'estensione dell'interfaccia della riga di comando di Azure aks-preview

Installare o aggiornare l'estensione di anteprima dell'interfaccia della riga di comando di Azure usando i comandi 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

Abilitare Advanced Container Networking Services

Per continuare, è necessario disporre di un cluster del servizio Azure Kubernetes con Servizi di rete dei contenitori avanzati abilitati.

Il az aks create comando con il flag Advanced Container Networking Services, --enable-acns, crea un nuovo cluster del servizio Azure Kubernetes con tutte le funzionalità di Advanced Container Networking Services. Queste funzionalità includono:

Nota

I cluster con il piano dati Cilium supportano la sicurezza container Network Observability and Container Network a partire da Kubernetes versione 1.29.

# 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

Abilitare Advanced Container Networking Services in un cluster esistente

Il az aks update comando con il flag Advanced Container Networking Services, --enable-acns, aggiorna un cluster del servizio Azure Kubernetes esistente con tutte le funzionalità di Advanced Container Networking Services che includono l'osservabilità della rete dei contenitori e la funzionalità Sicurezza di rete dei contenitori.

Nota

Solo i cluster con il piano dati Cilium supportano le funzionalità di sicurezza di rete dei contenitori di Advanced Container Networking Services.

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

Ottenere le credenziali del cluster

Ottenere le credenziali del cluster usando il comando az aks get-credentials.

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

Testare la connettività con un criterio

Questa sezione illustra come osservare un criterio applicato tramite l'agente Cilium. Viene effettuata una richiesta DNS a un FQDN consentito e a un altro caso in cui viene bloccato.

Creare un file denominato demo-policy.yaml e incollare il manifesto YAML seguente:

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"

Specificare il nome del manifesto YAML e applicarlo usando [kubectl apply][kubectl-apply]:

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

Creare un pod demo

Creare un client pod che esegue Bash:

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

Una shell con utilità per il test del nome di dominio completo deve essere aperta con l'output seguente:

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

In una finestra separata eseguire il comando seguente per ottenere il nodo del pod in esecuzione.

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

L'output deve essere simile all'esempio seguente:

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>

Il pod è in esecuzione in un nodo denominato aks-nodepool1-22058664-vmss000001. Ottenere l'istanza dell'agente Cilium in esecuzione nel nodo:

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

L'oggetto previsto cilium-s4x24 deve essere nell'output.

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

Esaminare un agente Cilium

Usare l'interfaccia della riga di comando per monitorare il cilium traffico bloccato.

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)
#

All'interno di questa shell eseguire 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

Verificare i criteri

Dalla prima shell creare una richiesta al nome di dominio completo consentito, *.bing.com, come specificato dai criteri. Questa operazione deve essere completata e consentita dall'agente.

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

Creare quindi un'altra richiesta a un FQDN che dovrebbe essere bloccata:

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

L'agente Cilium ha bloccato la richiesta con l'output:

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

Pulire le risorse

Se non si prevede di usare questa applicazione, eliminare le altre risorse create in questo articolo usando il comando az group delete.

  az group delete --name $RESOURCE_GROUP

Passaggi successivi

In questo articolo si è appreso come installare e abilitare le funzionalità di sicurezza con Advanced Container Networking Services per il cluster del servizio Azure Kubernetes.