A Calico hálózati házirendjének használata a podforgalom védelméhez
A következőkre vonatkozik: AKS az Azure Stack HCI 22H2-ben, AKS Windows Serveren
Ezzel a lépésenkénti útmutatóval ellenőrizheti és kipróbálhatja az alapszintű pod-pod kapcsolatot, és calico hálózati szabályzatokat használhat egy fürtön az Azure Arc-környezet által engedélyezett AKS-ben. Ez a cikk bemutatja, hogyan hozhat létre ügyfél- és kiszolgáló podokat Linux- és Windows-csomópontokon, hogyan ellenőrizheti a podok közötti kapcsolatot, és hogyan alkalmazhat alapszintű hálózati házirendet a podforgalom elkülönítéséhez az AKS Arcban.
Előfeltételek
Az AKS Arc üzembe helyezéséhez kövesse az AKS-gazdagép beállításának lépéseit.
Az útmutató használatához a következőkre van szüksége:
- Egy AKS számítási feladatfürt.
- Legalább egy windowsos munkavégző csomópont üzembe helyezése a fürtön.
- Legalább egy Linux-feldolgozó csomópont üzembe helyezve a fürtön.
- A Calico hálózati beépülő modulját engedélyezni kell a számítási feladatfürt létrehozásakor. Ha ez a beépülő modul nem volt engedélyezve, tekintse meg
New-AksHciCluster
az utasításokat.
Létrehozás podok Linux-csomópontokon
Először hozzon létre egy ügyfél podot, busyboxot és kiszolgálói podot ( nginx) a Linux-csomópontokon.
Létrehozás egy policy-demo-linux.yaml nevű YAML-fájlt
apiVersion: v1
kind: Namespace
metadata:
name: calico-demo
---
apiVersion: v1
kind: Pod
metadata:
labels:
app: busybox
name: busybox
namespace: calico-demo
spec:
containers:
- args:
- /bin/sh
- -c
- sleep 360000
image: busybox:1.28
imagePullPolicy: Always
name: busybox
nodeSelector:
beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx
name: nginx
namespace: calico-demo
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
nodeSelector:
beta.kubernetes.io/os: linux
A policy-demo-linux.yaml fájl alkalmazása a Kubernetes-fürtre
Nyisson meg egy PowerShell-ablakot, és töltse be a célfürt hitelesítő adatait az Get-AksHciCredential
paranccsal.
A következő lépésben kubectl
alkalmazza a policy-demo-linux.yaml
konfigurációt az alábbiak szerint:
kubectl apply -f policy-demo-linux.yaml
Létrehozás podok Windows-csomópontokon
Létrehozás egy ügyfél pod pwsh- és kiszolgálói podporterét a Windows-csomópontokon.
Megjegyzés
A podok jegyzékfájlja a rendszerképeket használja a alapján mcr.microsoft.com/windows/servercore:1809
. Ha újabb Windows Server-verziót használ, frissítse a jegyzékfájlokat úgy, hogy a Windows Server verziójának megfelelő Server Core-rendszerképet használjon.
Létrehozás a policy-demo-windows.yaml
apiVersion: v1
kind: Pod
metadata:
name: pwsh
namespace: calico-demo
labels:
app: pwsh
spec:
containers:
- name: pwsh
image: mcr.microsoft.com/windows/servercore:1809
args:
- powershell.exe
- -Command
- "Start-Sleep 360000"
imagePullPolicy: IfNotPresent
nodeSelector:
kubernetes.io/os: windows
---
apiVersion: v1
kind: Pod
metadata:
name: porter
namespace: calico-demo
labels:
app: porter
spec:
containers:
- name: porter
image: calico/porter:1809
ports:
- containerPort: 80
env:
- name: SERVE_PORT_80
value: This is a Calico for Windows demo.
imagePullPolicy: IfNotPresent
nodeSelector:
kubernetes.io/os: windows
A policy-demo-windows.yaml fájl alkalmazása a Kubernetes-fürtre
Nyisson meg egy PowerShell-ablakot, és töltse be a célfürt hitelesítő adatait az Get-AksHciCredential
paranccsal.
A következő lépésben kubectl
alkalmazza a konfigurációt policy-demo-windows.yaml
:
kubectl apply -f policy-demo-windows.yaml
Ellenőrizze, hogy a négy pod létrejött-e és fut-e
Megjegyzés
A hálózati letöltés sebességétől függően időbe telhet a Windows-podok elindítása.
Nyisson meg egy PowerShell-ablakot, és töltse be a célfürt hitelesítő adatait az Get-AksHciCredential
paranccsal.
kubectl
Ezután listázhatja a névtérben lévő calico-demo
podokat:
kubectl get pods --namespace calico-demo
A következő példához hasonló kimenetnek kell megjelennie:
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 4m14s
nginx 1/1 Running 0 4m14s
porter 0/1 ContainerCreating 0 74s
pwsh 0/1 ContainerCreating 0 2m9s
Ismételje meg a parancsot néhány percenként, amíg a kimenet nem jeleníti meg mind a négy pod futási állapotát.
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 7m24s
nginx 1/1 Running 0 7m24s
porter 1/1 Running 0 4m24s
pwsh 1/1 Running 0 5m19s
Podok közötti kapcsolat ellenőrzése Linux- és Windows-csomópontokon
Most, hogy az ügyfél- és kiszolgáló podok Linux- és Windows-csomópontokon is futnak, ellenőrizze, hogy a Linux-csomópontokon lévő ügyfél podok el tudják-e érni a kiszolgálói podokat a Windows-csomópontokon.
Nyisson meg egy PowerShell-ablakot, és töltse be a célfürt hitelesítő adatait az
Get-AksHciCredential
paranccsal.A porter pod IP-címének meghatározására használható
kubectl
:kubectl get pod porter --namespace calico-demo -o 'jsonpath={.status.podIP}'
Jelentkezzen be a busybox podba, és próbálja meg elérni a porter podot a 80-s porton. Cserélje le a "<porter_ip>" címkét az előző parancsból visszaadott IP-címre.
kubectl exec --namespace calico-demo busybox -- nc -vz <porter_ip> 80
A fenti lépések mindegyikét kombinálhatja is:
kubectl exec --namespace calico-demo busybox -- nc -vz $(kubectl get pod porter --namespace calico-demo -o 'jsonpath={.status.podIP}') 80
Ha a busybox pod és a porter pod közötti kapcsolat sikeres, az alábbi példához hasonló kimenetet kap:
192.168.40.166 (192.168.40.166:80) open
Megjegyzés
A visszaadott IP-címek a környezet beállításától függően változhatnak.
Ellenőrizze, hogy a pwsh pod eléri-e az nginx podot:
kubectl exec --namespace calico-demo pwsh -- powershell Invoke-WebRequest -Uri http://$(kubectl get po nginx -n calico-demo -o 'jsonpath={.status.podIP}') -UseBasicParsing -TimeoutSec 5
Ha a kapcsolat sikeres, a következőhöz hasonló kimenet jelenik meg:
StatusCode : 200 StatusDescription : OK Content : <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> <...
Ellenőrizze, hogy a pwsh pod eléri-e a porter podot:
kubectl exec --namespace calico-demo pwsh -- powershell Invoke-WebRequest -Uri http://$(kubectl get po porter -n calico-demo -o 'jsonpath={.status.podIP}') -UseBasicParsing -TimeoutSec 5
Ha ez sikeres, a következő példához hasonló kimenet jelenik meg:
StatusCode : 200 StatusDescription : OK Content : This is a Calico for Windows demo. RawContent : HTTP/1.1 200 OK Content-Length: 49 Content-Type: text/plain; charset=utf-8 Date: Fri, 21 Aug 2020 22:45:46 GMT This is a Calico for Windows demo. Forms : Headers : {[Content-Length, 49], [Content-Type, text/plain; charset=utf-8], [Date, Fri, 21 Aug 2020 22:45:46 GMT]} Images : {} InputFields : {} Links : {} ParsedHtml : RawContentLength : 49
Most már ellenőrizte, hogy lehetséges-e kommunikáció az alkalmazás összes podja között.
A szabályzat alkalmazása a Windows ügyfél podjára
Egy valós üzembe helyezés során győződjön meg arról, hogy csak azok a podok engedélyezettek, amelyeknek kommunikálniuk kell egymással. Ennek eléréséhez olyan alapszintű hálózati házirendet kell alkalmaznia, amely lehetővé teszi, hogy csak a busybox pod elérje a porter podot.
a network-policy.yaml fájl Létrehozás
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-busybox
namespace: calico-demo
spec:
podSelector:
matchLabels:
app: porter
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: busybox
ports:
- protocol: TCP
port: 80
A network-policy.yaml fájl alkalmazása
Indítson el egy PowerShell-ablakot.
Töltse be a célfürt hitelesítő adatait az
Get-AksHciCredential
paranccsal.A
kubectl
network-policy.yaml fájl alkalmazásával:kubectl apply -f network-policy.yaml
Ellenőrizze, hogy a szabályzat érvényben van-e
Ha a szabályzat érvényben van, a busybox podnak továbbra is el kell érnie a porter podot. Ahogy korábban említettük, a parancssor lépéseit kombinálhatja:
kubectl exec --namespace calico-demo busybox -- nc -vz $(kubectl get po porter -n calico-demo -o 'jsonpath={.status.podIP}') 80
A pwsh pod azonban nem éri el a porter podot:
kubectl exec --namespace calico-demo pwsh -- powershell Invoke-WebRequest -Uri http://$(kubectl get po porter -n calico-demo -o 'jsonpath={.status.podIP}') -UseBasicParsing -TimeoutSec 5
A kérés az alábbihoz hasonló üzenettel időtúllépést jelent:
Invoke-WebRequest : The operation has timed out.
At line:1 char:1
+ Invoke-WebRequest -Uri http://192.168.40.166 -UseBasicParsing -Timeout ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:Htt
pWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
command terminated with exit code 1
Ebben a bemutatóban podokat konfiguráltunk Linux- és Windows-csomópontokon, ellenőriztük az alapszintű podkapcsolatot, és megpróbáltunk egy alapszintű hálózati szabályzatot a podok közötti forgalom elkülönítésére.
Az utolsó lépésként törölheti az összes bemutató erőforrást:
kubectl delete namespace calico-demo
Következő lépések
Ebből a cikkből megtudhatja, hogyan védheti meg a podok közötti forgalmat hálózati házirendek használatával. Ezután a következőkre van lehetőség:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: