Použití zásad sítě Calico k zabezpečení provozu podů
Platí pro: AKS v Azure Stack HCI 22H2, AKS na Windows Serveru
Pomocí tohoto podrobného průvodce můžete ověřit a vyzkoušet základní připojení pod-to-pod a použít zásady sítě Calico v clusteru v AKS povoleném nasazením Azure Arc. Tento článek popisuje, jak vytvořit klientské a serverové pody v uzlech s Linuxem a Windows, ověřit připojení mezi pody a pak pomocí základních zásad sítě izolovat provoz podů ve službě AKS Arc.
Požadavky
Pokud chcete nasadit AKS Arc, postupujte podle pokynů k nastavení hostitele AKS.
K použití tohoto průvodce potřebujete:
- Cluster úloh AKS.
- Alespoň jeden pracovní uzel Windows nasazený v clusteru.
- Alespoň jeden pracovní uzel Linuxu nasazený v clusteru.
- Při vytváření clusteru úloh musí být povolený síťový modul plug-in Calico. Pokud tento modul plug-in není povolený, přečtěte si
New-AksHciCluster
pokyny.
Vytváření podů na uzlech s Linuxem
Nejprve na linuxových uzlech vytvořte klientský pod, busybox a serverový pod nginx.
Vytvořte soubor 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 na cluster Kubernetes
Otevřete okno PowerShellu a pomocí Get-AksHciCredential
příkazu načtěte přihlašovací údaje pro cílový cluster.
Dále použijte kubectl
policy-demo-linux.yaml
konfiguraci následujícím způsobem:
kubectl apply -f policy-demo-linux.yaml
Vytváření podů na uzlech Windows
Na uzlech s Windows vytvořte pod klienta pwsh a porter podů serveru.
Poznámka
Manifest podů používá image 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 Windows Serveru.
Vytvoření souboru 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
Použití souboru policy-demo-windows.yaml na cluster Kubernetes
Otevřete okno PowerShellu a pomocí Get-AksHciCredential
příkazu načtěte přihlašovací údaje pro cílový cluster.
Dále použijte kubectl
policy-demo-windows.yaml
konfiguraci pomocí příkazu :
kubectl apply -f policy-demo-windows.yaml
Ověřte, že jsou čtyři pody vytvořené a spuštěné.
Poznámka
V závislosti na rychlosti stahování ze sítě může spuštění podů Windows nějakou dobu trvat.
Otevřete okno PowerShellu a pomocí Get-AksHciCredential
příkazu načtěte přihlašovací údaje pro cílový cluster.
Dále pomocí příkazu kubectl
vypište pody v calico-demo
oboru názvů :
kubectl get pods --namespace calico-demo
Měl by se zobrazit výstup podobný následujícímu příkladu:
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 příkaz každých několik minut, dokud se ve výstupu nezobrazí všechny čtyři pody 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
Kontrola připojení mezi pody v uzlech s Linuxem a Windows
Teď, když jsou pody klienta a serveru spuštěné na linuxových i windowsových uzlech, ověřte, že se klientské pody na linuxových uzlech můžou dostat k podům serveru na uzlech s Windows.
Otevřete okno PowerShellu a pomocí
Get-AksHciCredential
příkazu načtěte přihlašovací údaje pro cílový cluster.Pomocí příkazu
kubectl
určete IP adresu podu porteru:kubectl get pod porter --namespace calico-demo -o 'jsonpath={.status.podIP}'
Přihlaste se k podu busybox a zkuste se připojit k podu porteru na portu 80. <Nahraďte značku porter_ip> IP adresou vrácenou předchozím příkazem.
kubectl exec --namespace calico-demo busybox -- nc -vz <porter_ip> 80
Oba výše uvedené kroky můžete také zkombinovat:
kubectl exec --namespace calico-demo busybox -- nc -vz $(kubectl get pod porter --namespace calico-demo -o 'jsonpath={.status.podIP}') 80
Pokud připojení z podu busybox k podu porteru proběhne úspěšně, získáte výstup podobný následujícímu příkladu:
192.168.40.166 (192.168.40.166:80) open
Poznámka
Vrácené IP adresy se můžou lišit v závislosti na nastavení vašeho prostředí.
Ověřte, že se pod pwsh může spojit s podem nginx :
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 připojení proběhne úspěšně, zobrazí se výstup podobný následujícímu:
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> <...
Ověřte, že se pod pwsh může spojit s podem porteru :
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
Pokud se to podaří, zobrazí se výstup podobný následujícímu 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
Ověřili jste, že je komunikace mezi všemi pody v aplikaci možná.
Použití zásady na klientský pod Windows
V reálném nasazení chcete mít jistotu, že to můžou dělat jenom pody, které spolu mají komunikovat. Abyste toho dosáhli, použijete základní zásady sítě, které umožní přístup k podu porteru pouze podu busybox.
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
Otevřete okno PowerShellu.
Pomocí příkazu načtěte přihlašovací údaje pro cílový cluster
Get-AksHciCredential
.Použijte
kubectl
k použití souboru network-policy.yaml:kubectl apply -f network-policy.yaml
Ověřte, že zásady platí.
Po nastavení zásad by pod busybox stále měl být schopný se spojit s podem porteru . Jak jsme uvedli dříve, kroky na příkazovém řádku můžete zkombinovat:
kubectl exec --namespace calico-demo busybox -- nc -vz $(kubectl get po porter -n calico-demo -o 'jsonpath={.status.podIP}') 80
Pod pwsh se ale nebude moct spojit s podem porteru :
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
Časový limit požadavku vyprší se zprávou, jako je tato:
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 pody na uzlech s Linuxem a Windows, ověřili základní připojení k podům a vyzkoušeli jsme základní zásady sítě, které izolují provoz mezi pody.
Jako poslední krok 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 pody pomocí zásad sítě. Dále můžete:
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro