Cluster-Netzwerkrichtlinien erstellen

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:

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.

  1. 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
  2. Folgen Sie der Anleitung, um gcloud zur Verwendung Ihres Google Cloud-Kontos zu autorisieren.
  3. Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
  4. Wählen Sie ein Google Cloud-Projekt aus.
  5. 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:

  1. Um das Add-on zu aktivieren, führen Sie folgenden Befehl aus:

    gcloud container clusters update cluster-name --update-addons=NetworkPolicy=ENABLED
  2. 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:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

  2. Klicken Sie auf Erstellen.

  3. Konfigurieren Sie den Cluster wie gewünscht.

  4. Klicken Sie im Navigationsbereich unter Cluster auf Netzwerk.

  5. Klicken Sie auf das Kästchen Netzwerkrichtlinie aktivieren.

  6. Klicken Sie auf Erstellen.

So aktivieren Sie die Durchsetzung von Netzwerkrichtlinien für einen vorhandenen Cluster:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie unter Netzwerk im Feld Netzwerkrichtlinie auf Netzwerkrichtlinie bearbeiten.

  4. Klicken Sie auf das Kästchen Netzwerkrichtlinie für Master aktivieren und anschließend auf Änderungen speichern.

  5. Warten Sie, bis Ihre Änderungen übernommen wurden, und klicken Sie dann noch einmal auf Netzwerkrichtlinie bearbeiten.

  6. Klicken Sie das Kästchen Netzwerkrichtlinie für Knoten aktivieren an.

  7. Klicken Sie auf Änderungen speichern.

API

So aktivieren Sie die Durchsetzung von Netzwerkrichtlinien:

  1. Geben Sie das networkPolicy-Objekt im cluster-Objekt an, das Sie für projects.zones.clusters.create oder projects.zones.clusters.update bereitstellen.

  2. 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 Befehle create und update 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:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie unter Netzwerk im Feld Netzwerkrichtlinie auf Netzwerkrichtlinie bearbeiten.

  4. Entfernen Sie das Häkchen aus dem Kästchen Netzwerkrichtlinie für Knoten aktivieren und klicken Sie auf Änderungen speichern.

  5. Warten Sie, bis Ihre Änderungen übernommen wurden, und klicken Sie dann noch einmal auf Netzwerkrichtlinie bearbeiten.

  6. Entfernen Sie das Häkchen aus dem Kästchen Netzwerkrichtlinie für Master aktivieren.

  7. Klicken Sie auf Änderungen speichern.

API

So deaktivieren Sie die Durchsetzung von Netzwerkrichtlinien für einen vorhandenen Cluster:

  1. Geben Sie das networkPolicy-Objekt im cluster-Objekt an, das Sie für projects.zones.clusters.update bereitstellen.
  2. Setzen Sie im networkPolicy-Objekt den booleschen Wert enabled auf false.

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 Typ e2-medium.
  • Die Durchsetzung von Netzwerkrichtlinien wird nicht für Cluster mit Knoten der Instanzen f1-micro oder g1-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