Zabezpieczanie ruchu zasobnika przy użyciu zasad sieci Calico
Dotyczy: usługa AKS w usłudze Azure Stack HCI 22H2, AKS w systemie Windows Server
Skorzystaj z tego przewodnika krok po kroku, aby zweryfikować i wypróbować podstawową łączność między zasobnikami oraz użyć zasad sieci Calico w klastrze w usłudze AKS włączonej przez wdrożenie usługi Azure Arc. W tym artykule opisano sposób tworzenia zasobników klienta i serwera w węzłach systemu Linux i Windows, weryfikowania łączności między zasobnikami, a następnie stosowania podstawowych zasad sieciowych w celu odizolowania ruchu zasobnika w usłudze AKS Arc.
Wymagania wstępne
Aby wdrożyć usługę AKS Arc, wykonaj kroki konfigurowania hosta usługi AKS.
Aby użyć tego przewodnika, potrzebne są następujące elementy:
- Klaster obciążeń usługi AKS.
- Co najmniej jeden węzeł roboczy systemu Windows wdrożony w klastrze.
- Co najmniej jeden węzeł roboczy systemu Linux wdrożony w klastrze.
- Wtyczka sieci Calico musi być włączona podczas tworzenia klastra obciążenia. Jeśli ta wtyczka nie została włączona, zobacz
New-AksHciCluster
instrukcje.
zasobniki Twórca w węzłach systemu Linux
Najpierw utwórz zasobnik klienta, zajętą skrzynkę odbiorczą i zasobnik serwera nginx w węzłach systemu Linux.
Twórca pliku YAML o nazwie 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
Stosowanie pliku policy-demo-linux.yaml do klastra Kubernetes
Otwórz okno programu PowerShell i załaduj Get-AksHciCredential
poświadczenia dla klastra docelowego przy użyciu polecenia .
Następnie użyj polecenia kubectl
, aby zastosować konfigurację policy-demo-linux.yaml
w następujący sposób:
kubectl apply -f policy-demo-linux.yaml
zasobniki Twórca w węzłach systemu Windows
Twórca zasobnik klienta pwsh i porter zasobnika serwera w węzłach systemu Windows.
Uwaga
Manifest zasobników używa obrazów na podstawie metody mcr.microsoft.com/windows/servercore:1809
. Jeśli używasz nowszej wersji systemu Windows Server, zaktualizuj manifesty, aby używać obrazu Server Core zgodnego z wersją systemu Windows Server.
Twórca 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
Zastosuj plik policy-demo-windows.yaml do klastra Kubernetes
Otwórz okno programu PowerShell i załaduj Get-AksHciCredential
poświadczenia dla klastra docelowego przy użyciu polecenia .
Następnie użyj polecenia kubectl
, aby zastosować konfigurację policy-demo-windows.yaml
:
kubectl apply -f policy-demo-windows.yaml
Sprawdź, czy cztery zasobniki zostały utworzone i uruchomione
Uwaga
W zależności od szybkości pobierania sieci uruchomienie zasobników systemu Windows może zająć trochę czasu.
Otwórz okno programu PowerShell i załaduj Get-AksHciCredential
poświadczenia dla klastra docelowego przy użyciu polecenia .
Następnie użyj polecenia kubectl
, aby wyświetlić listę zasobników w calico-demo
przestrzeni nazw:
kubectl get pods --namespace calico-demo
Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:
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
Powtórz polecenie co kilka minut, aż dane wyjściowe pokażą wszystkie cztery zasobniki w stanie Uruchomiony.
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
Sprawdzanie łączności między zasobnikami w węzłach systemu Linux i Windows
Teraz, gdy zasobniki klienta i serwera są uruchomione w węzłach systemu Linux i Windows, sprawdź, czy zasobniki klienta w węzłach systemu Linux mogą uzyskiwać dostęp do zasobników serwera w węzłach systemu Windows.
Otwórz okno programu PowerShell i załaduj
Get-AksHciCredential
poświadczenia dla klastra docelowego przy użyciu polecenia .Użyj
kubectl
polecenia , aby określić adres IP zasobnika portera:kubectl get pod porter --namespace calico-demo -o 'jsonpath={.status.podIP}'
Zaloguj się do zasobnika zajętego skrzynki odbiorczej i spróbuj uzyskać dostęp do zasobnika portera na porcie 80. Zastąp tag "<porter_ip>" adresem IP zwróconym z poprzedniego polecenia.
kubectl exec --namespace calico-demo busybox -- nc -vz <porter_ip> 80
Możesz również połączyć oba powyższe kroki:
kubectl exec --namespace calico-demo busybox -- nc -vz $(kubectl get pod porter --namespace calico-demo -o 'jsonpath={.status.podIP}') 80
Jeśli połączenie z zasobnika busybox do zasobnika portera powiedzie się, otrzymasz dane wyjściowe podobne do następującego przykładu:
192.168.40.166 (192.168.40.166:80) open
Uwaga
Zwrócone adresy IP mogą się różnić w zależności od konfiguracji środowiska.
Sprawdź, czy zasobnik pwsh może dotrzeć do zasobnika 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
Jeśli połączenie zakończy się pomyślnie, zobaczysz dane wyjściowe podobne do następujących:
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> <...
Sprawdź, czy zasobnik pwsh może dotrzeć do zasobnika portera :
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
Jeśli to powiedzie się, zobaczysz dane wyjściowe podobne do następującego przykładu:
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
Sprawdzono, że komunikacja między wszystkimi zasobnikami w aplikacji jest możliwa.
Stosowanie zasad do zasobnika klienta systemu Windows
W rzeczywistym wdrożeniu chcesz upewnić się, że tylko zasobniki, które mają komunikować się ze sobą, mogą to zrobić. Aby to osiągnąć, należy zastosować podstawowe zasady sieciowe, które umożliwiają dostęp tylko zasobnikowi zajętego skrzynki odbiorczej do zasobnika portera .
Twórca pliku 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
Stosowanie pliku network-policy.yaml
Otwórz okno programu PowerShell.
Załaduj poświadczenia klastra docelowego przy użyciu
Get-AksHciCredential
polecenia .Użyj polecenia
kubectl
, aby zastosować plik network-policy.yaml:kubectl apply -f network-policy.yaml
Sprawdź, czy zasady są obowiązujące
Po umieszczenia zasad zasobnik busybox powinien nadal mieć możliwość dotarcia do zasobnika portera . Jak wspomniano wcześniej, możesz połączyć kroki w wierszu polecenia:
kubectl exec --namespace calico-demo busybox -- nc -vz $(kubectl get po porter -n calico-demo -o 'jsonpath={.status.podIP}') 80
Jednak zasobnik pwsh nie będzie mógł uzyskać dostępu do zasobnika portera :
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
Limit czasu żądania z komunikatem takim jak ten:
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
W tym pokazie skonfigurowaliśmy zasobniki w węzłach z systemami Linux i Windows, zweryfikowaliśmy podstawową łączność zasobnika i wypróbowano podstawowe zasady sieciowe w celu odizolowania ruchu zasobnika do zasobnika.
W ostatnim kroku możesz wyczyścić wszystkie zasoby demonstracyjne:
kubectl delete namespace calico-demo
Następne kroki
W tym artykule przedstawiono sposób zabezpieczania ruchu między zasobnikami przy użyciu zasad sieciowych. Następnie możesz wykonać następujące czynności:
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla