Zabezpečení provozu mezi lusky pomocí zásad sítě v AKS na Azure Stack HCI

Pomocí tohoto podrobného průvodce můžete ověřit a vyzkoušet základní připojení typu "na základě" a použít zásady sítě Calico v clusteru. v této příručce se dozvíte, jak vytvořit prostředí klienta a serveru na uzlech Linux a Windows, ověřit konektivitu mezi lusky a pak použít základní zásady sítě k izolaci provozu pod.

Požadavky

Pokud chcete nasadit AKS na Azure Stack HCI, postupujte podle pokynů k instalaci AKS na Azure Stack HCI.

K použití tohoto průvodce budete potřebovat:

  • AKS na Azure Stack cluster úloh HCI.
  • v clusteru byl nasazen alespoň jeden Windows pracovní uzel.
  • V clusteru byl nasazen alespoň jeden uzel Linux Worker.
  • Modul plug-in Calico sítě povolený při vytváření clusteru úloh. Pokud tento modul plug-in nepovolíte, přečtěte si New-AksHciCluster pokyny.

Vytvoření lusků v uzlech se systémem Linux

Nejdřív na uzlech Linux vytvořte klienta pod, BUSYBOXa Server pod Nginx.

Vytvoření souboru YAML s názvem Policy-demo-Linux. yaml


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

Použití souboru Policy-demo-Linux. yaml do clusteru Kubernetes

Otevřete okno PowerShellu a načtěte přihlašovací údaje pro cílový cluster pomocí Get-AksHciCredential příkazu.

V dalším kroku použijte kubectl k použití policy-demo-linux.yaml konfigurace, jak je znázorněno níže:

kubectl apply -f policy-demo-linux.yaml

Vytvořit lusky na uzlech okna

v Windowsch uzlech vytvořte klienta pod pwsh a serverem pod porter .

Poznámka

Manifest lusků používá obrázky založené na mcr.microsoft.com/windows/servercore:1809 . pokud používáte novější verzi Windows serveru, aktualizujte manifesty tak, aby používaly image jádra serveru, která odpovídá vaší verzi serveru Windows.

Vytvoření zásady – 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

Použití souboru Policy-demo-Windows. yaml do clusteru Kubernetes

Otevřete okno PowerShellu a načtěte přihlašovací údaje pro cílový cluster pomocí Get-AksHciCredential příkazu.

V dalším kroku použijte kubectl k instalaci policy-demo-windows.yaml Konfigurace:

kubectl apply -f policy-demo-windows.yaml

Ověření, že jsou vytvořeny a spuštěny čtyři lusky

Poznámka

v závislosti na rychlosti stahování ze sítě může trvat Windows lusky čas.

Otevřete okno PowerShellu a načtěte přihlašovací údaje pro cílový cluster pomocí Get-AksHciCredential příkazu.

Dále použijte kubectl k vypsání lusků v calico-demo oboru názvů:

kubectl get pods --namespace calico-demo

Zobrazený výstup by měl vypadat přibližně takto:

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

Opakujte tento příkaz každých několik minut, dokud výstup nezobrazuje všechny čtyři lusky ve stavu spuštěno.

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

kontrolovat konektivitu mezi lusky v uzlech Linux a Windows

v případě, že jsou aplikace klienta a serveru spuštěné na uzlech linux i Windows, ověřte, že klientské lusky na uzlech se systémem linux mohou oslovit části serveru v uzlech Windows.

  1. Otevřete okno PowerShellu a načtěte přihlašovací údaje pro cílový cluster pomocí Get-AksHciCredential příkazu.

  2. Použijte kubectl k určení IP adresy Porter pod:

    kubectl get pod porter --namespace calico-demo -o 'jsonpath={.status.podIP}'
    
  3. Přihlaste se k BUSYBOX pod a pokuste se dosáhnout Porter pod na portu 80. Nahraďte < značku ' porter_ip > ' adresou IP vrácenou z předchozího příkazu.

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

    Obě výše uvedené kroky můžete kombinovat také takto:

    kubectl exec --namespace calico-demo busybox -- nc -vz $(kubectl get pod porter --namespace calico-demo -o 'jsonpath={.status.podIP}') 80
    

    Pokud se připojení z BUSYBOX pod k Porter pod zdaří, zobrazí se výstup podobný tomu, co vidíte níže:

    192.168.40.166 (192.168.40.166:80) open
    

    Poznámka

    Vrácené IP adresy se budou lišit v závislosti na nastavení prostředí.

  4. Ověřte, že pwsh pod může dosáhnout Nginx pod:

    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
    

    Pokud je připojení úspěšné, zobrazí se výstup podobný tomuto:

    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. Ověřte, že pwsh pod může dosáhnout Porter pod:

    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
    

    V případě úspěchu se zobrazí podobné možnosti jako v následujícím příkladu:

    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
    
    

Nyní jste ověřili, že je možné komunikovat mezi všemi lusky v aplikaci.

použít zásadu na Windows klienta pod

V reálných nasazeních byste se měli ujistit, že jsou povolené jenom lusky, které by měly vzájemně komunikovat.

Dosáhnete toho, když použijete základní zásadu sítě, která umožňuje přístup k Porter pod pod busyboxem .

Vytvoření souboru Network-Policy. yaml

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

Použití souboru Network-Policy. yaml

  1. Otevřete okno PowerShellu.

  2. Pomocí příkazu načtěte přihlašovací údaje pro cílový cluster Get-AksHciCredential .

  3. Použijte kubectl k aplikování souboru Network-Policy. yaml.

    kubectl apply -f network-policy.yaml
    

Ověřte, že zásady jsou v platnosti.

Se zásadami, které jsou zavedeny, by měl být BUSYBOX pod i nadále schopný kontaktovat Porter pod. Jak bylo popsáno dříve v tomto tématu, můžete zkombinovat kroky z příkazového řádku:

kubectl exec --namespace calico-demo busybox -- nc -vz $(kubectl get po porter -n calico-demo -o 'jsonpath={.status.podIP}') 80

Pwsh pod však nebude moci kontaktovat Porter pod:

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

Požadavek vyprší ve zprávě, jak je uvedeno níže:

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

v této ukázce jsme nakonfigurovali lusky na uzlech Linux a Windows, ověřili jsme základní připojení pod a zkusili základní síťové zásady pro izolaci provozu pod na pod. V posledním kroku můžete vyčistit všechny ukázkové prostředky:

kubectl delete namespace calico-demo

Další kroky

V tomto článku jste zjistili, jak zabezpečit provoz mezi lusky pomocí zásad sítě. V dalším kroku můžete: