Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Začínáme s Azure Cloud Shellem.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Ověřování v Azure pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Použití a správa rozšíření pomocí Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
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.comNepodporovaný 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-acns
Advanced 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.
- Další informace o Advanced Container Networking Services pro Azure Kubernetes Service (AKS) najdete v tématu Co je Advanced Container Networking Services pro Azure Kubernetes Service (AKS)?.
Azure Kubernetes Service