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.

  1. Nyisson meg egy PowerShell-ablakot, és töltse be a célfürt hitelesítő adatait az Get-AksHciCredential paranccsal.

  2. 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}'
    
  3. 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.

  4. 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>
                        <...
    
  5. 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

  1. Indítson el egy PowerShell-ablakot.

  2. Töltse be a célfürt hitelesítő adatait az Get-AksHciCredential paranccsal.

  3. 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: