Biztonságos adatforgalom a podok között hálózati szabályzatok használatával az AKS-Azure Stack HCI

Ezzel a részletes útmutatóval ellenőrizheti és kipróbálhatja a podok és podok alapszintű kapcsolatát, valamint calico hálózati szabályzatokat használhat egy fürtben. Ebből az útmutatóból megtudhatja, hogyan hozhat létre ügyfél- és kiszolgálópodokat Linux rendszeren és Windows-csomópontokon, hogyan ellenőrizheti a podok közötti kapcsolatot, majd hogyan alkalmazhat egy alapszintű hálózati szabályzatot a podok forgalmának elkülönítésére.

Előfeltételek

Ha az AKS-Azure Stack HCI telepíteni, kövesse az AKStelepítésének lépéseit a Azure Stack HCI.

Az útmutatóhoz a következőre lesz szüksége:

  • Egy AKS a Azure Stack HCI fürtön.
  • Legalább egy Windows a fürtben üzembe helyezett munkavégző csomópont.
  • A fürtben üzembe helyezett legalább egy Linux feldolgozó csomópont.
  • A Számítási feladat fürt létrehozásakor engedélyezve van a Calico hálózati beépülő modul. Ha ez a beépülő modul nem volt engedélyezve, tekintse meg New-AksHciCluster az utasításokat.

Podok létrehozása Linux-csomópontokon

Először hozzon létre egy ügyfélpodot (busybox)és kiszolgálópodot (nginx)a Linux-csomópontokon.

Hozzon létre 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.

Ezután a használatával kubectl alkalmazza a policy-demo-linux.yaml konfigurációt az alábbiak szerint:

kubectl apply -f policy-demo-linux.yaml

Podok létrehozása ablakcsomópontokon

Hozzon létre egy pwsh-ügyfélpodot és egy kiszolgálópod podot a Windows csomópontokon.

Megjegyzés

A podok jegyzékfájlja a következőn alapuló rendszerképeket mcr.microsoft.com/windows/servercore:1809 használ: . Ha a Server újabb verzióját Windows, frissítse a jegyzékfájlokat úgy, hogy a Windows Server verziójának megfelelő Server Core-rendszerképet használjanak.

A policy-demo-windows.yaml létrehozása


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.

Ezután a használatával kubectl alkalmazza a policy-demo-windows.yaml konfigurációt:

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ési sebességtől függően a hálózati podok indítása Windows időt is.

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

Ezután a használatával kubectl listába sorolja fel a podokat a calico-demo névtérben:

kubectl get pods --namespace calico-demo

Az alábbihoz hasonló kimenetnek kell látsza:

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 kimenetben mind a négy pod Fut állapotban nem lesz.

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

A Linuxon lévő podok és a Windows közötti kapcsolat ellenőrzése

Most, hogy az ügyfél- és a kiszolgálópodok Linux- és Windows-csomópontokon is futnak, ellenőrizze, hogy a Linux-csomópontokon lévő ügyfélpodok el tudnak-e érni 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 kubectl pod IP-címének meghatározásához használja a következőt:

    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 podot a 80-as porton. Cserélje le a " porter_ip " címkét az előző parancs által <> visszaadott IP-címre.

    kubectl exec --namespace calico-demo busybox -- nc -vz <porter_ip> 80
    

    A fenti két lépést 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 pod kapcsolata sikeres, az alábbihoz hasonló kimenet jelenik meg:

    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áltoznak.

  4. Ellenőrizze, hogy a pwsh pod el tudja-e érni 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ő hasonló kimenetet fogja látni:

    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 tudja-e érni a 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, az alábbihoz hasonlót fog látni:

    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
    
    

Ezzel ellenőrizte, hogy lehetséges-e a kommunikáció az alkalmazás összes podja között.

A szabályzat alkalmazása a Windows podra

Egy valós üzembe helyezés esetén azt szeretné, hogy csak azok a podok tegyenek így, amelyek kommunikálhatnak egymással.

Ehhez egy alapszintű hálózati szabályzatot kell alkalmaznia, amely csak a busybox pod számára teszi lehetővé a pod elérését.

A network-policy.yaml fájl létrehozása

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 használatával alkalmazza a network-policy.yaml fájlt.

    kubectl apply -f network-policy.yaml
    

Annak ellenőrzése, hogy a szabályzat érvényben van-e

Ha a szabályzat már elérhető, a busybox podnak továbbra is el kell tudnia érni a podot. A témakörben korábban már említettük, hogy 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 fogja tudni elérni a pod 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 időkorrekta egy üzenettel, ahogy az alább látható:

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 rendszeren és Windows-csomópontokon, hitelesítettünk alapszintű podkapcsolatot, és egy alapszintű hálózati szabályzatot is kipróbáltunk a podok és podok forgalmának elkülönítéséhez. Utolsó lépésként az összes bemutató erőforrást megtisztíthatja:

kubectl delete namespace calico-demo

Következő lépések

Ebben a cikkben megtanulta, hogyan biztosíthatja a podok közötti forgalmat hálózati szabályzatok használatával. A következő lépés a következő: