Freigeben über


Einrichten des FQDN-Filterfeatures für Containernetzwerksicherheit in Erweiterte Container-Netzwerkdienste

In diesem Artikel erfahren Sie, wie Sie Erweiterte Container-Netzwerkdienste mit Containernetzwerksicherheit in AKS-Clustern einrichten.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Sollten Sie kein Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

Für die Schritte in diesem Artikel ist die Azure CLI mindestens in Version 2.56.0 erforderlich. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Installieren der Azure CLI-Erweiterung „aks-preview“

Installieren oder aktualisieren Sie die Azure CLI-Vorschauerweiterung mithilfe des Befehls az extension add oder 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

Aktivieren der erweiterten Container-Netzwerkdienste

Um fortfahren zu können, benötigen Sie ein AKS-Cluster mit Erweiterten Container-Netzwerkdiensten.

Der Befehl az aks create mit dem Flag Advanced Container Networking Services --enable-acns erstellt einen neuen AKS-Cluster mit allen Features der erweiterten Container-Netzwerkdiensten. Diese Funktionen umfassen Folgendes:

  • Container Network Observability: Bietet Einblicke in Ihren Netzwerkdatenverkehr. Weitere Informationen erhalten Sie unter Container Network Observability.

  • Containernetzwerksicherheit: Bietet Sicherheitsfeatures wie FQDN-Filterung. Weitere Informationen erhalten Sie unter Containernetzwerksicherheit.

Hinweis

Cluster mit der Cilium-Datenebene unterstützen Container Network Observability und Containernetzwerksicherheit ab Kubernetes-Version 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

Aktivieren von erweiterten Container-Netzwerkdiensten für einen vorhandenen Cluster

Der Befehl az aks update mit dem Advanced Container Networking Services-Flag --enable-acns aktualisiert einen vorhandenen AKS-Cluster mit allen erweiterten Containernetzwerkdiensten, die Container Network Observability und das Feature Containernetzwerksicherheit enthalten.

Hinweis

Nur Cluster mit der Cilium-Datenebene unterstützen die Features für Containernetzwerksicherheit der erweiterten Container-Netzwerkdienste.

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

Abrufen von Clusteranmeldeinformationen

Rufen Sie Ihre Clusteranmeldeinformationen mithilfe des Befehls az aks get-credentials ab.

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

Testen der Konnektivität mit einer Richtlinie

In diesem Abschnitt wird veranschaulicht, wie Sie eine Richtlinie beobachten, die über den Cilium-Agent durchgesetzt wird. Eine DNS-Anforderung wird an einen zulässigen FQDN gestellt und in einem anderen Fall wird sie blockiert.

Erstellen Sie eine Datei mit dem Namen demo-policy.yaml, und fügen Sie das folgende YAML-Manifest ein:

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"

Geben Sie den Namen Ihres YAML-Manifests an und wenden Sie es mithilfe von [kubectl apply][kubectl-apply] an:

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

Erstellen eines Demo-Pods

Erstellen sie einen client-Pod, auf dem Bash ausgeführt wird:

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

Eine Shell mit Hilfsprogrammen zum Testen des FQDN sollte mit der folgenden Ausgabe geöffnet werden:

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

Führen Sie in einem separaten Fenster den folgenden Befehl aus, um den Knoten des ausgeführten Pods abzurufen:

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

Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:

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>

Der Pod wird auf einem Knoten namens aks-nodepool1-22058664-vmss000001 ausgeführt. Rufen Sie die Cilium-Agent-Instanz ab, die auf diesem Knoten ausgeführt wird:

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

Der erwartete cilium-s4x24 sollte in der Ausgabe vorhanden sein.

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

Untersuchen eines Cilium-Agents

Verwenden Sie die cilium-CLI, um den blockierten Datenverkehr zu überwachen.

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

Führen Sie in dieser Shell cilium monitor -t drop aus:

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

Überprüfen der Richtlinie

Erstellen Sie aus der ersten Shell eine Anforderung an den zulässigen FQDN, *.bing.com, wie in der Richtlinie angegeben. Dies sollte erfolgreich sein und vom Agent zugelassen werden.

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

Erstellen Sie dann eine weitere Anforderung an einen FQDN, von der auszugehen ist, dass sie blockiert wird:

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

Der Cilium-Agent hat die Anforderung mit der folgenden Ausgabe blockiert:

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

Bereinigen von Ressourcen

Wenn Sie nicht vorhaben, diese Anwendung zu verwenden, löschen Sie die anderen Ressourcen, die Sie in diesem Artikel erstellt haben, mit dem Befehl az group delete.

  az group delete --name $RESOURCE_GROUP

Nächste Schritte

In diesem Artikel mit Anleitungen haben Sie erfahren, wie Sie Sicherheitsfeatures mit erweiterten Container-Netzwerkdiensten für Ihren AKS-Cluster installieren und aktivieren.