A podok közötti forgalom védelme hálózati szabályzatok használatával az AKS-ben

Amikor modern, mikroszolgáltatás-alapú alkalmazásokat futtat a Kubernetesben, gyakran szeretné szabályozni, hogy mely összetevők kommunikálhatnak egymással. A minimális jogosultság elvét kell alkalmazni arra, hogy a forgalom hogyan haladhat a podok között az Azure Kubernetes Service-fürtökben. Tegyük fel, hogy közvetlenül a háttéralkalmazások felé szeretné blokkolni a forgalmat. A Kubernetes hálózati házirend-funkciója lehetővé teszi a fürt podjai közötti bejövő és kimenő forgalom szabályainak meghatározását.

Ez a cikk bemutatja, hogyan telepítheti a hálózati házirendmotort, és hogyan hozhat létre Kubernetes hálózati házirendeket a podok közötti forgalom szabályozásához az AKS-ben. A hálózati házirendek linuxos vagy Windows-alapú csomópontokhoz és podokhoz használhatók az AKS-ben.

A hálózati házirend áttekintése

Az AKS-fürtök összes podja alapértelmezés szerint korlátozás nélkül küldhet és fogadhat forgalmat. A biztonság javítása érdekében olyan szabályokat határozhat meg, amelyek szabályozzák a forgalom áramlását. A háttéralkalmazások gyakran csak a szükséges előtér-szolgáltatásoknak vannak kitéve, például. Vagy az adatbázis-összetevők csak a hozzájuk csatlakozó alkalmazásszintekhez érhetők el.

A hálózati házirend egy Kubernetes-specifikáció, amely hozzáférési szabályzatokat határoz meg a podok közötti kommunikációhoz. Hálózati házirendek használata esetén a forgalom küldésére és fogadására vonatkozó szabályok rendezett készletét határozza meg. A szabályokat egy vagy több címkeválasztónak megfelelő podok gyűjteményére alkalmazza.

A hálózati házirend-szabályok YAML-jegyzékként vannak definiálva. A hálózati szabályzatok egy szélesebb jegyzék részeként is szerepelhetnek, amely üzembe helyezést vagy szolgáltatást is létrehoz.

Hálózati házirend beállításai az AKS-ben

Az Azure három hálózati házirend-motort biztosít a hálózati szabályzatok kikényszerítéséhez:

  • Cilium az Azure CNI Powered by Ciliumot használó AKS-fürtökhöz.
  • Azure Network Policy Manager.
  • Calico, egy nyílt forráskódú hálózati és hálózati biztonsági megoldás, amelyet Tigera alapított.

A Cilium az ajánlott hálózati házirend-motorunk. A Cilium a Linux Berkeley Packet Filter (BPF) használatával kényszeríti ki a forgalomra vonatkozó hálózati szabályzatot, amely általában hatékonyabb, mint az "IPTables". További részleteket az Azure CNI Powered by Cilium dokumentációjában talál.
A megadott szabályzatok kényszerítéséhez a Linuxhoz készült Azure Network Policy Manager Linux IPTables-t használ. A Windowshoz készült Azure Network Policy Manager gazdagéphálózati szolgáltatás (HNS) ACLPolicies szolgáltatást használ. Egy szabályzat az engedélyezett és tiltott IP-címpárok halmazára van lefordítva. Ezek a párok ezután szabályokként IPTable vannak programozva vagy HNS ACLPolicy szűrve.

A hálózati házirend motorjai közötti különbségek: Cilium, Azure NPM és Calico

Funkció Azure Network Policy Manager Calico Cilium
Támogatott platformok Linux, Windows Server 2022 (előzetes verzió). Linux, Windows Server 2019 és 2022. Linux.
Támogatott hálózatkezelési lehetőségek Azure Container Networking Interface (CNI). Azure CNI (Linux, Windows Server 2019 és 2022) és kubenet (Linux). Azure CNI.
A Kubernetes specifikációnak való megfelelés Minden támogatott házirendtípus Minden szabályzattípus támogatott. Minden szabályzattípus támogatott.
Egyéb jellemzők Nincs. Kiterjesztett szabályzatmodell, amely globális hálózati házirendből, globális hálózatkészletből és gazdagépvégpontból áll. További információ arról, hogy a parancssori calicoctl felület használatával kezelheti ezeket a kiterjesztett funkciókat, lásd a calicoctl felhasználói referenciáját. Nincs.
Támogatás Az Azure támogatási és mérnöki csapata támogatja. Az Azure támogatási és mérnöki csapata támogatja. Az Azure támogatási és mérnöki csapata támogatja.

Korlátozások

Az Azure Network Policy Manager nem támogatja az IPv6-ot. Ellenkező esetben az Azure Network Policy Manager teljes mértékben támogatja a linuxos hálózati házirendek specifikációit.

Windows rendszerben az Azure Network Policy Manager nem támogatja a következőt:

  • Elnevezett portok.
  • Stream Control Transmission Protocol (SCTP).
  • Negatív egyezési címke vagy névtérválasztók (például az összes címke kivételével debug=true).
  • except osztály nélküli tartományközi útválasztási (CIDR) blokkok (kivételekkel rendelkező CIDR).

Feljegyzés

Az Azure Network Policy Manager podnaplói hibát rögzítenek, ha nem támogatott szabályzat jön létre.

Hangsor

A Linuxhoz készült Azure Network Policy Managerrel nem engedélyezzük a 250 csomóponton és 20 000 podon túli skálázást. Ha túllépi ezeket a korlátokat, "Memóriahiány" (OOM) hibákba ütközhet. A memóriakorlát növeléséhez hozzon létre egy támogatási jegyet.

Mielőtt elkezdené

Telepítenie és konfigurálnia kell az Azure CLI 2.0.61-es vagy újabb verzióját. A verzió azonosításához futtassa a következőt: az --version. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.

AKS-fürt létrehozása és hálózati szabályzat engedélyezése

A hálózati szabályzatok működés közbeni megtekintéséhez hozzon létre egy hálózati házirendet támogató AKS-fürtöt, majd dolgozzon a szabályzatok hozzáadásán.

Az Azure Network Policy Manager használatához az Azure CNI beépülő modult kell használnia. A Calico az Azure CNI beépülő modullal vagy a Kubenet CNI beépülő modullal is használható.

Az alábbi példaszkript egy rendszer által hozzárendelt identitással rendelkező AKS-fürtöt hoz létre, és engedélyezi a hálózati szabályzatot az Azure Network Policy Manager használatával.

Feljegyzés

A Calico használható a paraméterekkel vagy --network-plugin kubenet a --network-plugin azure paraméterekkel.

Rendszer által hozzárendelt identitás használata helyett felhasználó által hozzárendelt identitást is használhat. További információ: Felügyelt identitások használata.

AKS-fürt létrehozása engedélyezett Azure Network Policy Managerrel – csak Linux

Ebben a szakaszban linuxos csomópontkészletekkel rendelkező fürtöt hoz létre, és engedélyezve van az Azure Network Policy Manager.

Első lépésként cserélje le a változók és $CLUSTER_NAME a $RESOURCE_GROUP_NAME változók értékeit.

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

Hozza létre az AKS-fürtöt, és adja meg azure az és network-policya network-plugin .

Fürt létrehozásához használja a következő parancsot:

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

AKS-fürt létrehozása engedélyezett Azure Network Policy Managerrel – Windows Server 2022 (előzetes verzió)

Ebben a szakaszban olyan fürtöt hoz létre, amelyben a Windows-csomópontkészletek és az Azure Network Policy Manager engedélyezve van.

Feljegyzés

A Windows-csomópontokkal rendelkező Azure Network Policy Manager csak Windows Server 2022 rendszeren érhető el.

Az aks-preview Azure CLI-bővítmény telepítése

Fontos

Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióit részben az ügyfélszolgálat fedezi a legjobb munkamennyiség alapján. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:

A aks-preview bővítmény telepítéséhez futtassa a következő parancsot:

az extension add --name aks-preview

A bővítmény legújabb verziójára való frissítéshez futtassa a következő parancsot:

az extension update --name aks-preview

A WindowsNetworkPolicyPreview funkciójelző regisztrálása

Regisztrálja a WindowsNetworkPolicyPreview funkciójelzőt az az feature register paranccsal, ahogyan az az alábbi példában látható:

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

Néhány percig tart, amíg az állapot megjelenik a Regisztrált állapotban. Ellenőrizze a regisztrációs állapotot az az feature show paranccsal:

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

Ha az állapot a Regisztrált állapotot tükrözi, frissítse az erőforrás-szolgáltató regisztrációját az Microsoft.ContainerService az provider register paranccsal:

az provider register --namespace Microsoft.ContainerService

Az AKS-fürt létrehozása

Most cserélje le a , $CLUSTER_NAMEés $WINDOWS_USERNAME változók $RESOURCE_GROUP_NAMEértékeit.

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

Hozzon létre egy felhasználónevet rendszergazdai hitelesítő adatokként a fürtön lévő Windows Server-tárolókhoz. Az alábbi parancs egy felhasználónév megadását kéri. Állítsa be a következőre $WINDOWS_USERNAME: . Ne feledje, hogy a cikkben szereplő parancsok egy Bash-rendszerhéjba kerülnek.

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

Fürt létrehozásához használja a következő parancsot:

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

A fürt létrehozása néhány percet vesz igénybe. Alapértelmezés szerint a fürt csak Linux-csomópontkészlettel jön létre. Ha Windows-csomópontkészleteket szeretne használni, felvehet egyet. Példa:

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

AKS-fürt létrehozása a Calico engedélyezésével

Hozza létre az AKS-fürtöt, és adja meg --network-plugin azureaz és --network-policy calicoa . A beállítás --network-policy calico lehetővé teszi a Calico használatát Linux- és Windows-csomópontkészleteken is.

Ha Windows-csomópontkészleteket szeretne hozzáadni a fürthöz, adja meg a windows-admin-username Windows Server jelszókövetelményeinek megfelelő paramétereket és windows-admin-password paramétereket.

Fontos

Jelenleg a Calico hálózati szabályzatainak Windows-csomópontokkal való használata új fürtökön érhető el a Kubernetes 1.20-es vagy újabb verziójával a Calico 3.17.2-es verziójával, és azure CNI-hálózatkezelést igényel. A Calico-kompatibilis AKS-fürtök Windows-csomópontjai alapértelmezés szerint engedélyezve vannak a lebegő IP-címmel is.

Azon fürtök esetében, amelyben csak a Kubernetes 1.20-at futtató Linux-csomópontkészletek futnak a Calico korábbi verzióival, a Calico verziója automatikusan a 3.17.2-es verzióra frissül.

Hozzon létre egy felhasználónevet rendszergazdai hitelesítő adatokként a fürtön lévő Windows Server-tárolókhoz. Az alábbi parancs egy felhasználónév megadását kéri. Állítsa be a következőre $WINDOWS_USERNAME: . Ne feledje, hogy a cikkben szereplő parancsok egy Bash-rendszerhéjba kerülnek.

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

A fürt létrehozása néhány percet vesz igénybe. Alapértelmezés szerint a fürt csak Linux-csomópontkészlettel jön létre. Ha Windows-csomópontkészleteket szeretne használni, felvehet egyet. Példa:

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

Az Azure Network Policy Manager vagy a Calico telepítése meglévő fürtön

Az Azure Network Policy Manager vagy a Calico telepítése meglévő AKS-fürtökre is támogatott.

Figyelmeztetés

A frissítési folyamat aktiválja az egyes csomópontkészleteket, hogy egyidejűleg újraképeződjenek. Az egyes csomópontkészletek külön frissítése nem támogatott. A fürt hálózatának megszakadása hasonló a csomópontok lemezképének frissítéséhez vagy a Kubernetes verziófrissítéséhez , ahol a csomópontkészlet minden csomópontja újra van rendszerképben.

Példaparancs az Azure Network Policy Manager telepítéséhez:

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

Példaparancs a Calico telepítéséhez:

Figyelmeztetés

Ez a figyelmeztetés a Kubenet-fürtök Calico-kompatibilis Azure CNI-átfedésre való frissítésére vonatkozik, és a Calico engedélyezve van.

  • A Calico-kompatibilis Kubenet-fürtökben a Calico CNI- és hálózati házirendmotorként is használható.
  • Az Azure CNI-fürtökben a Calico csak a hálózati házirendek kikényszerítésére szolgál, nem pedig CNI-ként. Ez rövid késleltetést okozhat a pod indítása és a Calico által a podról kimenő forgalom engedélyezése között.

A probléma elkerülése érdekében javasoljuk, hogy a Calico helyett a Ciliumot használja. További információ a Ciliumról az Azure CNI Powered by Ciliumban

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

Meglévő fürt frissítése, amely telepítette az Azure NPM-et vagy a Calico-t az Azure CNI Powered by Ciliumra

Ha olyan meglévő fürtöt szeretne frissíteni, amely hálózati házirend-motort telepített az Azure CNI Powered by Ciliumra, tekintse meg a meglévő fürtök frissítését az Azure CNI Powered by Ciliumra

Hálózati házirend beállításának ellenőrzése

Ha a fürt készen áll, konfigurálja kubectl a Kubernetes-fürthöz való csatlakozást az az aks get-credentials paranccsal. Ez a parancs letölti a hitelesítő adatokat, és konfigurálja a Kubernetes parancssori felületét a használatukhoz:

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

A hálózati házirend ellenőrzésének megkezdéséhez hozzon létre egy mintaalkalmazást, és állítsa be a forgalmi szabályokat.

Először hozzon létre egy névteret demo a példa podok futtatásához:

kubectl create namespace demo

Most hozzon létre két podot a fürt client neve és server.

Feljegyzés

Ha egy adott csomóponton szeretné ütemezni az ügyfelet vagy a kiszolgálót, adja hozzá a következő bitet a --command podlétrehozási kubectl-futtatási parancs argumentuma előtt:

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

Hozzon létre egy podot server . Ez a pod a 80-s TCP-porton szolgál:

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"

Hozzon létre egy podot client . A következő parancs futtatja a Basht a client podon:

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

Most egy külön ablakban futtassa a következő parancsot a kiszolgáló IP-címének lekéréséhez:

kubectl get pod --output=wide -n demo

A kimenetnek a következőképpen kell kinéznie:

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

Kapcsolat tesztelése hálózati házirend nélkül

Az ügyfél rendszerhéjában futtassa a következő parancsot a kiszolgálóval való kapcsolat ellenőrzéséhez. Cserélje le server-ip az előző parancs futtatásából származó kimenetben található IP-cím használatával. Ha a kapcsolat sikeres, nincs kimenet.

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

Kapcsolat tesztelése hálózati házirenddel

Hálózati szabályzatok hozzáadásához hozzon létre egy nevű demo-policy.yaml fájlt, és illessze be a következő YAML-jegyzékfájlt:

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

Adja meg a YAML-jegyzék nevét, és alkalmazza a kubectl apply használatával:

kubectl apply –f demo-policy.yaml

Most az ügyfél rendszerhéjában ellenőrizze a kiszolgálóval való kapcsolatot az alábbi /agnhost parancs futtatásával:

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

Csatlakozás forgalommal való összhangban a rendszer letiltja a kiszolgáló címkéjétapp=server, de az ügyfél nincs címkével ellátva. Az előző kapcsolódási parancs a következő kimenetet adja eredményként:

TIMEOUT

Futtassa a következő parancsot a client kiszolgálóval való kapcsolat címkézéséhez és ellenőrzéséhez. A kimenetnek nem szabad semmit visszaadnia.

kubectl label pod client -n demo app=client

Az Azure Network Policy Manager vagy a Calico eltávolítása (előzetes verzió)

Követelmények:

  • aks-preview Azure CLI-bővítmény 0.5.166-os vagy újabb verzió. Lásd : Az aks-preview Azure CLI-bővítmény telepítése.
  • Az Azure CLI 2.54-es vagy újabb verziója
  • Az AKS REST API 2023-08-02-preview vagy újabb verziója

Feljegyzés

  • Az eltávolítási folyamat nem távolítja el a Calico által használt egyéni erőforrás-definíciókat (CRD-ket) és egyéni erőforrásokat (CRs). Ezek a CRD-k és AR-k mindegyike "projectcalico.org" vagy "tigera.io" végződésű névvel rendelkezik. Ezek a CRD-k és a kapcsolódó hitelesítésszolgáltatók manuálisan törölhetők a Calico sikeres eltávolítása után (a CRD-k törlése a Calico eltávolítása előtt megszakítja a fürtöt).
  • A frissítés nem távolítja el a NetworkPolicy-erőforrásokat a fürtben, de az eltávolítás után ezek a házirendek már nem lesznek kényszerítve.

Figyelmeztetés

A frissítési folyamat aktiválja az egyes csomópontkészleteket, hogy egyidejűleg újraképeződjenek. Az egyes csomópontkészletek külön frissítése nem támogatott. A fürt hálózatának megszakadása hasonló a csomópontok lemezképének frissítéséhez vagy a Kubernetes verziófrissítéséhez , ahol a csomópontkészlet minden csomópontja újra van rendszerképben.

Az Azure Network Policy Manager vagy a Calico fürtből való eltávolításához futtassa a következő parancsot:

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

Az erőforrások eltávolítása

Ebben a cikkben létrehozott egy névteret és két podot, és alkalmazott egy hálózati házirendet. Az erőforrások törléséhez használja a kubectl delete parancsot, és adja meg az erőforrás nevét:

kubectl delete namespace demo

Következő lépések

A hálózati erőforrásokról további információt az Azure Kubernetes Service (AKS) alkalmazásainak hálózati fogalmai című témakörben talál.

A szabályzatokról további információt a Kubernetes hálózati házirendjeiben talál.