Sdílet prostřednictvím


Nastavení funkce filtrování plně kvalifikovaného názvu domény pro zabezpečení sítě kontejneru v pokročilých službách Container Networking Services

V tomto článku se dozvíte, jak v clusterech AKS nastavit službu Advanced Container Networking Services s funkcí Zabezpečení sítě kontejnerů.

Požadavky

  • Účet Azure s aktivním předplatným. Pokud ho nemáte, vytvořte si bezplatný účet před tím, než začnete.

Minimální verze Azure CLI vyžadovaná pro kroky v tomto článku je 2.71.0. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Omezení:

  • Podpora zásad zahrnujících zástupné znaky v plně kvalifikovaných názvech domény je částečná. To znamená, že můžete vytvořit zásady, které odpovídají konkrétním vzorům s úvodním zástupným znakem (například .example.com), ale nemůžete použít univerzální zástupný znak () ke spárování všech domén v poli. spec.egress.toPorts.rules.dns.matchPattern
  • Podporovaný vzor:

    *.example.com - To umožňuje provoz do všech subdomén pod example.com.

    app*.example.com – Toto pravidlo je konkrétnější a umožňuje pouze provoz do subdomén, které začínají na "app" v rámci example.com

  • Nepodporovaný vzor

    * Tento pokus o shodu s libovolným názvem domény není podporován.

  • Filtrování plně kvalifikovaného názvu domény se v současné době nepodporuje u dns místního uzlu.
  • Názvy služeb Kubernetes nejsou podporovány.
  • Ostatní zásady L7 nejsou podporovány.
  • Pody FQDN můžou vykazovat snížení výkonu při zpracování více než 1 000 požadavků za sekundu.
  • Pokud je zakázané zabezpečení Advanced Container Networking Services (ACNS), budou zablokovány zásady FQDN a L7 (HTTP, HTTPS, Kafka a gRPC).
  • Kontejnerové image založené na Alpine mohou narazit na problémy s překladem DNS při použití se síťovými zásadami Cilium. Důvodem je omezená iterace domény vyhledávání musl libc. Pokud chcete tento problém obejít, explicitně definujte všechny domény vyhledávání v pravidlech DNS zásad sítě pomocí vzorců se zástupnými cardy, jako je následující příklad.
rules:
  dns:
  - matchPattern: "*.example.com"
  - matchPattern: "*.example.com.*.*"
  - matchPattern: "*.example.com.*.*.*"
  - matchPattern: "*.example.com.*.*.*.*"
  - matchPattern: "*.example.com.*.*.*.*.*"
- toFQDNs:
  - matchPattern: "*.example.com"

Povolení pokročilých kontejnerových síťových služeb

Abyste mohli pokračovat, musíte mít cluster AKS s povolenou službou Advanced Container Networking Services .

Příkaz az aks create s příznakem --enable-acnsAdvanced Container Networking Services vytvoří nový cluster AKS se všemi funkcemi Advanced Container Networking Services. Mezi tyto funkce patří:

  • Pozorovatelnost služby Container Network: Poskytuje přehled o síťovém provozu. Další informace najdete v tématu Pozorovatelnost služby Container Network.

  • Zabezpečení sítě kontejneru: Nabízí funkce zabezpečení, jako je filtrování plně kvalifikovaného názvu domény (FQDN). Další informace najdete v tématu Container Network Security.

# 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 \
    --network-plugin azure \
    --network-dataplane cilium \
    --node-count 2 \
    --enable-acns

Povolení rozšířených služeb síťování kontejnerů v existujícím clusteru

Příkaz az aks update s příznakem --enable-acns Pokročilých síťových služeb kontejnerů aktualizuje existující cluster AKS se všemi funkcemi pokročilých síťových služeb kontejnerů, které zahrnují funkci pozorovatelnosti sítě kontejnerů a funkci Zabezpečení sítě kontejnerů.

Poznámka:

Pouze clustery s rovinou dat Cilium podporují funkce zabezpečení kontejnerové sítě služby Advanced Container Networking Services.

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

Získání přihlašovacích údajů clusteru

Pomocí příkazu získejte přihlašovací údaje ke clusteru az aks get-credentials .

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

Testování připojení pomocí zásad

Tato část ukazuje, jak sledovat zásady, které se vynucují prostřednictvím agenta Cilium. Požadavek DNS se provede na povolený plně kvalifikovaný název domény a jiný případ, kdy je zablokovaný.

Vytvořte soubor s názvem demo-policy.yaml a vložte následující manifest YAML:

Poznámka:

Pole spec.egress.toPorts.rules.dns.matchPattern je povinné při použití plně kvalifikovaných názvů domén v zásadách. V této části se dozvíte, že Cilium zkontroluje dotazy DNS a porovná je se zadanými vzory. Bez této části umožňuje Cilium pouze provoz DNS a nezkontroluje jeho obsah, aby se dozvěděl, které IP adresy jsou přidružené k plně kvalifikovaným názvům domén. V důsledku toho jsou připojení k těmto IP adresám (tj. provoz mimo DNS) blokovaná, protože Cilium je nemůže přidružit k povolené doméně.

Nejprve zkontrolujte část omezení .

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"

Zadejte název manifestu YAML a použijte ho pomocí příkazu [kubectl apply][kubectl-apply]:

kubectl create ns demo
kubectl apply -f demo-policy.yaml -n demo

Vytvořte ukázkový pod

Vytvořte pod se spuštěným client Bashem:

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

Shell s nástroji pro testování FQDN by se mělo otevřít s následujícím výstupem:

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

Spusťte následující příkaz v samostatném okně, abyste získali uzel běžícího podu.

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

Výstup by měl vypadat zhruba jako v tomto příkladu:

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>

Pod běží na uzlu s názvem aks-nodepool1-22058664-vmss000001. Získejte instanci agenta Cilium spuštěnou na tomto uzlu:

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

Očekávaný výsledek cilium-s4x24 by měl být ve výstupu.

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

Prohlédnout agenta Cilium

Pomocí rozhraní příkazového cilium řádku můžete monitorovat blokovaný provoz.

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

V tomto prostředí spusťte cilium monitor -t drop příkaz:

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

Ověřit zásadu

V prvním shellu vytvořte požadavek na povolený plně kvalifikovaný název domény *.bing.com, jak to určuje zásada. Tento požadavek by měl být úspěšný a povolený agentem.

./agnhost connect www.bing.com:80

Pak vytvořte další požadavek na plně kvalifikovaný název domény, který je očekáván jako blokovaný:

./agnhost connect www.example.com:80

Agent Cilium zablokoval požadavek výstupem:

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

Uvolnění prostředků

Pokud nemáte v plánu používat tuto aplikaci, pomocí příkazu odstraňte další prostředky, které jste vytvořili v tomto článku az group delete .

  az group delete --name $RESOURCE_GROUP

Další kroky

V tomto článku s postupy jste se dozvěděli, jak nainstalovat a povolit funkce zabezpečení pomocí Advanced Container Networking Services pro cluster AKS.