Unterstützung mehrerer Netzwerke für Pods einrichten


Auf dieser Seite wird gezeigt, wie Sie mehrere Schnittstellen auf Knoten und Pods in einem GKE-Cluster (Google Kubernetes Engine) aktivieren. Dazu wird die Multi-Netzwerk-Unterstützung für Pods genutzt. Die Unterstützung mehrerer Netzwerke ist nur für Projekte verfügbar, die mit GKE Enterprise aktiviert sind.

Sie sollten bereits mit allgemeinen Netzwerkkonzepten,Terminologie und Konzepten speziell für dieses Feature und Anforderungen und Beschränkungen für die Unterstützung mehrerer Netzwerke für Pods vertraut sein.

Weitere Informationen finden Sie unter Unterstützung mehrerer Netzwerke für Pods.

Anforderungen und Einschränkungen

Für die Unterstützung mehrerer Netzwerke für Pods gelten die folgenden Anforderungen und Einschränkungen:

Voraussetzungen

  • GKE-Version 1.28 oder höher.
  • Google Kubernetes Engine (GKE) Enterprise Edition aktivieren
  • Für die Unterstützung von mehreren Netzwerken für Pods gelten die gleichen Spezifikationen auf VM-Ebene wie für mehrere NICs für Compute Engine.
  • Für die Unterstützung von mehreren Netzwerken für Pods ist GKE Dataplane V2 erforderlich.
  • Die Multi-Netzwerk-Unterstützung für Pods ist nur für Container-Optimized OS-Knoten verfügbar, auf denen Version m101 oder höher ausgeführt wird.

Allgemeine Beschränkungen

  • Die Multinetzwerkunterstützung für Pods funktioniert nicht für Cluster, die für Dual-Stack-Netzwerke aktiviert sind.
  • Eine freigegebene VPC wird nur in der GKE-Version 1.28 oder höher unterstützt.
  • Multi-Pod-CIDR ist für Cluster mit aktiviertem Multi-Netzwerk nicht verfügbar.
  • Pod-Netzwerke in einem einzelnen GKE-Cluster dürfen keine sich überschneidenden CIDR-Bereiche haben.
  • Wenn Sie die Multi-Netzwerk-Unterstützung für Pods aktivieren, können Sie nach dem Erstellen eines Knotenpools keine Netzwerk- oder Pod-Netzwerke hinzufügen oder entfernen. Wenn Sie diese Einstellungen ändern möchten, müssen Sie den Knotenpool neu erstellen.
  • Standardmäßig ist Internetzugriff nicht für zusätzliche Schnittstellen von Pod-Netzwerken innerhalb des Pods verfügbar. Sie können es jedoch manuell mit Cloud NAT aktivieren.
  • Sie können das Standardgateway innerhalb eines Pods mit mehreren Schnittstellen nicht über die API ändern. Das Standardgateway muss mit dem Standard-Pod-Netzwerk verbunden sein.
  • Das Standard-Pod-Netzwerk muss immer in Pods enthalten sein, auch wenn Sie zusätzliche Pod-Netzwerke oder Schnittstellen erstellen.
  • Sie können das Feature für mehrere Netzwerke nicht konfigurieren, wenn Managed Hubble konfiguriert wurde.
  • Zur Verwendung einer freigegebenen VPC muss auf Ihrem GKE-Cluster Version 1.28.4 oder höher ausgeführt werden.
  • Bei freigegebenen VPC-Bereitstellungen müssen alle mit Knoten verbundenen Netzwerkschnittstellen (NICs) zum selben Projekt wie das Hostprojekt gehören.

Einschränkungen für das Geräte- und Datenebenen-Entwicklungskit (DPDK)

  • Eine VM-NIC, die als Device-Typ-NIC an einen Pod übergeben wird, ist für andere Pods auf demselben Knoten nicht verfügbar.
  • Pods, die den DPDK-Modus verwenden, müssen für den Zugriff auf VFIO-Geräte im privilegierten Modus ausgeführt werden.
  • Im DPDK-Modus wird ein Gerät als Knotenressource behandelt und ist nur mit dem ersten Container (nicht-init) im Pod verbunden. Wenn Sie mehrere DPDK-Geräte auf Container im selben Pod aufteilen möchten, müssen Sie diese Container in separaten Pods ausführen.

Skalierungseinschränkungen

GKE bietet eine flexible Netzwerkarchitektur, die es Ihnen ermöglicht, Ihren Cluster zu skalieren. Sie können Ihrem Cluster weitere Knotennetzwerke und Pod-Netzwerke hinzufügen. Sie können Ihren Cluster so skalieren:

  • Sie können jedem GKE-Knotenpool bis zu sieben zusätzliche Knotennetzwerke hinzufügen. Dies ist das gleiche Skalierungslimit für Compute Engine-VMs.
  • An jeden Pod müssen weniger als sieben weitere Netzwerke angehängt sein.
  • Sie können bis zu 35 Pod-Netzwerke in einem einzigen Knotenpool für die acht Knotennetzwerke konfigurieren. Sie können sie in verschiedene Kombinationen unterteilen, wie z. B.:
    • Sieben Knotennetzwerke mit jeweils fünf Pod-Netzwerken
    • Fünf Knotennetzwerke mit jeweils sieben Pod-Netzwerken
    • EIn Knotennetzwerk mit 30 Pod-Netzwerken. Das Limit für sekundäre Bereiche pro Subnetz beträgt 30.
  • Sie können bis zu 50 Pod-Netzwerke pro Cluster konfigurieren.
  • Sie können bis zu 32 Pods mit mehreren Netzwerken pro Knoten konfigurieren.
  • Es können bis zu 3.000 Knoten mit mehreren Schnittstellen vorhanden sein.
  • Sie können bis zu 100.000 zusätzliche Schnittstellen für alle Pods haben.
  • Sie können bis zu 1.000 Knoten mit Netzwerken vom Typ Device konfigurieren.
  • Sie können bis zu vier Netzwerke vom Typ Device pro Knoten konfigurieren.

Preise

Features von Network Function Optimizer (NFO) wie Multi-Netzwerk‑ und Hochleistungsunterstützung für Pods werden nur auf Clustern unterstützt, die sich in Projekten mit GKE Enterprise befinden. Informationen zu den Gebühren, die für das Aktivieren der Google Kubernetes Engine (GKE) Enterprise Edition anfallen, finden Sie bei den GKE Enterprise-Preisen.

Pods mit mehreren Netzwerken bereitstellen

So stellen Sie Pods mit mehreren Netzwerken bereit:

  1. Bereiten Sie eine zusätzliche VPC, ein Subnetz (Knotennetzwerk) und sekundäre Bereiche (Pod-Netzwerk) vor.
  2. Erstellen Sie einen GKE-Cluster mit mehreren Netzwerken mithilfe des Befehlszeilenbefehls Google Cloud.
  3. Erstellen Sie einen neuen GKE-Knotenpool, der über das Google Cloud CLI-Befehl mit dem zusätzlichen Knotennetzwerk und Pod-Netzwerk verbunden ist.
  4. Erstellen Sie ein Pod-Netzwerk und verweisen Sie mithilfe der Kubernetes API auf die richtigen VPC-, Subnetz- und sekundären Bereiche in Multi-Netzwerkobjekten.
  5. Referenzieren Sie in der Arbeitslastkonfiguration das vorbereitete Netzwerkobjekt für das Kubernetes-Objekt mithilfe der Kubernetes API.

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit gcloud components update ab.

Zusätzliche VPC vorbereiten

Google Cloud erstellt während der Clustererstellung ein Standard-Pod-Netzwerk, das dem GKE-Knotenpool zugeordnet ist, der bei der anfänglichen Erstellung des GKE-Clusters verwendet wurde. Das Standard-Pod-Netzwerk ist auf allen Clusterknoten und Pods verfügbar. Sie müssen vorhandene oder neue VPCs vorbereiten, die Netzwerke vom Typ Layer 3 und Device unterstützen, um Funktionen mit mehreren Netzwerken innerhalb des Knotenpools zu ermöglichen.

Berücksichtigen Sie bei der Vorbereitung einer zusätzlichen VPC die folgenden Anforderungen:

  • Netzwerk vom Typ Layer 3 und Netdevice:

    • Erstellen Sie einen sekundären Bereich, wenn Sie Netzwerke vom Typ Layer 3 verwenden.
    • Achten Sie darauf, dass die CIDR-Größe für den sekundären Bereich groß genug ist, um die gewünschte Anzahl der Knoten im Knotenpool und die Anzahl der Pods pro Knoten zu erfüllen.
    • Ähnlich wie das Standard-Pod-Netzwerk verwenden die anderen Pod-Netzwerke die IP-Adressen-Überbereitstellung. Der sekundäre IP-Adressbereich muss doppelt so viele IP-Adressen pro Knoten haben wie die Anzahl der Pods pro Knoten.
  • Netzwerkanforderungen vom Typ Device: Erstellen Sie ein reguläres Subnetz in einer VPC. Sie benötigen kein sekundäres Subnetz.

Zum Aktivieren von Multi-Netzwerk-Funktionen im Knotenpool müssen Sie die VPCs vorbereiten, zu denen Sie zusätzliche Verbindungen herstellen möchten. Sie können eine vorhandene VPC verwenden oder speziell für den Knotenpool eine neue VPC erstellen.

VPC-Netzwerk erstellen, das ein Gerät vom Typ Layer 3 unterstützt

So erstellen Sie ein VPC-Netzwerk, das ein Gerät vom Typ Layer 3 unterstützt:

  • Achten Sie darauf, dass die CIDR-Größe für den sekundären Bereich groß genug ist, um die Anzahl der Knoten im Knotenpool und die gewünschte Anzahl der Pods pro Knoten zu erfüllen.
  • Ähnlich wie das Standard-Pod-Netzwerk verwenden die anderen Pod-Netzwerke die IP-Adressen-Überbereitstellung. Der sekundäre IP-Adressereich muss doppelt so viele IP-Adressen pro Knoten haben wie die Anzahl der Pods pro Knoten.

gcloud

gcloud compute networks subnets create SUBNET_NAME \
    --project=PROJECT_ID \
    --range=SUBNET_RANGE \
    --network=NETWORK_NAME \
    --region=REGION \
    --secondary-range=SECONDARY_RANGE_NAME=<SECONDARY_RANGE_RANGE>

Ersetzen Sie Folgendes:

  • SUBNET_NAME: der Name des Subnetzes.
  • PROJECT_ID: die ID des Projekts, das das VPC-Netzwerk enthält, in dem das Subnetz erstellt wird.
  • SUBNET_RANGE: der primäre IPv4-Adressbereich für das neue Subnetz in CIDR-Notation.
  • NETWORK_NAME: der Name des VPC-Netzwerks, das das neue Subnetz enthält.
  • REGION: die Google Cloud-Region, in der das neue Subnetz erstellt wird.
  • SECONDARY_RANGE_NAME: der Name des sekundären Bereichs.
  • SECONDARY_IP_RANGE: der sekundäre IPv4-Adressbereich in CIDR-Notation.

Console

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

  2. Klicken Sie auf VPC-Netzwerk erstellen.

  3. Geben Sie im Feld Name den Namen des Netzwerks ein. Beispiel: l3-vpc

  4. Wählen Sie im Drop-down-Menü Maximale Übertragungseinheit (MTU) den entsprechenden MTU-Wert aus.

  5. Wählen Sie im Abschnitt Modus für Subnetzerstellung die Option Benutzerdefiniert aus.

  6. Klicken Sie auf Subnetz hinzufügen.

  7. Legen Sie im Abschnitt Neues Subnetz folgende Konfigurationsparameter für das Subnetz fest:

    1. Geben Sie einen Namen an. Beispiel: l3-subnet.

    2. Wählen Sie eine Region aus.

    3. Geben Sie einen IP-Adressbereich ein. Dies ist der primäre IPv4-Bereich für das Subnetz.

      Wenn Sie einen Bereich auswählen, der keine RFC 1918-Adresse ist, prüfen Sie, ob der Bereich mit einer vorhandenen Konfiguration in Konflikt steht. Weitere Informationen finden Sie unter IPv4-Subnetzbereiche.

    4. Klicken Sie auf Sekundären IP-Adressbereich erstellen, um einen sekundären Bereich für das Subnetz festzulegen.

      Wenn Sie einen Bereich auswählen, der keine RFC 1918-Adresse ist, prüfen Sie, ob der Bereich mit einer vorhandenen Konfiguration in Konflikt steht. Weitere Informationen finden Sie unter IPv4-Subnetzbereiche.

    5. Privater Google-Zugriff: Sie können den privaten Google-Zugriff für das Subnetz beim Erstellen aktivieren oder das Subnetz später entsprechend bearbeiten.

    6. Flusslogs: Sie können VPC-Flusslogs für das Subnetz beim Erstellen aktivieren oder das Subnetz später entsprechend bearbeiten.

    7. Klicken Sie auf Fertig.

  8. Wählen Sie im Abschnitt Firewallregeln unter IPv4-Firewallregeln null oder mehr vordefinierte Firewallregeln aus.

    Die Regeln berücksichtigen gängige Anwendungsfälle für die Konnektivität zu Instanzen. Sie können Ihre eigenen Firewallregeln erstellen, nachdem Sie das Netzwerk erstellt haben. Jeder vordefinierte Regelname beginnt mit dem Namen des VPC-Netzwerks, das Sie erstellen:

  9. Klicken Sie unter IPv4-Firewallregeln auf BEARBEITEN, um die vordefinierte Firewallregel für eingehenden Traffic mit dem Namen allow-custom zu bearbeiten.

    Sie können Subnetze bearbeiten, zusätzliche IPv4-Bereiche hinzufügen und Protokolle und Ports angeben.

    Die Firewallregel allow-custom wird nicht automatisch aktualisiert, wenn Sie später zusätzliche Subnetze hinzufügen. Wenn Sie Firewallregeln für die neuen Subnetze benötigen, müssen Sie die Firewallkonfiguration aktualisieren, um die Regeln hinzuzufügen.

  10. Im Abschnitt Modus für dynamisches Routing für das VPC-Netzwerk: Weitere Informationen finden Sie unter Modus für dynamisches Routing. Sie können später den Modus für dynamisches Routing ändern.

  11. Klicken Sie auf Erstellen.

VPC-Netzwerk erstellen, das Geräte vom Typ Netdevice oder DPDK unterstützt

gcloud

gcloud compute networks subnets create SUBNET_NAME \
    --project=PROJECT_ID \
    --range=SUBNET_RANGE \
    --network=NETWORK_NAME \
    --region=REGION \
    --secondary-range=SECONDARY_RANGE_NAME=<SECONDARY_RANGE_RANGE>

Ersetzen Sie Folgendes:

  • SUBNET_NAME: der Name des Subnetzes.
  • PROJECT_ID: die ID des Projekts, das das VPC-Netzwerk enthält, in dem das Subnetz erstellt wird.
  • SUBNET_RANGE: der primäre IPv4-Adressbereich für das neue Subnetz in CIDR-Notation.
  • NETWORK_NAME: der Name des VPC-Netzwerks, das das neue Subnetz enthält.
  • REGION: die Google Cloud-Region, in der das neue Subnetz erstellt wird.
  • SECONDARY_RANGE_NAME: der Name des sekundären Bereichs.
  • SECONDARY_IP_RANGE: der sekundäre IPv4-Adressbereich in CIDR-Notation.

Console

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

  2. Klicken Sie auf VPC-Netzwerk erstellen.

  3. Geben Sie im Feld Name den Namen des Netzwerks ein. Beispiel: netdevice-vpcoder dpdk-vpc.

  4. Wählen Sie im Drop-down-Menü Maximale Übertragungseinheit (MTU) den entsprechenden MTU-Wert aus.

  5. Wählen Sie im Abschnitt Modus für Subnetzerstellung die Option Benutzerdefiniert aus.

  6. Legen Sie im Abschnitt Neues Subnetz folgende Konfigurationsparameter für das Subnetz fest:

    1. Geben Sie einen Namen an. Beispiel: netdevice-subnetoder dpdk-vpc

    2. Wählen Sie eine Region aus.

    3. Geben Sie einen IP-Adressbereich ein. Dies ist der primäre IPv4-Bereich für das Subnetz.

      Wenn Sie einen Bereich auswählen, der keine RFC 1918-Adresse ist, prüfen Sie, ob der Bereich mit einer vorhandenen Konfiguration in Konflikt steht. Weitere Informationen finden Sie unter IPv4-Subnetzbereiche.

    4. Privater Google-Zugriff: Legen Sie fest, ob der private Google-Zugriff für das Subnetz bei der Erstellung aktiviert werden soll oder ob dies später erfolgen soll.

    5. Flusslogs: Sie können VPC-Flusslogs für das Subnetz beim Erstellen aktivieren oder das Subnetz später entsprechend bearbeiten.

    6. Klicken Sie auf Fertig.

  7. Wählen Sie im Abschnitt Firewallregeln unter IPv4-Firewallregeln null oder mehr vordefinierte Firewallregeln aus.

    Die Regeln berücksichtigen gängige Anwendungsfälle für die Konnektivität zu Instanzen. Sie können Ihre eigenen Firewallregeln erstellen, nachdem Sie das Netzwerk erstellt haben. Jeder vordefinierte Regelname beginnt mit dem Namen des VPC-Netzwerks, das Sie erstellen:

  8. Klicken Sie unter IPv4-Firewallregeln auf BEARBEITEN, um die vordefinierte Firewallregel für eingehenden Traffic mit dem Namen allow-custom zu bearbeiten.

    Sie können Subnetze bearbeiten, zusätzliche IPv4-Bereiche hinzufügen und Protokolle und Ports angeben.

    Die Firewallregel allow-custom wird nicht automatisch aktualisiert, wenn Sie später zusätzliche Subnetze hinzufügen. Wenn Sie Firewallregeln für die neuen Subnetze benötigen, müssen Sie die Firewallkonfiguration aktualisieren, um die Regeln hinzuzufügen.

  9. Im Abschnitt Modus für dynamisches Routing für das VPC-Netzwerk: Weitere Informationen finden Sie unter Modus für dynamisches Routing. Sie können später den Modus für dynamisches Routing ändern.

  10. Klicken Sie auf Erstellen.

GKE-Cluster mit Multi-Netzwerk-Funktionen erstellen

gcloud

So erstellen Sie einen GKE-Cluster mit Funktionen für mehrere Netzwerke:

gcloud container clusters create CLUSTER_NAME \
    --cluster-version=CLUSTER_VERSION \
    --enable-dataplane-v2 \
    --enable-ip-alias \
    --enable-multi-networking

Ersetzen Sie Folgendes:

  • CLUSTER_NAME ist der Name des Clusters.
  • CLUSTER_VERSION: die Version des Clusters.

Er enthält die folgenden Flags:

  • --enable-multi-networking: aktiviert benutzerdefinierte Ressourcendefinitionen (CRDs) für mehrere Netzwerke im API-Server für diesen Cluster und stellt einen Netzwerk-Controller-Manager bereit, der die Abgleich- und Lebenszyklusverwaltung für Objekte in mehreren Netzwerken enthält.
  • --enable-dataplane-v2: aktiviert GKE Dataplane V2. Dieses Flag ist erforderlich, um mehrere Netzwerke zu aktivieren.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite „Google Kubernetes Engine“

  2. Klicken Sie auf Erstellen.

  3. Konfigurieren Sie den Standardcluster. Weitere Informationen finden Sie unter Zonalen Cluster erstellen oder Regionalen Cluster erstellen. Wählen Sie beim Erstellen des Clusters das entsprechende Netzwerk- und Knotensubnetz aus.

  4. Klicken Sie im Navigationsbereich unter Cluster auf Netzwerk.

  5. Klicken Sie auf das Kästchen Dataplane V2 aktivieren.

  6. Wählen Sie Multi-Netzwerk aktivieren aus.

  7. Klicken Sie auf Erstellen.

Durch Aktivieren von Multi-Netzwerk für einen Cluster werden dem API-Server für diesen Cluster die erforderlichen CustomResourceDefinitions (CRDs) hinzugefügt. Außerdem wird ein Netzwerk-Controller-Manager bereitgestellt, der für den Abgleich und die Verwaltung von Objekten mit mehreren Netzwerken zuständig ist. Sie können die Clusterkonfiguration nach dem Erstellen nicht mehr ändern.

GKE-Knotenpool erstellen, der mit zusätzlichen VPCs verbunden ist

Erstellen Sie einen Knotenpool mit Knoten, die mit dem Knoten-Netzwerk (VPC und Subnetz) und dem Pod-Netzwerk (sekundärer Bereich) verbunden sind, das unter Pod-Netzwerk erstellen erstellt wurde.

So erstellen Sie den neuen Knotenpool und verknüpfen ihn mit den zusätzlichen Netzwerken im GKE-Cluster:

gcloud

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --additional-node-network network=NETWORK_NAME,subnetwork=SUBNET_NAME \
  --additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=POD_IP_RANGE,max-pods-per-node=NUMBER_OF_PODS \
  --additional-node-network network=highperformance,subnetwork=subnet-highperf

Ersetzen Sie Folgendes:

  • POOL_NAME durch den Namen des neuen Knotenpools.
  • CLUSTER_NAME durch den Namen des vorhandenen Clusters, dem Sie den Knotenpool hinzufügen.
  • NETWORK_NAME durch den Namen des Netzwerks, an das die Knoten des Knotenpools angehängt werden sollen.
  • SUBNET_NAME durch den Namen des Subnetzes innerhalb des Netzwerks, das für die Knoten verwendet werden soll.
  • POD_IP_RANGE der Pod-IP-Adressbereich innerhalb des Subnetzes.
  • NUMBER_OF_PODS maximale Anzahl von Pods pro Knoten.

Er enthält die folgenden Flags:

  • --additional-node-network: definiert Details zur zusätzlichen Netzwerkschnittstelle, zum Netzwerk und Subnetzwerk. Damit werden die Knotennetzwerke für die Verbindung mit den Knotenpoolknoten angegeben. Geben Sie diesen Parameter an, wenn Sie eine Verbindung zu einer anderen VPC herstellen möchten. Wenn Sie diesen Parameter nicht angeben, wird die mit dem Cluster verknüpfte Standard-VPC verwendet. Geben Sie für Netzwerke vom Typ Layer 3 das Flag additional-pod-network an, das das Pod-Netzwerk definiert, das im GKE-Cluster als Network-Objekt bereitgestellt wird. Wenn Sie das Flag --additional-node-network verwenden, müssen Sie ein Netzwerk und ein Subnetzwerk als obligatorische Parameter angeben. Trennen Sie die Netzwerk- und Subnetzwerkwerte durch ein Komma und verwenden Sie keine Leerzeichen.
  • --additional-pod-network: gibt die Details des sekundären Bereichs an, der für das Pod-Netzwerk verwendet werden soll. Dieser Parameter ist nicht erforderlich, wenn Sie ein Netzwerk des Typs Device verwenden. Dieses Argument gibt die folgenden Schlüsselwerte an: subnetwork, pod-ipv4-range und max-pods-per-node. Wenn Sie --additional-pod-network verwenden, müssen Sie die Werte pod-ipv4-range und max-pods-per-node durch Kommas und ohne Leerzeichen getrennt angeben.
    • subnetwork: verknüpft das Knotennetzwerk mit dem Pod-Netzwerk. Das Subnetzwerk ist optional. Wenn Sie es nicht angeben, wird das zusätzliche Pod-Netzwerk dem Standard-Subnetzwerk zugeordnet, das bei der Clustererstellung bereitgestellt wird.
    • --max-pods-per-node: max-pods-per-node muss angegeben werden und muss eine Potenz von 2 sein. Der Mindestwert beträgt 4. Der max-pods-per-node darf nicht größer als der Wert max-pods-per-node im Knotenpool sein.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie im Navigationsbereich auf Cluster.

  3. Klicken Sie im Abschnitt Kubernetes-Cluster auf den Cluster, den Sie erstellt haben.

  4. Klicken Sie oben auf der Seite auf Knotenpool hinzufügen, um den Knotenpool zu erstellen.

  5. Geben Sie im Bereich Knotenpooldetails Folgendes ein:

    1. Geben Sie einen Namen für den Knotenpool ein.
    2. Geben Sie die Anzahl der Knoten ein, die im Knotenpool erstellt werden sollen.
  6. Klicken Sie im Navigationsbereich unter Knotenpools auf Knoten.

    1. Wählen Sie in der Drop-down-Liste Image-Typ das Knoten-Image Container-Optimized OS mit „containerd“ (cos_containerd) aus.

  7. Wenn Sie eine VM erstellen, wählen Sie einen Maschinentyp aus einer Maschinenfamilie aus, die die für diese VM verfügbaren Ressourcen bestimmt. Ein Maschinentyp wie e2-standard-4 enthält beispielsweise 4 vCPUs und kann daher insgesamt bis zu 4 VPCs unterstützen. Sie können aus mehreren Maschinenfamilien wählen. Jede Maschinenfamilie ist weiter in Maschinenserien und vordefinierte oder benutzerdefinierte Maschinentypen in jeder Serie unterteilt. Jeder Maschinentyp wird unterschiedlich abgerechnet. Weitere Informationen finden Sie in der Preisübersicht für Maschinentypen.

  8. Wählen Sie im Navigationsbereich die Option Netzwerk aus.

  9. Geben Sie im Abschnitt Knotennetzwerk die maximale Anzahl von Pods pro Knoten an. Im Abschnitt „Knotennetzwerke“ wird das VPC-Netzwerk angezeigt, das zum Erstellen des Clusters verwendet wurde. Es ist erforderlich, zusätzliche Knotennetzwerke festzulegen, die mit zuvor festgelegten VPC-Netzwerken und Gerätetypen korrelieren.

  10. Erstellen Sie eine Knotenpoolverknüpfung:

    1. Für ein Gerät vom Typ Layer 3:
      1. Klicken Sie im Abschnitt Knotennetzwerke auf Knotennetzwerk hinzufügen.
      2. Wählen Sie in der Drop-down-Liste "Netzwerk" die VPC aus, die Geräte des Typs "Layer 3" unterstützt.
      3. Wählen Sie das für die VPC Layer 3 erstellte Subnetz aus.
      4. Klicken Sie im Abschnitt Alias-Pod-IP-Adressbereiche auf Pod-IP-Adressbereich hinzufügen.
      5. Wählen Sie das Sekundäre Subnetz aus und geben Sie die maximale Anzahl von Pods pro Knoten an.
      6. Wählen Sie Fertig aus.
    2. Für Geräte vom Typ Netdevice und DPDK:
      1. Klicken Sie im Abschnitt Knotennetzwerke auf Knotennetzwerk hinzufügen.
      2. Wählen Sie in der Drop-down-Liste „Netzwerk“ die VPC aus, die Geräte vom Typ Netdevice oder DPDK unterstützt.
      3. Wählen Sie das Subnetz aus, das für die VPC Netdevice oder DPDK erstellt wurde.
      4. Wählen Sie Fertig aus.
  11. Klicken Sie auf Erstellen.

Hinweise:

  • Wenn im selben Knotennetzwerk mehrere zusätzliche Pod-Netzwerke angegeben sind, müssen sie sich im selben Subnetz befinden.
  • Sie können nicht denselben sekundären Bereich eines Subnetzes mehrmals referenzieren.

Beispiel: Im folgenden Beispiel wird ein Knotenpool mit dem Namen "pool-multi-net" erstellt, der zwei zusätzliche Netzwerke an die Knoten anhängt: datapalane (Netzwerk vom Typ Layer 3) und highperformance (Netzwerk vom Typ "netdevice"). In diesem Beispiel wird davon ausgegangen, dass Sie bereits einen GKE-Cluster mit dem Namen cluster-1 erstellt haben:

gcloud container node-pools create pool-multi-net \
  --project my-project \
  --cluster cluster-1 \
  --zone us-central1-c \
  --additional-node-network network=dataplane,subnetwork=subnet-dp \
  --additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-blue,max-pods-per-node=8 \
  --additional-node-network network=highperformance,subnetwork=subnet-highperf

Um zusätzliche Knotennetzwerk- und Pod-Netzwerkschnittstellen anzugeben, definieren Sie die Parameter --additional-node-network und --additional-pod-network mehrmals, wie im folgenden Beispiel gezeigt:

--additional-node-network network=dataplane,subnetwork=subnet-dp \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-blue,max-pods-per-node=8 \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-green,max-pods-per-node=8 \
--additional-node-network network=managementdataplane,subnetwork=subnet-mp \
--additional-pod-network subnetwork=subnet-mp,pod-ipv4-range=sec-range-red,max-pods-per-node=4

Sie können zusätzliche Pod-Netzwerke direkt auf der primären VPC-Schnittstelle des Knotenpools angeben, wie im folgenden Beispiel gezeigt:

--additional-pod-network subnetwork=subnet-def,pod-ipv4-range=sec-range-multinet,max-pods-per-node=8

Pod-Netzwerk erstellen

Definieren Sie die Pod-Netzwerke, auf die die Pods zugreifen, indem Sie Kubernetes-Objekte definieren und sie mit den entsprechenden Compute Engine-Ressourcen wie VPCs, Subnetzen und sekundären Bereichen verknüpfen.

Zum Erstellen eines Pod-Netzwerks müssen Sie die Netzwerk-CRD-Objekte im Cluster definieren.

Layer 3-VPC-Netzwerk konfigurieren

YAML

Erstellen Sie für die VPC Layer 3 die Objekte Network und GKENetworkParamSet:

  1. Speichern Sie das folgende Beispielmanifest als blue-network.yaml:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: blue-network
    spec:
      type: "L3"
      parametersRef:
        group: networking.gke.io
        kind: GKENetworkParamSet
        name: "l3-vpc"
    

    Das Manifest definiert eine Network-Ressource mit dem Namen blue-network des Typs Layer 3. Das Network-Objekt verweist auf das GKENetworkParamSet-Objekt namens l3-vpc, das ein Netzwerk mit Compute Engine-Ressourcen verknüpft.

  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f blue-network.yaml
    
  3. Speichern Sie das folgende Manifest als dataplane.yaml:

    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: "l3-vpc"
    spec:
      vpc: "l3-vpc"
      vpcSubnet: "subnet-dp"
      podIPv4Ranges:
        rangeNames:
        - "sec-range-blue"
    

    Dieses Manifest definiert das GKENetworkParamSet-Objekt namens dataplane, legt den VPC-Namen als dataplane fest, den Subnetznamen als subnet-dp und einen sekundären IPv4-Adressbereich für Pods namens sec-range-blue.

  4. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f dataplane.yaml
    

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie im Navigationsbereich auf Network Function Optimizer.

  3. Klicken Sie auf GKE Enterprise aktivieren.

  4. Klicken Sie oben auf der Seite auf Erstellen, um Ihr Pod-Netzwerk zu erstellen.

  5. Prüfen Sie die Details im Abschnitt Vorbereitung.

  6. Klicken Sie auf WEITER: POD-NETZWERKSTANDORT.

  7. Wählen Sie im Abschnitt Pod-Netzwerkstandort in der Drop-down-Liste Cluster den GKE-Cluster aus, für den Multi-Netzwerk und GKE Dataplane V2 aktiviert sind.

  8. Klicken Sie auf WEITER: VPC-NETZWERKREFERENZ.

  9. Wählen Sie im Abschnitt VPC-Netzwerkreferenz aus dem Drop-down-Menü VPC-Netzwerkreferenz das VPC-Netzwerk aus, das für Layer 3-multinic-Pods verwendet wird.

  10. Klicken Sie auf WEITER: POD-NETZWERKTYP.

  11. Wählen Sie im Abschnitt Pod-Netzwerktyp die Option L3 aus und geben Sie den Pod-Netzwerknamen ein.

  12. Klicken Sie auf WEITER: SEKUNDÄRER BEREICH DES POD-NETZWERKS.

  13. Geben Sie im Abschnitt Sekundärer Bereich des Pod-Netzwerks den sekundären Bereich ein.

  14. Klicken Sie auf Weiter: POD-NETZWERKROUTEN.

  15. Wählen Sie im Abschnitt Pod-Netzwerkrouten die Option ROUTE HINZUFÜGEN aus, um Benutzerdefinierte Routen zu definieren.

  16. Klicken Sie auf POD-NETZWERK ERSTELLEN.

DPDK-Netzwerk konfigurieren

YAML

Erstellen Sie für die DPDK-VPC die Objekte Network und GKENetworkParamSet.

  1. Speichern Sie das folgende Beispielmanifest als dpdk-network.yaml:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: dpdk-network
    spec:
      type: "Device"
      parametersRef:
        group: networking.gke.io
        kind: GKENetworkParamSet
        name: "dpdk"
    

    Dieses Manifest definiert eine Network-Ressource mit dem Namen dpdk-network und dem Typ Device. Die Network-Ressource verweist für ihre Konfiguration auf ein GKENetworkParamSet-Objekt namens dpdk.

  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f dpdk-network.yaml
    
  3. Speichern Sie für das GKENetworkParamSet-Objekt das folgende Manifest als dpdk.yaml:

    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: "dpdk"
    spec:
      vpc: "dpdk"
      vpcSubnet: "subnet-dpdk"
      deviceMode: "DPDK-VFIO"
    

    Dieses Manifest definiert das GKENetworkParamSet-Objekt mit dem Namen dpdk, den VPC-Namen als dpdk, den Subnetznamen als subnet-dpdk und den Namen von deviceMode als DPDK-VFIO.

  4. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f dpdk-network.yaml
    

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie im Navigationsbereich auf Network Function Optimizer.

  3. Klicken Sie oben auf der Seite auf Erstellen, um Ihr Pod-Netzwerk zu erstellen.

  4. Prüfen Sie die Details im Abschnitt Vorbereitung.

  5. Klicken Sie auf WEITER: POD-NETZWERKSTANDORT.

  6. Wählen Sie im Abschnitt Pod-Netzwerkstandort in der Drop-down-Liste Cluster den GKE-Cluster aus, für den Multi-Netzwerk und GKE Dataplane V2 aktiviert sind.

  7. Klicken Sie auf WEITER: VPC-NETZWERKREFERENZ.

  8. Wählen Sie im Abschnitt VPC-Netzwerkreferenz aus dem Drop-down-Menü VPC-Netzwerkreferenz das VPC-Netzwerk, das für dpdk-multinic-Pods verwendet wird.

  9. Klicken Sie auf WEITER: POD-NETZWERKTYP.

  10. Wählen Sie im Abschnitt Pod-Netzwerktyp die Option DPDK-VFIO (Gerät) aus und geben Sie den Pod-Netzwerknamen ein.

  11. Klicken Sie auf WEITER: SEKUNDÄRER BEREICH DES POD-NETZWERKS. Der Abschnitt für den sekundären Bereich des Pod-Netzwerks ist nicht verfügbar

  12. Klicken Sie auf Weiter: POD-NETZWERKROUTEN. Wählen Sie im Abschnitt „Pod-Netzwerkrouten“ die Option ROUTE HINZUFÜGEN aus, um benutzerdefinierte Routen zu definieren

  13. Klicken Sie auf POD-NETZWERK ERSTELLEN.

Netzwerk des Netzwerkgeräts konfigurieren

Erstellen Sie für die VPC netdevice die Objekte Network und GKENetworkParamSet.

YAML

  1. Speichern Sie das folgende Beispielmanifest als netdevice-network.yaml:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
        name: netdevice-network
    spec:
        type: "Device"
        parametersRef:
          group: networking.gke.io
          kind: GKENetworkParamSet
          name: "netdevice"
    

    Dieses Manifest definiert eine Network-Ressource mit dem Namen netdevice-network und dem Typ Device. Sie verweist auf das Objekt GKENetworkParamSet mit dem Namen netdevice.

  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f netdevice-network.yaml
    
  3. Speichern Sie das folgende Manifest als netdevice.yaml:

    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: netdevice
    spec:
      vpc: netdevice
      vpcSubnet: subnet-netdevice
      deviceMode: NetDevice
    

    Dieses Manifest definiert eine GKENetworkParamSet-Ressource mit dem Namen netdevice, legt den VPC-Namen als netdevice, den Subnetznamen als subnet-netdevice und den Gerätemodus als NetDevice fest.

  4. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f netdevice.yaml
    

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie im Navigationsbereich auf Network Function Optimizer.

  3. Klicken Sie oben auf der Seite auf Erstellen, um Ihr Pod-Netzwerk zu erstellen.

  4. Prüfen Sie die Details im Abschnitt Vorbereitung.

  5. Klicken Sie auf WEITER: POD-NETZWERKSTANDORT.

  6. Wählen Sie im Abschnitt Pod-Netzwerkstandort in der Drop-down-Liste Cluster den GKE-Cluster aus, für den Multi-Netzwerk und GKE Dataplane V2 aktiviert sind.

  7. Klicken Sie auf WEITER: VPC-NETZWERKREFERENZ.

  8. Wählen Sie im Abschnitt VPC-Netzwerkreferenz aus dem Drop-down-Menü VPC-Netzwerkreferenz das VPC-Netzwerk aus, das für netdevice-multinic-Pods verwendet wird.

  9. Klicken Sie auf WEITER: POD-NETZWERKTYP.

  10. Wählen Sie im Abschnitt Pod-Netzwerktyp die Option NetDevice (Gerät) aus und geben Sie den Pod-Netzwerknamen ein.

  11. Klicken Sie auf WEITER: SEKUNDÄRER BEREICH DES POD-NETZWERKS. Der Abschnitt für den sekundären Bereich des Pod-Netzwerks ist nicht verfügbar

  12. Klicken Sie auf Weiter: POD-NETZWERKROUTEN. Wählen Sie im Abschnitt "Pod-Netzwerkrouten" die Option ROUTE HINZUFÜGEN aus, um benutzerdefinierte Routen zu definieren.

  13. Klicken Sie auf POD-NETZWERK ERSTELLEN.

Netzwerkrouten konfigurieren

Durch das Konfigurieren der Netzwerkroute können Sie benutzerdefinierte Routen für ein bestimmtes Netzwerk definieren, die auf den Pods eingerichtet werden, um Traffic an die entsprechende Schnittstelle innerhalb des Pods weiterzuleiten.

YAML

  1. Speichern Sie das folgende Manifest als red-network.yaml:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: red-network
    spec:
      type: "L3"
      parametersRef:
        group: networking.gke.io
        kind: GKENetworkParamSet
        name: "management"
      routes:
      -   to: "10.0.2.0/28"
    

    Dieses Manifest definiert eine Netzwerkressource namens red-network mit dem Typ Layer 3 und der benutzerdefinierten Route "10.0.2.0/28" über diese Netzwerkschnittstelle.

  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f red-network.yaml
    

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite „Google Kubernetes Engine“

  2. Klicken Sie auf Erstellen.

  3. Klicken Sie im Navigationsbereich auf Network Function Optimizer.

  4. Klicken Sie im Abschnitt Kubernetes-Cluster auf den Cluster, den Sie erstellt haben.

  5. Klicken Sie oben auf der Seite auf Erstellen, um das Pod-Netzwerk zu erstellen.

  6. Definieren Sie im Abschnitt Pod-Netzwerkrouten Benutzerdefinierte Routen.

  7. Klicken Sie auf POD-NETZWERK ERSTELLEN.

Auf die erstellte Network verweisen

Verweisen Sie in der Arbeitslastkonfiguration mit dem Kubernetes API auf das erstellte Kubernetes-Objekt Network.

Pod mit bestimmten Netzwerken verbinden

Zum Verbinden von Pods mit den angegebenen Netzwerken müssen Sie die Namen der Network-Objekte als Annotationen in die Pod-Konfiguration aufnehmen. Achten Sie darauf, dass sowohl die default Network als auch die ausgewählten zusätzlichen Netzwerke in den Annotationen enthalten sind, um die Verbindungen herzustellen.

  1. Speichern Sie das folgende Beispielmanifest als sample-l3-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: sample-l3-pod
      annotations:
        networking.gke.io/default-interface: 'eth0'
        networking.gke.io/interfaces: |
          [
            {"interfaceName":"eth0","network":"default"},
            {"interfaceName":"eth1","network":"l3-network"}
          ]
    spec:
      containers:
      - name: sample-l3-pod
        image: busybox
        command: ["sleep", "10m"]
        ports:
        - containerPort: 80
      restartPolicy: Always
    

    Dieses Manifest erstellt einen Pod mit dem Namen sample-l3-pod und zwei Netzwerkschnittstellen eth0 und eth1, die den Netzwerken default und blue-network zugeordnet sind.

  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f sample-l3-pod.yaml
    

Pod mit mehreren Netzwerken verbinden

  1. Speichern Sie das folgende Beispielmanifest als sample-l3-netdevice-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: sample-l3-netdevice-pod
      annotations:
        networking.gke.io/default-interface: 'eth0'
        networking.gke.io/interfaces: |
          [
            {"interfaceName":"eth0","network":"default"},
            {"interfaceName":"eth1","network":"l3-network"},
            {"interfaceName":"eth2","network":"netdevice-network"}
          ]
    spec:
      containers:
      - name: sample-l3-netdevice-pod
        image: busybox
        command: ["sleep", "10m"]
        ports:
        - containerPort: 80
      restartPolicy: Always
    

    Dieses Manifest erstellt einen Pod mit dem Namen sample-l3-netdevice-pod und drei Netzwerkschnittstellen eth0, eth1 und eth2, die jeweils den Netzwerken default, l3-network und netdevice zugeordnet sind.

  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f sample-l3-netdevice-pod.yaml
    

Sie können dieselbe Annotation in jedem ReplicaSet (Deployment oder DaemonSet) im Annotationsabschnitt der Vorlage verwenden.

Wenn Sie einen Pod mit einer Spezifikation für mehrere Netzwerke erstellen, generieren die Komponenten der Datenebene automatisch die Schnittstellenkonfiguration des Pods und speichern sie in den NetworkInterface-CRs. Erstellen Sie eine NetworkInterface-CR für jeden nicht standardmäßigen Network, der in der Pod-Spezifikation angegeben ist.

Das folgende Manifest zeigt beispielsweise Details aus einem NetworkInterface-Manifest:

apiVersion: v1
items:
-   apiVersion: networking.gke.io/v1
  kind: NetworkInterface
  metadata:
    labels:
      podName: samplepod
    name: "samplepod-c0b60cbe"
    namespace: default
  spec:
    networkName: "blue-network"
  status:
    gateway4: 172.16.1.1
    ipAddresses:
    -   172.16.1.2/32
    macAddress: 82:89:96:0b:92:54
    podName: samplepod

Dieses Manifest enthält den Netzwerknamen, die Gateway-Adresse, die zugewiesenen IP-Adressen, die MAC-Adresse und den Pod-Namen.

Beispielkonfiguration eines Pods mit mehreren Schnittstellen:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
2: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default
    link/ether 2a:92:4a:e5:da:35 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.60.45.4/24 brd 10.60.45.255 scope global eth0
      valid_lft forever preferred_lft forever
10: eth1@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default qlen 1000
    link/ether ba:f0:4d:eb:e8:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.16.1.2/32 scope global eth1
      valid_lft forever preferred_lft forever

Überprüfung

  • Achten Sie darauf, dass Cluster nur dann mit --enable-multi-networking erstellt werden, wenn --enable-dataplane-v2 aktiviert ist.
  • Prüfen Sie, ob alle Knotenpools im Cluster während der Cluster- und Knotenpoolerstellung Container-Optimized OS-Images ausführen.
  • Prüfen Sie, ob Knotenpools nur mit --additional-node-network oder --additional-pod-network erstellt werden, wenn Multi-Netzwerk im Cluster aktiviert ist.
  • Achten Sie darauf, dass dasselbe Subnetz nicht zweimal als Argument --additional-node-network für einen Knotenpool angegeben wird.
  • Prüfen Sie, ob derselbe Argumentbereich wie das Argument --additional-pod-network für einen Knotenpool angegeben ist.
  • Befolgen Sie die für Netzwerkobjekte angegebenen Skalierungslimits unter Berücksichtigung der maximalen Anzahl von Knoten, Pods und IP-Adressen.
  • Prüfen Sie, ob nur ein GKENetworkParamSet-Objekt vorhanden ist, das auf ein bestimmtes Subnetz und einen sekundären Bereich verweist.
  • Prüfen Sie, ob jedes Netzwerkobjekt auf ein anderes GKENetworkParamSet-Objekt verweist.
  • Prüfen Sie, ob das Netzwerkobjekt, wenn es mit einem bestimmten Subnetz mit dem Netzwerk Device erstellt wird, nicht auf demselben Knoten mit einem anderen Netzwerk mit einem sekundären Bereich verwendet wird. Dies kann nur zur Laufzeit validiert werden.
  • Achten Sie darauf, dass die verschiedenen sekundären Bereiche, die den Knotenpools zugewiesen sind, keine überlappenden IP-Adressen haben.

Fehlerbehebung bei Parametern für mehrere Netzwerke in GKE

Wenn Sie einen Cluster und einen Knotenpool erstellen, implementiert Google Cloud bestimmte Prüfungen, um sicherzustellen, dass nur gültige Multi-Netzwerk-Parameter zulässig sind. Dadurch wird sichergestellt, dass das Netzwerk für den Cluster ordnungsgemäß eingerichtet ist.

Wenn Sie keine Arbeitslasten mit mehreren Netzwerken erstellen, können Sie den Pod-Status und die Ereignisse für weitere Informationen prüfen:

kubectl describe pods samplepod

Die Ausgabe sieht in etwa so aus:

Name:         samplepod
Namespace:    default
Status:       Running
IP:           192.168.6.130
IPs:
  IP:  192.168.6.130
...
Events:
  Type     Reason                  Age   From               Message
  ----     ------                  ----  ----               -------
  Normal   Scheduled               26m   default-scheduler  Successfully assigned default/samplepod to node-n1-04
  Warning  FailedCreatePodSandBox  26m   kubelet            Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "e16c58a443ab70d671159509e36894b57493300ea21b6c24c14bdc412b0fdbe6": Unable to create endpoint: [PUT /endpoint/{id}][400] putEndpointIdInvalid  failed getting interface and network CR for pod "default/samplepod": failed creating interface CR default/samplepod-c0b60cbe: admission webhook "vnetworkinterface.networking.gke.io" denied the request: NetworkInterface.networking.gke.io "samplepod-c0b60cbe" is invalid: Spec.NetworkName: Internal error: failed to get the referenced network "sample-network": Network.networking.gke.io "sample-network" not found
