Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Important
Ab dem 30. September 2028 unterstützt Azure Kubernetes Service (AKS) azure Network Policy Manager (NPM) auf Linux-Knoten nicht mehr. Um Dienstunterbrechungen zu vermeiden, müssen Sie AKS-Cluster, die Linux-Knoten ausführen, von NPM zu Cilium-Netzwerkrichtlinie migrieren, bis zum Enddatum des Supports. Weitere Informationen zu dieser Einstellung finden Sie in der Ankündigung zur Einstellung von Azure Updates. Um über Ankündigungen und Updates auf dem Laufenden zu bleiben, folgen Sie den AKS-Release-Notes.
Identifizieren betroffener Cluster
Um AKS-Cluster mit Linux-Knotenpools mit Azure Network Policy Manager (NPM) zu finden, führen Sie die Azure Resource Graph-Abfrage aus, in der alle AKS-Cluster aufgelistet sind, wo agentPool.osType != "Windows" und properties.networkProfile.networkPolicy == "azure".
Important
Ab dem 31. März 2028 unterstützt Azure Kubernetes Service (AKS) keine Kubenet-Netzwerke mehr. Um Dienstunterbrechungen zu vermeiden, führen Sie ein Upgrade auf das CNI-Overlaynetzwerk (Azure Container Networking Interface) vor dem Enddatum des Supports durch. Weitere Informationen zu dieser Abkündigung finden Sie im GitHub-Issue "Retirement" und in der Azure Updates Ankündigung zur Abkündigung. Um über Ankündigungen und Updates auf dem Laufenden zu bleiben, folgen Sie den AKS-Release-Notes.
Installieren Sie ein Netzwerkrichtlinienmodul, und erstellen Sie Kubernetes-Netzwerkrichtlinien, um den Datenverkehr zwischen Pods in AKS-Clustern mithilfe der Azure CLI oder Terraform zu steuern.
Übersicht über die Netzwerkrichtlinie
Standardmäßig können alle Pods in einem AKS-Cluster Datenverkehr ohne Einschränkungen senden und empfangen. Zur Verbesserung der Sicherheit können Sie Regeln definieren, die den Datenverkehrsfluss steuern.
Netzwerkrichtlinie ist eine Kubernetes-Spezifikation, die Zugriffsrichtlinien für die Kommunikation zwischen Pods definiert. Wenn Sie Netzwerkrichtlinien verwenden, definieren Sie einen geordneten Satz von Regeln zum Senden und Empfangen von Datenverkehr. Sie wenden die Regeln auf eine Sammlung von Pods an, die einer oder mehreren Bezeichnungsauswahlen entsprechen.
Sie definieren die Netzwerkrichtlinienregeln als YAML-Manifeste, und Sie können sie in breitere Manifeste einschließen, die auch eine Bereitstellung oder einen Dienst erstellen.
Optionen für Netzwerkrichtlinien in AKS
Azure bietet drei Netzwerkrichtlinienmodule zum Erzwingen von Netzwerkrichtlinien:
- Cilium (für AKS-Cluster mit Azure CNI Powered by Cilium)
- Azure Netzwerkrichtlinien-Manager (NPM)
- Calico (eine von Tigera gegründete Open-Source-Netzwerk- und Netzwerksicherheitslösung)
Wir empfehlen die Verwendung von Cilium, das robuste Unterstützung für kubernetes-native Richtlinien, erweiterte Features wie Layer 7-Richtlinie und FQDN-Filterung sowie einen eBPF-basierten Datenplan bietet, der eine bessere Leistung, Skalierbarkeit und Sicherheit im Vergleich zu IPTables-basierten Lösungen bietet.
Um die angegebenen Richtlinien zu erzwingen, verwendet Azure NPM IPTables für Linux-Knoten. Aus den Richtlinien werden zulässige und unzulässige IP-Adresspaare gebildet. Das System programmiert diese Paare als IPTable Filterregeln.
Unterschiede zwischen Netzwerkrichtlinienmodulen: Cilium, Azure NPM und Calico
| Netzwerkrichtlinienmodul | Unterstützte Plattformen | Unterstützte Netzwerkoptionen | Kubernetes-Spezifikationscompliance | Weitere Features | Support |
|---|---|---|---|---|---|
| Cilium | Linux | Azure CNI | Unterstützt alle Richtlinientypen | FQDN, L3/4, L7 | Azure-Support- und Entwicklungsteam |
| Azure NPM | Linux | Azure CNI | Unterstützt alle Richtlinientypen | N/A | Azure-Support- und Entwicklungsteam |
| Calico | Linux, Windows Server 2019, Windows Server 2022 | Azure CNI (Linux, Windows Server 2019, Windows Server 2022) und Kubenet (Linux) | Unterstützt alle Richtlinientypen | Calico verfügt zwar über viele Features, die von AKS nicht blockiert werden, aber AKS testt sie nicht oder unterstützt sie nicht. Weitere Informationen finden Sie unter Calico Guidance. | Azure-Support- und Entwicklungsteam |
Azure Einschränkungen des Netzwerkrichtlinien-Managers
Azure NPM hat die folgenden Einschränkungen:
- Die Skalierung über 250 Knoten und 20.000 Pods wird nicht unterstützt. Wenn Sie versuchen, über diese Grenzen hinaus zu skalieren, kann es zu „Out of Memory“-Fehlern (OOM) kommen. Für eine bessere Skalierbarkeit und IPv6-Unterstützung empfehlen wir die Verwendung oder Aktualisierung auf Azure CNI Powered by Cilium für Ihr Netzwerkrichtlinienmodul.
- ICv6 wird nicht unterstützt. Ansonsten unterstützt es die Netzwerkrichtlinienspezifikationen in Linux vollständig.
- Ab dem 30. September 2026 unterstützt Azure Kubernetes Service (AKS) Azure Network Policy Manager (NPM) auf Windows Knoten nicht mehr.
Bekannte Probleme mit azure Network Policy Manager
Beim Bearbeiten oder Löschen einer „ausreichend großen“ Netzwerkrichtlinie können vorübergehende Verbindungsprobleme bei neuen Verbindungen zu/von Pods auf betroffenen Knoten auftreten. Das Erreichen dieser Racebedingung wirkt sich niemals auf aktive Verbindungen aus.
Wenn diese Racebedingung für einen Knoten auftritt, wechselt der Azure NPM-Pod auf diesem Knoten in einen Zustand, in dem er keine Sicherheitsregeln aktualisieren kann, was für den betroffenen Knoten zu unerwarteten Verbindungen für neue Verbindungen zu/von Pods führen kann. Um das Problem zu beheben, startet der Azure NPM-Pod nach dem Eintreten in diesen Zustand automatisch nach ca. 15 Sekunden neu. Während Azure NPM auf dem betroffenen Knoten neu gestartet wird, löscht es alle Sicherheitsregeln und wendet dann erneut Sicherheitsregeln für alle Netzwerkrichtlinien an. Während alle Sicherheitsregeln erneut angewendet werden, besteht die Möglichkeit einer temporären, unerwarteten Verbindung für neue Verbindungen zu/von Pods auf dem betroffenen Knoten.
Um die Wahrscheinlichkeit zu begrenzen, dass diese Racebedingung erreicht wird, können Sie die Größe der Netzwerkrichtlinie verringern. Dieses Problem tritt höchstwahrscheinlich für eine Netzwerkrichtlinie mit mehreren ipBlock-Abschnitten auf. Eine Netzwerkrichtlinie mit vier oder wenigeripBlock Abschnitten ist weniger wahrscheinlich, dass das Problem erreicht wird.
Lastenausgleichsdienste und Netzwerkrichtlinien
Das Kubernetes-Dienstrouting für eingehende und ausgehende Dienste umfasst häufig das Umschreiben der Quell- und Ziel-IPs für datenverkehr, der verarbeitet wird, einschließlich des Datenverkehrs, der aus einem LoadBalancer Dienst in den Cluster gelangt. Dieses Umschreibverhalten bedeutet, dass die Netzwerkrichtlinien möglicherweise keinen ordnungsgemäßen Datenverkehr verarbeiten, der von einem externen Dienst empfangen oder an einen externen Dienst gesendet wird. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes-Netzwerkrichtlinien.
Um einzuschränken, welche Quellen Datenverkehr an einen Lastenausgleichsdienst senden können, verwenden Sie spec.loadBalancerSourceRanges zur Konfiguration der Datenverkehrsblockierung, die gilt, bevor Umschreibungen erfolgen. Weitere Informationen finden Sie in der Dokumentation zum AKS Standard-Lastenausgleich.
Voraussetzungen
Azure CLI-Version 2.0.61 oder höher muss installiert und konfiguriert sein. Suchen Sie die Version mit dem az --version-Befehl. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
Statt einer systemseitig zugewiesenen Identität können Sie auch eine benutzerseitig zugewiesene Identität verwenden. Weitere Informationen finden Sie unter Verwenden verwalteter Identitäten.
- Terraform installiert, Version 1.6 oder höher.
- Azure CLI installiert und authentifiziert. Suchen Sie die Version mit dem
az --version-Befehl. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI. Sie verwenden die Azure CLI, um eine Verbindung mit dem Cluster herzustellen, nachdem Terraform es erstellt hat. -
kubectl installiert. Sie können es lokal mit dem
az aks install-cliBefehl installieren. Sie verwendenkubectl, um das Verhalten der Netzwerkrichtlinie zu überprüfen.
Erstellen eines AKS-Clusters mit Azure Network Policy Manager (Linux)
Legen Sie Umgebungsvariablen für den Ressourcengruppennamen, den Clusternamen und den Speicherort fest. Ersetzen Sie die Werte nach Bedarf.
export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastusErstellen Sie die Ressourcengruppe mithilfe des
az group createBefehls.az group create --resource-group $RESOURCE_GROUP --location $LOCATIONErstellen Sie einen AKS-Cluster mit
az aks createund spezifizieren Sieazurefürnetwork-pluginundnetwork-policy.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 1 \ --network-plugin azure \ --network-policy azure \ --generate-ssh-keysVorsicht
Azure Network Policy Manager (NPM) für Linux-Knoten wird am 30. September 2028 eingestellt. Für neue Bereitstellungen empfehlen wir die Verwendung von Azure CNI Powered by Cilium mit der Cilium-Netzwerkrichtlinie. Informationen zum Migrieren vorhandener Cluster finden Sie unter Migrieren von NPM zu Cilium-Netzwerkrichtlinie.
Erstellen eines AKS-Clusters mit Calico
Erstellen Sie einen AKS-Cluster mithilfe des az aks create Befehls. Geben Sie --network-plugin azure und --network-policy calico an. Wenn Sie angeben--network-policy calico, aktivieren Sie Calico für Linux- und Windows-Knotenpools.
Wenn Sie Windows Knotenpools zu Ihrem Cluster hinzufügen möchten, schließen Sie die windows-admin-username Parameter und windows-admin-password Parameter ein, die den Windows Server Kennwortanforderungen entsprechen. Um einen Benutzernamen zu erstellen, der als Administratoranmeldeinformationen für Ihre Windows Server Container in Ihrem Cluster verwendet werden soll, werden Sie mit den folgenden Befehlen aufgefordert, einen Benutzernamen einzugeben. Legen Sie sie auf WINDOWS_USERNAME fest.
echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME
Important
Zurzeit ist die Verwendung von Calico-Netzwerkrichtlinien mit Windows-Knoten auf neuen Clustern mit Kubernetes Version 1.20 oder höher mit Calico 3.17.2 verfügbar und erfordert, dass Sie Azure CNI-Netzwerke verwenden. Windows-Knoten in AKS-Clustern, in denen Calico aktiviert ist, verfügen standardmäßig auch über eine unverankerte IP.
Bei Clustern mit ausschließlich Linux-Knotenpools, die Kubernetes 1.20 mit früheren Versionen von Calico ausführen, wird die Calico-Version automatisch auf 3.17.2 aktualisiert.
Installieren von Azure Network Policy Manager oder Calico auf einem vorhandenen Cluster
Warning
Beachten Sie beim Installieren von Azure NPM oder Calico auf einem vorhandenen Cluster die folgenden Informationen:
- Der Upgrade-Prozess veranlasst, dass alle Knotenpools gleichzeitig neu abgebildet werden. Ein separates Upgrade jedes Knotenpools wird nicht unterstützt.
- Innerhalb jedes Knotenpools folgen Knoten dem gleichen Reimaging-Prozess wie standardmäßige Kubernetes-Versionsupgradevorgänge. Dieses Verhalten bedeutet, dass Pufferknoten vorübergehend hinzugefügt werden, um Unterbrechungen der Ausführung von Anwendungen während des Knoten-Reimaging-Prozesses zu minimieren. Alle Unterbrechungen, die auftreten können, ähneln dem, was bei einem Knotenimageupgrade oder einem Kubernetes-Versionsupgrade auftreten kann.
Die folgenden Informationen gelten für Upgrades von Kubenet mit Calico auf Azure CNI Overlay mit Calico:
- In Kubenet-Clustern mit Aktiviertem Calico wird Calico sowohl als CNI- als auch als Netzwerkrichtlinienmodul verwendet.
- In Azure CNI-Clustern wird Calico nur für die Durchsetzung von Netzwerkrichtlinien verwendet, nicht als CNI. Dies kann zu einer kurzen Verzögerung zwischen dem Start des Pods und dem Zeitpunkt, an dem Calico ausgehenden Datenverkehr vom Pod zulässt.
Aktualisieren Sie einen vorhandenen Cluster, um Azure NPM oder Calico mithilfe des az aks update-Befehls zu installieren, und geben Sie für den azure-Parameter calico oder --network-policy an. Der folgende Beispielbefehl zeigt, wie Sie entweder Azure NPM installieren:
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--network-policy azure
Upgrade eines vorhandenen Clusters mit Azure NPM oder Calico auf Cilium
Aktualisieren Sie für Cluster, die bereits Azure CNI verwenden, die Netzwerkdatenebene auf Cilium. Kubenet-Cluster müssen zuerst zu Azure CNI-Overlay migrieren und dann die Netzwerkdatenebene als separater Vorgang auf Cilium aktualisieren. Überprüfen Sie die Voraussetzungen, und führen Sie die Schritte im Upgrade eines vorhandenen Clusters auf Azure CNI Powered by Cilium aus.
Herstellen einer Verbindung mit dem AKS-Cluster
Konfigurieren Sie kubectl, um mithilfe des Befehls „az aks get-credentials“ eine Verbindung mit Ihrem Cluster herzustellen. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen, und die Kubernetes-Befehlszeilenschnittstelle wird für deren Verwendung konfiguriert.
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Überprüfen der Einrichtung von Netzwerkrichtlinien
Um mit der Überprüfung der Netzwerkrichtlinien zu beginnen, erstellen Sie eine Beispielanwendung und legen Verkehrsregeln fest.
Erstellen Sie einen Namespace mit dem Namen
demo, um die Beispiel-Pods mithilfe deskubectl create namespace-Befehls auszuführen.kubectl create namespace demoErstellen Sie mit dem Befehl
servereinen Pod mit dem Namenkubectl run, der auf TCP-Port 80 ausgeführt wird.kubectl run server -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --labels="app=server" --port=80 --command -- /agnhost serve-hostname --tcp --http=false --port "80"Erstellen Sie einen Pod mit dem Namen
client, um Bash mithilfe deskubectl runBefehls auszuführen.kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --command -- bashNote
Wenn Sie den Client oder den Server auf einem bestimmten Knoten planen möchten, fügen Sie das folgende Bit vor dem
--commandArgument im Befehl zum Erstellenkubectl runvon Pods hinzu:--overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux|windows"}}}'Rufen Sie in einem separaten Fenster die IP-Adresse des
server-Pods mithilfe deskubectl get pod-Befehls ab.kubectl get pod --output=wide -n demoIhre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES server 1/1 Running 0 30s 10.224.0.72 akswin22000001 <none> <none>
Testen der Konnektivität mit Netzwerkrichtlinien
Tipp
Führen Sie zum Testen der Konnektivität ohne Netzwerkrichtlinien den folgenden Befehl in der Clientshell aus: /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp Ersetzen Sie <server-ip> durch die IP-Adresse des Server-Pods. Wenn die Verbindung erfolgreich ist, gibt es keine Ausgabe.
Erstellen Sie eine Datei mit dem Namen
demo-policy.yaml, und fügen Sie das folgende YAML-Manifest ein:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: demo-policy namespace: demo spec: podSelector: matchLabels: app: server ingress: - from: - podSelector: matchLabels: app: client ports: - port: 80 protocol: TCPWenden Sie das Netzwerkrichtlinienmanifest mithilfe des
kubectl applyBefehls an.kubectl apply -f demo-policy.yamlÜberprüfen Sie in der Clientshell die Verbindung mit dem Server mithilfe des folgenden
/agnhostBefehls:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpDie Verbindung mit dem Datenverkehr wird blockiert, weil der Server mit
app=servergekennzeichnet ist, der Client aber nicht. Ihre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:TIMEOUTKennzeichnen Sie das
clientund überprüfen Sie die Verbindung mit dem Server mithilfe deskubectl label-Befehls.kubectl label pod client -n demo app=clientWenn die Verbindung erfolgreich ist, gibt es keine Ausgabe.
Migrieren zu selbstverwaltetem Calico
AKS unterstützt calico nur für Standardmäßige Kubernetes-Netzwerkrichtlinien und testt keine anderen Features. Wenn Sie zu selbstverwaltetem Calico wechseln möchten, folgen Sie den Tigera-Anweisungen bei Migrate von Azure-verwaltetem Calico zu selbstverwaltetem Calico. In der Tigera-Dokumentation wird erwähnt, dass man bei selbstverwaltetem Calico --network-policy none wie im Abschnitt Deinstallieren eingestellt.
Deinstallieren von Azure Network Policy Manager oder Calico (Vorschau)
Note
Beachten Sie beim Deinstallieren von Azure NPM oder Calico aus einem Cluster die folgenden Informationen:
- Der Deinstallationsprozess entfernt keine benutzerdefinierten Ressourcendefinitionen (CUSTOM Resource Definitions, CRDs) und benutzerdefinierte Ressourcen (CRs), die von Calico verwendet werden. Diese CRDs und CRs haben alle Namen, die mit projectcalico.org oder tigera.io enden. Sie können diese CRDs und zugehörige CRs nach der erfolgreichen Deinstallation von Calico manuell entfernen.
- Durch das Upgrade werden keine Netzwerkrichtlinienressourcen im Cluster entfernt, die Richtlinien werden jedoch nach dem Deinstallationsprozess nicht mehr erzwungen.
Entfernen Sie Azure Network Policy Manager oder Calico aus einem vorhandenen Cluster mithilfe des Befehls az aks update und geben Sie none für den Parameter --network-policy an.
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--network-policy none
Ändern der Clusternetzwerkrichtlinie
Die folgenden Schritte zeigen, wie Sie die vorhandene Netzwerkrichtlinie eines Clusters in Calico ändern. Für das Verfahren muss die Netzwerkrichtlinie zu none geändert und dann zu calico geändert werden.
Die Befehle verwenden variablen, die weiter oben in diesem Artikel angegeben wurden : Erstellen eines AKS-Clusters mit Azure Network Policy Manager (Linux).The commands use variables specified earlier in this article Create an AKS cluster with Azure Network Policy Manager (Linux). Ersetzen Sie andernfalls $RESOURCE_GROUP durch die Ressourcengruppe und $CLUSTER_NAME durch den Namen Ihres Clusters.
Führen Sie den folgenden Befehl aus, um die vorhandene Netzwerkrichtlinie des Clusters anzuzeigen.
az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query "networkProfile" \ --output tableFühren Sie den folgenden Befehl aus, um die Netzwerkrichtlinie auf
nonefestzulegen.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy noneFühren Sie den folgenden Befehl aus, um die Netzwerkrichtlinie auf
calicofestzulegen.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy calico
Bereinigen von Ressourcen
In diesem Artikel haben Sie einen Namespace und zwei Pods erstellt und eine Netzwerkrichtlinie angewendet. Wenn Sie diese Ressourcen nicht mehr benötigen, können Sie sie löschen.
Löschen Sie die Ressourcen mithilfe des kubectl delete Befehls.
kubectl delete namespace demo
Wenn Sie die Schritte in diesem Artikel zum Erstellen eines AKS-Clusters befolgt haben, verwenden Sie den Befehl az group delete, um die AKS-Ressourcengruppe und die zugehörige Ressourcengruppe zu löschen, deren Name mit MC_ beginnt.
az group delete --resource-group $RESOURCE_GROUP --no-wait --yes
Erstellen eines AKS-Clusters mit Cilium-Netzwerkrichtlinie mithilfe von Terraform
In diesem Abschnitt wird gezeigt, wie Sie terraform verwenden, um einen AKS-Cluster bereitzustellen, der Azure CNI Powered by Cilium für die Durchsetzung von Netzwerk- und Netzwerkrichtlinien verwendet, und dann eine Kubernetes-Ressource NetworkPolicy zum Steuern des Pod-zu-Pod-Datenverkehrs verwenden.
Note
Der Beispielcode für diesen Abschnitt befindet sich im Azure Terraform GitHub Repository. Sie können die Protokolldatei anzeigen, die die Testergebnisse aus den aktuellen und früheren Versionen von Terraform enthält.
Sehen Sie weitere Artikel und Beispielcode, die zeigen, wie Terraform zur Verwaltung von Azure-Ressourcen verwendet wird.
In diesem Beispiel wird Folgendes bereitgestellt:
- Eine Ressourcengruppe.
- Ein AKS-Cluster, der Azure CNI Overlay-Netzwerk mit Cilium als Netzwerkrichtlinienmodul und Netzwerkdatenplan verwendet.
Erstellen Sie ein Verzeichnis zum Testen und Ausführen des Terraform-Beispielcodes, und machen Sie es zum aktuellen Verzeichnis.
Erstellen Sie eine Datei namens
main.tf, und fügen Sie den folgenden Code ein:terraform { required_version = ">= 1.6.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } resource "azurerm_resource_group" "example" { name = "rg-aks-network-policy-example" location = "eastus" } resource "azurerm_kubernetes_cluster" "example" { name = "aks-network-policy-example" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name dns_prefix = "aksnetpolicyexample" default_node_pool { name = "default" node_count = 1 vm_size = "Standard_D2s_v3" upgrade_settings { drain_timeout_in_minutes = 0 max_surge = "10%" node_soak_duration_in_minutes = 0 } } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" network_plugin_mode = "overlay" network_policy = "cilium" network_data_plane = "cilium" load_balancer_sku = "standard" } }Initialisieren Sie Terraform, indem Sie den
terraform initBefehl ausführen. Dieser Befehl lädt den Azure-Anbieter herunter, der zum Verwalten von Azure-Ressourcen mit Terraform erforderlich ist.terraform initFormatieren und validieren Sie die Konfiguration, indem Sie die Befehle
terraform fmtundterraform validateausführen.terraform fmt terraform validateErstellen Sie einen Terraform-Ausführungsplan, indem Sie den
terraform planBefehl ausführen. Dieser Befehl zeigt Ihnen die Ressourcen, die Terraform in Ihrem Azure-Abonnement erstellt oder ändert.terraform planWenden Sie den Terraform-Ausführungsplan an, indem Sie den
terraform applyBefehl ausführen. Mit diesem Befehl werden die ressourcen erstellt, die in Ihrermain.tfDatei in Ihrem Azure-Abonnement definiert sind.terraform apply
Herstellen einer Verbindung mit dem AKS-Cluster mithilfe von Terraform
Installieren Sie das Befehlszeilentool Kubernetes, indem Sie den
az aks install-cliBefehl ausführen, und überprüfen Sie dann die Installation.az aks install-cli kubectl version --clientKonfigurieren Sie
kubectl, um eine Verbindung mit Ihrem Cluster herzustellen, indem Sie denaz aks get-credentialsBefehl ausführen. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen, und die Kubernetes-Befehlszeilenschnittstelle wird für deren Verwendung konfiguriert.az aks get-credentials \ --resource-group rg-aks-network-policy-example \ --name aks-network-policy-exampleÜberprüfen Sie, ob der Cluster ausgeführt wird, indem Sie den
kubectl get nodesBefehl ausführen.kubectl get nodes
Einrichtung der Netzwerkrichtlinie mit Terraform überprüfen
Um die Netzwerkrichtlinieneinrichtung zu überprüfen, erstellen Sie eine Beispielanwendung, und legen Sie Datenverkehrsregeln fest.
Erstellen Sie einen Namespace mit dem Namen
demo, um die Beispiel-Pods mithilfe deskubectl create namespaceBefehls auszuführen.kubectl create namespace demoErstellen Sie einen Pod mit dem Namen
server, der auf TCP-Port 80 bereitgestellt wird, durch Ausführen des Befehlskubectl run.kubectl run server \ -n demo \ --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \ --labels="app=server" \ --port=80 \ --command -- /agnhost serve-hostname --tcp --http=false --port "80"Erstellen Sie einen Pod, der benannt ist
client, um Bash mithilfe deskubectl runBefehls auszuführen.kubectl run -it client \ -n demo \ --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \ --command -- bashRufen Sie in einem separaten Fenster die IP-Adresse des
serverPods mithilfe deskubectl get podBefehls ab.kubectl get pod --output=wide -n demoVerwenden Sie die
serverPod-IP-Adresse, wenn Sie im nächsten Abschnitt die Verbindung aus derclientShell testen.
Testen der Konnektivität mit Netzwerkrichtlinien mithilfe von Terraform
Das Beispiel enthält ein Kubernetes-Manifest NetworkPolicy, das eingehenden Datenverkehr zu mit app=server gekennzeichneten Pods nur von mit app=client gekennzeichneten Pods über TCP-Port 80 zulässt.
Erstellen Sie eine Datei namens
network-policy.yaml, und fügen Sie den folgenden Code ein:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: demo-policy namespace: demo spec: podSelector: matchLabels: app: server policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: client ports: - protocol: TCP port: 80Wenden Sie die Netzwerkrichtlinie mithilfe des
kubectl applyBefehls an.kubectl apply -f network-policy.yamlTesten Sie in der
clientShell die Verbindung mit dem Server mithilfe des folgenden/agnhostBefehls:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpDie Konnektivität wird blockiert, weil der Server mit
app=servergekennzeichnet ist, der Client jedoch nicht. Ihre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:TIMEOUTBeschriften Sie das
clientund überprüfen Sie die Konnektivität mit dem Server mithilfe des Befehlskubectl label.kubectl label pod client -n demo app=clientTesten Sie in der
clientShell die Verbindung mit dem Server erneut, indem Sie denselben/agnhostBefehl verwenden:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpWenn die Verbindung erfolgreich ist, gibt es keine Ausgabe.
Überprüfen Sie die Netzwerkrichtlinie mithilfe der
kubectl get networkpolicyUndkubectl describe networkpolicyBefehle.kubectl get networkpolicy -n demo kubectl describe networkpolicy demo-policy -n demoDie Ausgabe zeigt, dass die mit
app=servergekennzeichneten Pods ausgewählt sind, Ingress-Datenverkehr über TCP-Port 80 zugelassen wird und nur die mitapp=clientgekennzeichneten Pods Verbindungen initiieren können.
Bereinigen von Ressourcen mithilfe von Terraform
In diesem Abschnitt haben Sie einen Namespace, zwei Pods und eine Netzwerkrichtlinie erstellt. Wenn Sie diese Kubernetes-Ressourcen nicht mehr benötigen, löschen Sie sie, bevor Sie die zugrunde liegende Azure Infrastruktur entfernen.
Verwenden Sie den kubectl delete Befehl, um die Ressourcen zu löschen.
kubectl delete namespace demo
Warning
Mit dem folgenden Befehl werden die Ressourcengruppe, der AKS-Cluster und alle anderen Ressourcen entfernt, die der für dieses Beispiel erstellten Ressourcengruppe zugeordnet sind. Wenn Sie andere Ressourcen in dieser Ressourcengruppe bereitgestellt haben, löscht der Befehl sie ebenfalls.
Entfernen Sie die Azure Ressourcen mithilfe des terraform destroy Befehls.
terraform destroy