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-policy
a 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 azure
az és --network-policy calico
a . 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.