Auf dieser Seite wird erläutert, wie Sie die Durchsetzung von Netzwerkrichtlinien in Google Kubernetes Engine (GKE) konfigurieren. Allgemeine Informationen zum GKE-Netzwerk finden Sie in der Netzwerkübersicht.
Übersicht
Sie haben in GKE die Möglichkeit, Netzwerkrichtlinien zu durchzusetzen, um damit die Kommunikation zwischen den Pods und den Services eines Clusters zu steuern. Sie definieren eine Netzwerkrichtlinie mit der Kubernetes Network Policy API und erstellen damit Firewallregeln auf Pod-Ebene. Diese Firewallregeln legen fest, welche Pods und Services in einem Cluster aufeinander zugreifen können.
Mithilfe von Netzwerkrichtlinien können Sie unter anderem gestaffelte Sicherheitsebenen aktivieren, wenn auf dem Cluster eine Anwendung mit mehreren Ebenen bereitgestellt wird. Beispielsweise lässt sich mit einer Netzwerkrichtlinie verhindern, dass ein manipulierter Front-End-Dienst in einer Anwendung direkt mit einem mehrere Ebenen tieferen Abrechnungs- oder Buchhaltungsdienst kommuniziert.
Netzwerkrichtlinien können außerdem das gleichzeitige Hosten von Daten mehrerer Nutzer in einer Anwendung vereinfachen. Sie können beispielsweise eine sichere Mehrmandantenfähigkeit bereitstellen, indem Sie ein Mandanten-pro-Namespace-Modell festlegen. In diesem Modell können Regeln von Netzwerkrichtlinien dafür sorgen, dass Pods und Services in einem bestimmten Namespace nicht auf andere Pods oder Services in einem anderen Namespace zugreifen können.
Vorbereitung
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Achten Sie darauf, dass die Google Kubernetes Engine API aktiviert ist. Aktivieren Sie Google Kubernetes Engine API
- Prüfen Sie, ob das Cloud SDK installiert ist.
Mit den folgenden Methoden können Sie die gcloud
-Einstellungen festlegen:
- Verwenden Sie
gcloud init
, wenn Sie die Standardeinstellungen ansehen möchten. - Verwenden Sie
gcloud config
, um Ihre Projekt-ID, Zone und Region individuell festzulegen.
gcloud init verwenden
Wenn Sie die Fehlermeldung One of [--zone, --region] must be supplied: Please specify
location
erhalten, führen Sie diesen Abschnitt aus.
-
Führen Sie
gcloud init
aus und folgen Sie der Anleitung:gcloud init
Wenn Sie SSH auf einem Remote-Server verwenden, können Sie mit dem Flag
--console-only
verhindern, dass mit dem Befehl ein Browserfenster geöffnet wird:gcloud init --console-only
- Folgen Sie der Anleitung, um
gcloud
zur Verwendung Ihres Google Cloud-Kontos zu autorisieren. - Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
- Wählen Sie ein Google Cloud-Projekt aus.
- Wählen Sie eine Compute Engine-Standardzone für zonale Cluster oder eine Region für regionale oder Autopilot-Cluster aus.
gcloud config verwenden
- Legen Sie Ihre standardmäßige Projekt-ID fest:
gcloud config set project PROJECT_ID
- Wenn Sie mit zonalen Clustern arbeiten, legen Sie die Standardzone für Compute Engine fest:
gcloud config set compute/zone COMPUTE_ZONE
- Wenn Sie mit Autopilot oder regionalen Clustern arbeiten, legen Sie die Compute-Standardregion fest:
gcloud config set compute/region COMPUTE_REGION
- Aktualisieren Sie
gcloud
auf die neueste Version:gcloud components update
Durchsetzung von Netzwerkrichtlinien verwenden
Sie haben sowohl beim Erstellen eines GKE-Clusters als auch bei einem bereits vorhandenen Cluster die Möglichkeit, Netzwerkrichtlinien durchzusetzen. Außerdem können Sie Netzwerkrichtlinien für vorhandene Cluster deaktivieren.
Nachdem Sie Netzwerkrichtlinien in Ihrem Cluster aktiviert haben, können Sie eine Netzwerkrichtlinie mit der Kubernetes Network Policy API erstellen.
Durchsetzung von Netzwerkrichtlinien aktivieren
Wenn Sie die Durchsetzung von Netzwerkrichtlinien in einem GKE-Cluster aktivieren, verwaltet GKE Netzwerkrichtlinien innerhalb dieses Clusters und setzt sie durch.
Sie können die Durchsetzung von Netzwerkrichtlinien in GKE mit dem gcloud
-Tool, mit der Google Cloud Console oder mit der GKE REST API aktivieren.
gcloud
Zum Aktivieren der Durchsetzung von Netzwerkrichtlinien beim Erstellen eines neuen Clusters führen Sie den folgenden Befehl aus:
gcloud container clusters create cluster-name --enable-network-policy
Zum Aktivieren der Durchsetzung von Netzwerkrichtlinien für einen vorhandenen Cluster führen Sie folgende Aufgaben aus:
Um das Add-on zu aktivieren, führen Sie folgenden Befehl aus:
gcloud container clusters update cluster-name --update-addons=NetworkPolicy=ENABLED
Mit dem unten aufgeführten Befehl aktivieren Sie die Durchsetzung von Netzwerkrichtlinien für Ihren Cluster. Dadurch werden die Knotenpools Ihres Clusters bei aktivierter Durchsetzung der Netzwerkrichtlinien neu erstellt.
gcloud container clusters update cluster-name --enable-network-policy
Console
So aktivieren Sie die Durchsetzung von Netzwerkrichtlinien beim Erstellen eines neuen Clusters:
Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.
Klicken Sie auf add_box Erstellen.
Konfigurieren Sie den Cluster wie gewünscht.
Klicken Sie im Navigationsbereich unter Cluster auf Netzwerk.
Klicken Sie auf das Kästchen Netzwerkrichtlinie aktivieren.
Klicken Sie auf Erstellen.
So aktivieren Sie die Durchsetzung von Netzwerkrichtlinien für einen vorhandenen Cluster:
Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie unter Netzwerk im Feld Netzwerkrichtlinie auf edit Netzwerkrichtlinie bearbeiten.
Klicken Sie auf das Kästchen Netzwerkrichtlinie für Master aktivieren und anschließend auf Änderungen speichern.
Warten Sie, bis Ihre Änderungen übernommen wurden, und klicken Sie dann noch einmal auf edit Netzwerkrichtlinie bearbeiten.
Klicken Sie das Kästchen Netzwerkrichtlinie für Knoten aktivieren an.
Klicken Sie auf Änderungen speichern.
API
So aktivieren Sie die Durchsetzung von Netzwerkrichtlinien:
Geben Sie das
networkPolicy
-Objekt imcluster
-Objekt an, das Sie für projects.zones.clusters.create oder projects.zones.clusters.update bereitstellen.Das
networkPolicy
-Objekt erfordert ein Enum, in dem angegeben ist, welcher Netzwerkrichtlinienanbieter verwendet werden soll, sowie einen booleschen Wert, der festlegt, ob die Netzwerkrichtlinie aktiviert werden soll. Wenn Sie die Netzwerkrichtlinie aktivieren, aber keinen Anbieter festlegen, geben die Befehlecreate
undupdate
einen Fehler zurück.
Durchsetzung von Netzwerkrichtlinien deaktivieren
Sie können die Durchsetzung von Netzwerkrichtlinien mit dem gcloud
-Tool, mit der Google Cloud Console oder mit der GKE API deaktivieren.
gcloud
Zum Deaktivieren der Durchsetzung von Netzwerkrichtlinien für einen vorhandenen Cluster führen Sie den folgenden Befehl aus:
gcloud container clusters update cluster-name --no-enable-network-policy
Console
So deaktivieren Sie die Durchsetzung von Netzwerkrichtlinien für einen vorhandenen Cluster:
Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie unter Netzwerk im Feld Netzwerkrichtlinie auf edit Netzwerkrichtlinie bearbeiten.
Entfernen Sie das Häkchen aus dem Kästchen Netzwerkrichtlinie für Knoten aktivieren und klicken Sie auf Änderungen speichern.
Warten Sie, bis Ihre Änderungen übernommen wurden, und klicken Sie dann noch einmal auf edit Netzwerkrichtlinie bearbeiten.
Entfernen Sie das Häkchen aus dem Kästchen Netzwerkrichtlinie für Master aktivieren.
Klicken Sie auf Änderungen speichern.
API
So deaktivieren Sie die Durchsetzung von Netzwerkrichtlinien für einen vorhandenen Cluster:
- Geben Sie das
networkPolicy
-Objekt imcluster
-Objekt an, das Sie für projects.zones.clusters.update bereitstellen. - Setzen Sie im
networkPolicy
-Objekt den booleschen Wertenabled
auffalse
.
Wenn Sie die Durchsetzung von Netzwerkrichtlinien deaktivieren, müssen Sie auch alle Add-ons (z. B. Calico DaemonSet) aktualisieren, um anzugeben, dass die Netzwerkrichtlinie für die Add-ons deaktiviert ist:
gcloud container clusters update cluster-name --update-addons=NetworkPolicy=DISABLED
Netzwerkrichtlinien erstellen
Wenn Sie die Durchsetzung von Netzwerkrichtlinien für einen Cluster aktiviert haben, müssen Sie noch eine Netzwerkrichtlinie festlegen. Dafür verwenden Sie die Kubernetes Network Policy API.
Weitere Informationen zum Erstellen einer Netzwerkrichtlinie finden Sie in den folgenden Themen in der Kubernetes-Dokumentation:
Mit PodSecurityPolicy arbeiten
Wenn Sie eine NetworkPolicy verwenden und einen Pod haben, für den eine PodSecurityPolicy gilt, erstellen Sie eine RBAC-Rolle oder ClusterRole, die zur Verwendung der PodSecurityPolicy berechtigt ist. Binden Sie dann die Rolle oder ClusterRole an das Dienstkonto des Pods. Wenn Sie NetworkPolicy und PodSecurityPolicy gemeinsam verwenden, ist das Erteilen von Berechtigungen für Nutzerkonten nicht ausreichend. Sie müssen die Rolle an das Dienstkonto binden. Weitere Informationen finden Sie unter Richtlinien autorisieren.
Overhead, Beschränkungen und Vorbehalte
Für die Durchsetzung von Netzwerkrichtlinien sind auf den Clusterknoten zusätzliche Ressourcen erforderlich. Insbesondere wird dadurch der Arbeitsspeicherbedarf des
kube-system
-Prozesses um etwa 128 MB erhöht und es werden etwa 300 Millicore CPU benötigt.Zur Durchsetzung von Netzwerkrichtlinien müssen Ihre Knoten neu erstellt werden. Wenn es für den Cluster ein aktives Wartungsfenster gibt, werden die Knoten erst innerhalb des nächsten Wartungsfensters automatisch neu erstellt. Sie können den Cluster jedoch jederzeit manuell aktualisieren.
Beschränkungen und Anforderungen
- Der Cluster muss mindestens 2 Knoten vom Typ
e2-medium
oder höher haben. Der kleinste empfohlene Cluster zum Ausführen der Durchsetzung von Netzwerkrichtlinien besteht aus drei Instanzen vom Type2-medium
. - Die Durchsetzung von Netzwerkrichtlinien wird nicht für Cluster mit Knoten der Instanzen
f1-micro
oderg1-small
unterstützt, da die Ressourcenanforderungen für Instanzen dieser Größe zu hoch sind.
Weitere Informationen zu Knotenmaschinentypen und zuweisbaren Ressourcen finden Sie unter Clusterarchitektur – Knoten.
Mit HTTP(S)-Load-Balancer-Systemdiagnosen arbeiten
Wenn ein Ingress auf einen Dienst angewendet wird, um einen HTTP(S)-Load-Balancer zu erstellen, muss die auf die Pods hinter diesem Dienst angewendete Netzwerkrichtlinie auch die jeweiligen IP-Prüfungsbereiche für den HTTP(S)-Load-Balancer zulassen.
Außerdem leiten die Knotenports für einen Dienst ggf. Verbindungen zu Pods auf anderen Knoten weiter, sofern dies nicht verhindert wird, indem in der Dienstdefinition "externalTrafficPolicy" auf "Local" gesetzt wird.
Wenn externalTrafficPolicy
nicht auf Local
gesetzt ist, muss die Netzwerkrichtlinie auch Verbindungen von anderen Knoten-IP-Adressen im Cluster zulassen.
Beachten Sie, dass die Ausführungen in diesem Dokument nicht gelten, wenn Containernatives Load-Balancing mit Netzwerk-Endpunktgruppen verwendet wird.
Weitere Informationen
- Anleitung zu Netzwerkrichtlinien
- Kubernetes-Dokumentation zu Netzwerkrichtlinien lesen
- Gängige Ansätze zur Beschränkung des Traffics mithilfe von Netzwerkrichtlinien
- Logging von Netzwerkrichtlinien verwenden
- NAT-Gateway mit Kubernetes Engine verwenden