...

Allgemeine Gründe für einen Fehler bei der Pod-Erstellung:

  • Der Pod konnte nicht geplant werden, da die Ressourcenanforderungen für mehrere Netzwerke nicht erfüllt sind
  • Die angegebenen Netzwerke konnten nicht identifiziert werden
  • Netzwerkschnittstellenobjekt für Pod konnte nicht konfiguriert und erstellt werden

Führen Sie den folgenden Befehl aus, um zu prüfen, ob Google Cloud die NetworkInterface-Objekte auf dem API-Server erstellt hat:

kubectl get networkinterfaces.networking.gke.io -l podName=samplepod

Fehlerbehebung beim Erstellen von Kubernetes-Netzwerken

Nachdem Sie ein Netzwerk erstellt haben, sollten Knoten, die Zugriff auf das konfigurierte Netzwerk haben sollen, mit einer Netzwerkstatusannotation annotiert werden.

Führen Sie den folgenden Befehl aus, um Annotationen zu beobachten:

kubectl describe node NODE_NAME

Ersetzen Sie NODE_NAME durch den Namen des Knotens.

Die Ausgabe sieht in etwa so aus:

networking.gke.io/network-status: [{"name":"default"},{"name":"dp-network"}]

In der Ausgabe werden alle auf dem Knoten verfügbaren Netzwerke aufgelistet. Wenn der erwartete Netzwerkstatus nicht auf dem Knoten angezeigt wird, gehen Sie so vor:

Zugriff auf das Netzwerk durch Knoten prüfen

Wenn das Netzwerk nicht in der Netzwerkstatusannotation des Knotens angezeigt wird:

  1. Prüfen SIe, ob der Knoten Teil eines Pools ist, der für Multi-Networking konfiguriert ist.
  2. Prüfen Sie die Schnittstellen des Knotens auf Schnittstellen zum Netzwerk, das Sie konfigurieren.
  3. Wenn ein Knoten den Netzwerkstatus nicht hat und nur eine Netzwerkschnittstelle hat, müssen Sie trotzdem einen Pool von Knoten mit aktiviertem Multi-Netzwerk erstellen.
  4. Wenn Ihr Knoten die Schnittstelle für das Netzwerk enthält, das Sie konfigurieren, aber in der Annotation für den Netzwerkstatus nicht angezeigt wird, prüfen Sie die Ressourcen Network und GKENetworkParamSet (GNP).

Prüfen Sie die Ressourcen Network und GKENetworkParamSet.

Der Status von Network- und GKENetworkParamSet-Ressourcen (GNP) enthält ein Bedingungsfeld zum Melden von Konfigurationsfehlern. Wir empfehlen, zuerst GNP zu prüfen, da dafür keine andere Ressource erforderlich ist.

Führen Sie den folgenden Befehl aus, um das Bedingungsfeld zu prüfen:

kubectl get gkenetworkparamsets GNP_NAME -o yaml

Ersetzen Sie GNP_NAME durch den Namen der GKENetworkParamSet-Ressource.

Wenn die Bedingung Ready gleich "true" ist, ist die Konfiguration gültig und die Ausgabe sieht in etwa so aus:

apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
...
spec:
  podIPv4Ranges:
    rangeNames:
    -   sec-range-blue
  vpc: dataplane
  vpcSubnet: subnet-dp
status:
  conditions:
  -   lastTransitionTime: "2023-06-26T17:38:04Z"
    message: ""
    reason: GNPReady
    status: "True"
    type: Ready
  networkName: dp-network
  podCIDRs:
    cidrBlocks:
    -   172.16.1.0/24

Wenn die Bedingung Ready auf "false" gesetzt ist, wird in der Ausgabe der Grund angezeigt und sie sieht in etwa so aus:

apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
...
spec:
  podIPv4Ranges:
    rangeNames:
    -   sec-range-blue
  vpc: dataplane
  vpcSubnet: subnet-nonexist
status:
  conditions:
  -   lastTransitionTime: "2023-06-26T17:37:57Z"
    message: 'subnet: subnet-nonexist not found in VPC: dataplane'
    reason: SubnetNotFound
    status: "False"
    type: Ready
  networkName: ""

Wenn eine ähnliche Meldung angezeigt wird, prüfen Sie, ob Ihre GNP richtig konfiguriert wurde. Wenn dies bereits der Fall ist, prüfen Sie, ob die Google Cloud-Netzwerkkonfiguration korrekt ist. Nach der Aktualisierung der Google Cloud-Netzwerkkonfiguration müssen Sie die GNP-Ressource möglicherweise neu erstellen, um eine Neusynchronisierung manuell auszulösen. Damit lassen sich unendliche Abfragen der Google Cloud API vermeiden.

Wenn die GNP bereit ist, prüfen Sie die Ressource Network.

kubectl get networks NETWORK_NAME -o yaml

Ersetzen Sie NETWORK_NAME durch den Namen der Network-Ressource.

Die Ausgabe einer gültigen Konfiguration sieht in etwa so aus:

apiVersion: networking.gke.io/v1
kind: Network
...
spec:
  parametersRef:
    group: networking.gke.io
    kind: GKENetworkParamSet
    name: dp-gnp
  type: L3
status:
  conditions:
  -   lastTransitionTime: "2023-06-07T19:31:42Z"
    message: ""
    reason: GNPParamsReady
    status: "True"
    type: ParamsReady
  -   lastTransitionTime: "2023-06-07T19:31:51Z"
    message: ""
    reason: NetworkReady
    status: "True"
    type: Ready
  • reason: NetworkReady gibt an, dass die Netzwerkressource korrekt konfiguriert ist. reason: NetworkReady impliziert nicht, dass die Netzwerkressource unbedingt auf einem bestimmten Knoten verfügbar ist oder aktiv verwendet wird.
  • Wenn eine Fehlkonfiguration oder ein Fehler auftritt, gibt das Feld reason in der Bedingung den genauen Grund für das Problem an. Passen Sie in diesen Fällen die Konfiguration entsprechend an.
  • GKE füllt das Feld ParamsReady aus, wenn das Feld "parametersRef" auf eine GKENetworkParamSet-Ressource festgelegt ist, die im Cluster vorhanden ist. Wenn Sie einen Parametertyp GKENetworkParamSet angegeben haben und die Bedingung nicht angezeigt wird, prüfen Sie, ob Name, Art und Gruppe mit der GNP-Ressource in Ihrem Cluster übereinstimmen.

Nächste Schritte