Zabezpečení provozu mezi pody pomocí zásad sítě v AKS

Při spouštění moderních aplikací založených na mikroslužbách v Kubernetes často chcete řídit, které komponenty spolu můžou vzájemně komunikovat. Princip nejnižšího oprávnění by se měl použít na to, jak může provoz přecházet mezi pody v clusteru Azure Kubernetes Service (AKS). Řekněme, že chcete blokovat provoz přímo do back-endových aplikací. Funkce zásad sítě v Kubernetes umožňuje definovat pravidla pro příchozí a výchozí provoz mezi pody v clusteru.

V tomto článku se dozvíte, jak nainstalovat modul zásad sítě a vytvořit zásady sítě Kubernetes pro řízení toku provozu mezi pody v AKS. Zásady sítě se dají použít pro uzly a pody založené na Linuxu nebo Windows v AKS.

Přehled zásad sítě

Ve výchozím nastavení můžou všechny pody v clusteru AKS odesílat a přijímat provoz bez omezení. Pokud chcete zlepšit zabezpečení, můžete definovat pravidla, která řídí tok provozu. Back-endové aplikace jsou často přístupné jenom požadovaným front-endovým službám, například. Nebo jsou databázové komponenty přístupné jenom pro aplikační vrstvy, které se k nim připojují.

Zásady sítě jsou specifikace Kubernetes, která definuje zásady přístupu pro komunikaci mezi pody. Při použití zásad sítě definujete uspořádanou sadu pravidel pro odesílání a příjem provozu. Pravidla použijete u kolekce podů, které odpovídají jednomu nebo více selektorům popisků.

Pravidla zásad sítě jsou definována jako manifesty YAML. Zásady sítě je možné zahrnout jako součást širšího manifestu, který také vytvoří nasazení nebo službu.

Možnosti zásad sítě v AKS

Azure poskytuje tři moduly zásad sítě pro vynucování zásad sítě:

Cilium je náš doporučený modul síťových zásad. Cilium vynucuje síťové zásady provozu pomocí filtru paketů BPF (Linux Berkeley Packet Filter), což je obecně efektivnější než "IPTables". Další podrobnosti najdete v dokumentaci ke službě Azure CNI Powered by Cilium.
K vynucování zadaných zásad používá Azure Network Policy Manager pro Linux tabulky IPTables pro Linux. Azure Network Policy Manager pro Windows používá ACLPolicies (Host Network Service) (HNS). Zásady se přeloží na sady povolených a zakázaných párů IP adres. Tyto páry se pak naprogramují jako IPTable pravidla nebo HNS ACLPolicy filtrují.

Rozdíly mezi moduly zásad sítě: Cilium, Azure NPM a Calico

Schopnost Azure Network Policy Manager Kaliko Cilium
Podporované platformy Linux, Windows Server 2022 (Preview). Linux, Windows Server 2019 a 2022. Linux
Podporované možnosti sítí Azure Container Networking Interface (CNI). Azure CNI (Linux, Windows Server 2019 a 2022) a kubenet (Linux). Azure CNI.
Dodržování předpisů se specifikací Kubernetes Všechny podporované typy zásad Podporují se všechny typy zásad. Podporují se všechny typy zásad.
Další funkce Nezaokrouhlovat. Rozšířený model zásad skládající se z globálních zásad sítě, globální sady sítí a koncového bodu hostitele. Další informace o použití rozhraní příkazového calicoctl řádku ke správě těchto rozšířených funkcí najdete v referenčních informacích o uživatelích calicoctl. Nezaokrouhlovat.
Technická podpora Podporuje ho tým podpory a technického týmu Azure. Podporuje ho tým podpory a technického týmu Azure. Podporuje ho tým podpory a technického týmu Azure.

Omezení

Azure Network Policy Manager nepodporuje protokol IPv6. Jinak Azure Network Policy Manager plně podporuje specifikace zásad sítě v Linuxu.

Ve Windows Azure Network Policy Manager nepodporuje:

  • Pojmenované porty
  • SCTP (Stream Control Transmission Protocol).
  • Záporný popisek shody nebo selektory oboru názvů (například všechny popisky kromě debug=true).
  • except bloky CIDR (classless interdomain routing) (CIDR s výjimkami).

Poznámka:

Protokoly podů Azure Network Policy Manageru zaznamenávají chybu, pokud se vytvoří nepodporovaná zásada.

Měřítko

S Azure Network Policy Managerem pro Linux nepovolujeme škálování nad 250 uzlů a 20 000 podů. Pokud se pokusíte škálovat nad rámec těchto limitů, může dojít k chybám typu Nedostatek paměti (OOM). Pokud chcete zvýšit limit paměti, vytvořte lístek podpory.

Než začnete

Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.0.61 nebo novější. 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.

Vytvoření clusteru AKS a povolení zásad sítě

Pokud chcete zobrazit zásady sítě v akci, vytvořte cluster AKS, který podporuje zásady sítě, a pak pracujete na přidávání zásad.

Pokud chcete použít Azure Network Policy Manager, musíte použít modul plug-in Azure CNI. Calico se dá použít s modulem plug-in Azure CNI nebo s modulem plug-in Kubenet CNI.

Následující ukázkový skript vytvoří cluster AKS s identitou přiřazenou systémem a povolí síťové zásady pomocí Azure Network Policy Manageru.

Poznámka:

Calico lze použít s --network-plugin azure parametry nebo --network-plugin kubenet parametry.

Místo použití identity přiřazené systémem můžete použít také identitu přiřazenou uživatelem. Další informace najdete v tématu Použití spravovaných identit.

Vytvoření clusteru AKS s povoleným Azure Network Policy Managerem – jenom Linux

V této části vytvoříte cluster s fondy uzlů Linuxu a povolenou službou Azure Network Policy Manager.

Začnete tím, že nahradíte hodnoty pro proměnné$RESOURCE_GROUP_NAME.$CLUSTER_NAME

$RESOURCE_GROUP_NAME=myResourceGroup-NP
$CLUSTER_NAME=myAKSCluster
$LOCATION=canadaeast

Vytvořte cluster AKS a zadejte azure pro network-pluginnetwork-policy

K vytvoření clusteru použijte následující příkaz:

az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --network-plugin azure \
    --network-policy azure

Vytvoření clusteru AKS s povolenou službou Azure Network Policy Manager – Windows Server 2022 (Preview)

V této části vytvoříte cluster s fondy uzlů Windows a povolenou službou Azure Network Policy Manager.

Poznámka:

Azure Network Policy Manager s uzly Windows je k dispozici jenom v systému Windows Server 2022.

Instalace rozšíření Azure CLI aks-Preview

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Pokud chcete rozšíření nainstalovat aks-preview , spusťte následující příkaz:

az extension add --name aks-preview

Pokud chcete aktualizovat na nejnovější verzi vydaného rozšíření, spusťte následující příkaz:

az extension update --name aks-preview

Registrace příznaku funkce WindowsNetworkPolicyPreview

WindowsNetworkPolicyPreview Příznak funkce zaregistrujte pomocí příkazu az feature register, jak je znázorněno v následujícím příkladu:

az feature register --namespace "Microsoft.ContainerService" --name "WindowsNetworkPolicyPreview"

Zobrazení stavu Zaregistrované trvá několik minut. Pomocí příkazu az feature show ověřte stav registrace:

az feature show --namespace "Microsoft.ContainerService" --name "WindowsNetworkPolicyPreview"

Pokud se stav projeví jako zaregistrovaný, aktualizujte registraci Microsoft.ContainerService poskytovatele prostředků pomocí příkazu az provider register :

az provider register --namespace Microsoft.ContainerService

Vytvoření clusteru AKS

Nyní nahradíte hodnoty pro $RESOURCE_GROUP_NAME$CLUSTER_NAME, a $WINDOWS_USERNAME proměnné.

$RESOURCE_GROUP_NAME=myResourceGroup-NP
$CLUSTER_NAME=myAKSCluster
$WINDOWS_USERNAME=myWindowsUserName
$LOCATION=canadaeast

Vytvořte uživatelské jméno, které se použije jako přihlašovací údaje správce pro kontejnery Windows Serveru v clusteru. Následující příkaz vás vyzve k zadání uživatelského jména. Nastavte ho na $WINDOWS_USERNAME. Nezapomeňte, že příkazy v tomto článku se zadávají do prostředí Bash.

echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME

K vytvoření clusteru použijte následující příkaz:

az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --windows-admin-username $WINDOWS_USERNAME \
    --network-plugin azure \
    --network-policy azure

Vytvoření clusteru bude trvat několik minut. Ve výchozím nastavení se cluster vytvoří pouze s fondem uzlů Linuxu. Pokud chcete používat fondy uzlů Windows, můžete ho přidat. Tady je příklad:

az aks nodepool add \
    --resource-group $RESOURCE_GROUP_NAME \
    --cluster-name $CLUSTER_NAME \
    --os-type Windows \
    --name npwin \
    --node-count 1

Vytvoření clusteru AKS s povoleným Calico

Vytvořte cluster AKS a zadejte --network-plugin azurea --network-policy calico. Určení --network-policy calico povolí Calico ve fondech uzlů Linuxu i Windows.

Pokud plánujete do clusteru přidat fondy uzlů Windows, uveďte windows-admin-username parametry, windows-admin-password které splňují požadavky na heslo Windows Serveru.

Důležité

V tuto chvíli je použití zásad sítě Calico s uzly Windows dostupné v nových clusterech pomocí Kubernetes verze 1.20 nebo novější s Calico 3.17.2 a vyžaduje, abyste používali sítě Azure CNI. Uzly Windows v clusterech AKS s povoleným Calico mají ve výchozím nastavení také povolenou plovoucí IP adresu.

U clusterů s pouze fondy uzlů s Linuxem, na kterých běží Kubernetes 1.20 se staršími verzemi Calico, se verze Calico automaticky upgraduje na verzi 3.17.2.

Vytvořte uživatelské jméno, které se použije jako přihlašovací údaje správce pro kontejnery Windows Serveru v clusteru. Následující příkaz vás vyzve k zadání uživatelského jména. Nastavte ho na $WINDOWS_USERNAME. Nezapomeňte, že příkazy v tomto článku se zadávají do prostředí Bash.

echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME
az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --windows-admin-username $WINDOWS_USERNAME \
    --network-plugin azure \
    --network-policy calico

Vytvoření clusteru bude trvat několik minut. Ve výchozím nastavení se cluster vytvoří pouze s fondem uzlů Linuxu. Pokud chcete používat fondy uzlů Windows, můžete ho přidat. Příklad:

az aks nodepool add \
    --resource-group $RESOURCE_GROUP_NAME \
    --cluster-name $CLUSTER_NAME \
    --os-type Windows \
    --name npwin \
    --node-count 1

Instalace Azure Network Policy Manageru nebo Calico v existujícím clusteru

Instalace Azure Network Policy Manageru nebo Calico na existující clustery AKS je také podporovaná.

Upozorňující

Procesupgraduho systému aktivuje, aby se každý fond uzlů znovu zopakoval. Upgrade jednotlivých fondů uzlů není podporován samostatně. Jakékoli přerušení sítě clusteru se podobá upgradu image uzlu nebo upgradu verze Kubernetes, kde je každý uzel ve fondu uzlů znovu image.

Příklad příkazu pro instalaci Azure Network Policy Manageru:

az aks update
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --network-policy azure

Příklad příkazu pro instalaci Calico:

Upozorňující

Toto upozornění platí pro upgrade clusterů Kubenet s podporou Calico na překrytí Azure CNI s povoleným Calico.

  • V clusterech Kubenet s povoleným Calico se Calico používá jako CNI i síťový modul zásad.
  • V clusterech Azure CNI se Calico používá jenom pro vynucování zásad sítě, ne jako CNI. To může způsobit krátkou prodlevu mezi spuštěním podu a tím, že Calico povolí odchozí provoz z podu.

Doporučuje se místo Calico používat Cilium, abyste se tomuto problému vyhnuli. Další informace o Cilium na webu Azure CNI Powered by Cilium

az aks update
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --network-policy calico

Upgrade existujícího clusteru s nainstalovaným Azure NPM nebo Calico na Azure CNI s využitím Cilium

Pokud chcete upgradovat existující cluster s nainstalovaným modulem Network Policy engine na Azure CNI Powered by Cilium, přečtěte si téma Upgrade existujícího clusteru na Azure CNI Powered by Cilium.

Ověření nastavení zásad sítě

Až bude cluster připravený, nakonfigurujte kubectl připojení ke clusteru Kubernetes pomocí příkazu az aks get-credentials . Tento příkaz stáhne přihlašovací údaje a nakonfiguruje rozhraní příkazového řádku Kubernetes tak, aby je používalo:

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

Pokud chcete začít ověřovat zásady sítě, vytvoříte ukázkovou aplikaci a nastavíte pravidla provozu.

Nejprve vytvořte obor názvů volaný demo pro spuštění ukázkových podů:

kubectl create namespace demo

Nyní vytvořte dva pody v clusteru s názvem client a server.

Poznámka:

Pokud chcete naplánovat klienta nebo server na konkrétním uzlu, přidejte následující bit před --command argument v příkazu kubectl spuštění příkazu kubectl vytvoření podu:

--overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux|windows"}}}'

Vytvořte server pod. Tento pod slouží na portu TCP 80:

kubectl run server -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --labels="app=server" --port=80 --command -- /agnhost serve-hostname --tcp --http=false --port "80"

Vytvořte client pod. Následující příkaz spustí Bash na podu client :

kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --command -- bash

Teď v samostatném okně spusťte následující příkaz pro získání IP adresy serveru:

kubectl get pod --output=wide -n demo

Výstup by měl vypadat takto:

NAME     READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE   READINESS GATES
server   1/1     Running   0          30s   10.224.0.72   akswin22000001   <none>           <none>

Testování připojení bez zásad sítě

Spuštěním následujícího příkazu v prostředí klienta ověřte připojení k serveru. Nahraďte server-ip pomocí IP adresy nalezené ve výstupu spuštění předchozího příkazu. Pokud je připojení úspěšné, neexistuje žádný výstup.

/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp

Testování připojení pomocí zásad sítě

Pokud chcete přidat zásady sítě, vytvořte soubor s názvem demo-policy.yaml a vložte následující manifest YAML:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: demo-policy
  namespace: demo
spec:
  podSelector:
    matchLabels:
      app: server
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: client
    ports:
    - port: 80
      protocol: TCP

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

kubectl apply –f demo-policy.yaml

Teď v prostředí klienta ověřte připojení k serveru spuštěním následujícího /agnhost příkazu:

/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp

Připojení ivity s provozem je blokována, protože server je označený app=server, ale klient není označený. Předchozí příkaz connect vrátí tento výstup:

TIMEOUT

Spuštěním následujícího příkazu označte client a ověřte připojení k serveru. Výstup by neměl vracet nic.

kubectl label pod client -n demo app=client

Odinstalace Azure Network Policy Manageru nebo Calico (Preview)

Požadavky:

  • aks-Preview rozšíření Azure CLI verze 0.5.166 nebo novější Viz Instalace rozšíření Azure CLI aks-Preview.
  • Azure CLI verze 2.54 nebo novější
  • AKS REST API verze 2023-08-02-preview nebo novější

Poznámka:

  • Proces odinstalace neodebere vlastní definice prostředků (CRD) a vlastní prostředky (CRS), které používá Calico. Všechny tyto identifikátory CRD a žádosti o přijetí změn mají názvy končící na "projectcalico.org" nebo "tigera.io". Tyto identifikátory CRD a přidružené CRS je možné ručně odstranit po úspěšné odinstalaci Calico (odstranění crd před odebráním Calico přeruší cluster).
  • Upgrade neodebere žádné prostředky NetworkPolicy v clusteru, ale po odinstalaci se tyto zásady už nevynucují.

Upozorňující

Procesupgraduho systému aktivuje, aby se každý fond uzlů znovu zopakoval. Upgrade jednotlivých fondů uzlů není podporován samostatně. Jakékoli přerušení sítě clusteru se podobá upgradu image uzlu nebo upgradu verze Kubernetes, kde je každý uzel ve fondu uzlů znovu image.

Pokud chcete z clusteru odebrat Azure Network Policy Manager nebo Calico, spusťte následující příkaz:

az aks update
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --network-policy none

Vyčištění prostředků

V tomto článku jste vytvořili obor názvů a dva pody a použili zásady sítě. Pokud chcete tyto prostředky vyčistit, použijte příkaz kubectl delete a zadejte název prostředku:

kubectl delete namespace demo

Další kroky

Další informace o síťových prostředcích najdete v tématu Koncepty sítě pro aplikace ve službě Azure Kubernetes Service (AKS).

Další informace ozásadách