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
- Un account Azure con una sottoscrizione attiva. Se non se ne dispone, creare un account gratuito prima di iniziare.
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
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:
Osservabilità della rete dei contenitori: fornisce informazioni dettagliate sul traffico di rete. Per altre informazioni, vedere Container Network Observability (Osservabilità della rete contenitori).
Sicurezza di rete dei contenitori: offre funzionalità di sicurezza come il filtro FQDN. Per altre informazioni, vedere Sicurezza di rete dei contenitori.
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.
- Per altre informazioni sui servizi avanzati di rete per contenitori per il servizio Azure Kubernetes, vedere Che cosa sono i servizi avanzati di rete per contenitori per il servizio Azure Kubernetes?.
Azure Kubernetes Service