Bekannte Probleme mit GKE-Netzwerken


Auf dieser Seite werden bekannte Probleme mit der GKE-Netzwerkfunktion aufgeführt. Diese Seite richtet sich an Administratoren und Architekten, die den Lebenszyklus der zugrunde liegenden technischen Infrastruktur verwalten und auf Benachrichtigungen und Seiten reagieren, wenn Service Level Objectives (SLOs) nicht erfüllt werden oder Anwendungen ausfallen.

Zum Filtern der bekannten Probleme nach einer Produktversion wählen Sie in den folgenden Drop-down-Menüs die gewünschten Filter aus.

Wählen Sie Ihre GKE-Version aus:

Oder suchen Sie nach Ihrem Problem:

Ermittelte Version(en) Korrigierte Version(en) Problem und Problemumgehung
1.28, 1.29, 1.30, 1.31, 1.32, 1.33

Leck von Pod-IP-Adressen auf Knoten mit GKE Dataplane V2

Bei Clustern mit aktivierter GKE Dataplane V2 kann es auf Knoten zu einer Erschöpfung der Pod-IP-Adressen kommen. Dieses Problem wird durch einen Container-Laufzeitfehler verursacht, durch den zugewiesene IP-Adressen verloren gehen können, wenn bei der Erstellung von Pods vorübergehende CNI-Fehler auftreten.

Das Problem tritt auf, wenn der GKE-Clusterknoten auf eine der folgenden GKE-Versionen aktualisiert oder mit einer dieser Versionen erstellt wird:

  • 1.33 oder höher
  • 1.32 oder höher
  • 1.31.2-gke.1115000 oder höher
  • 1.30.8-gke.1051001 oder höher
  • 1.29.10-gke.1059000 oder höher
  • 1.28.15-gke.1024000 oder höher

Wenn dieses Problem auftritt, können neue Pods, die auf dem betroffenen Knoten geplant sind, nicht gestartet werden. Es wird eine Fehlermeldung ähnlich der folgenden zurückgegeben: failed to assign an IP address to container.


Workaround:

Um dieses Problem zu beheben, können Sie das DaemonSet zur Problembehebung auf den Cluster anwenden, um die gehackten IP-Ressourcen zu bereinigen:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cleanup-ipam-dir
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: cleanup-ipam
  template:
    metadata:
      labels:
        name: cleanup-ipam
    spec:
      hostNetwork: true
      securityContext:
        runAsUser: 0
        runAsGroup: 0
        seccompProfile:
          type: RuntimeDefault
      automountServiceAccountToken: false
      containers:
      - name: cleanup-ipam
        image: gcr.io/gke-networking-test-images/ubuntu-test:2022@sha256:6cfbdf42ccaa85ec93146263b6e4c60ebae78951bd732469bca303e7ebddd85e
        command:
        - /bin/bash
        - -c
        - |
          while true; do
          for hash in $(find /hostipam -iregex '/hostipam/[0-9].*' -mmin +10 -exec head -n1 {} \; ); do
          hash="${hash%%[[:space:]]}"
          if [ -z $(ctr -n k8s.io c ls | grep $hash | awk '{print $1}') ]; then
          grep -ilr $hash /hostipam
          fi
          done | xargs -r rm
          echo "Done cleaning up /var/lib/cni/networks/gke-pod-network at $(date)"
          sleep 120s
          done
        volumeMounts:
        - name: host-ipam
          mountPath: /hostipam
        - name: host-ctr
          mountPath: /run/containerd
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - ALL
      volumes:
      - name: host-ipam
        hostPath:
          path: /var/lib/cni/networks/gke-pod-network
      - name: host-ctr
        hostPath:
          path: /run/containerd

1.31, 1.32, 1.33
  • 1.33.1-gke.1107000 und höher

Ausfälle von Ingress- und Service-Load-Balancern in Clustern mit einem Legacy-Netzwerk

Eine Inkompatibilität mit Legacy-Netzwerken führt dazu, dass die Backends eines GKE-verwalteten Load Balancers, der mit Ingress oder Service bereitgestellt wird, getrennt werden. Dadurch hat der Load-Balancer keine aktiven Back-Ends mehr, was wiederum dazu führt, dass alle eingehenden Anfragen an diese Load-Balancer verworfen werden.

Das Problem betrifft GKE-Cluster, die ein Legacy-Netzwerk verwenden und die Version 1.31 oder höher haben.

Führen Sie den folgenden Befehl aus, um GKE-Cluster mit einem Legacy-Netzwerk zu identifizieren:

    gcloud container clusters describe CLUSTER_NAME --location=LOCATION --format="value(subnetwork)"
  

Bei einem Cluster mit einem Legacy-Netzwerk ist die Ausgabe für diesen Befehl leer.

Workaround:

Da Legacy-Netzwerke schon seit einiger Zeit eingestellt wurden, ist die bevorzugte Lösung, Ihr Legacy-Netzwerk zu einem VPC-Netzwerk zu migrieren. Dazu können Sie ein Legacy-Netzwerk umwandeln, das GKE-Cluster enthält. Wenn Sie diese Migration derzeit nicht durchführen können, wenden Sie sich an den Cloud Customer Care.

1.30, 1.31, 1.32
  • 1.30.10-gke.1070000 und höher
  • 1.31.5-gke.1068000 und höher
  • 1.32.1-gke.1002000 und höher

Neu erstellte Knoten werden nicht den internen Layer 4-Load-Balancern hinzugefügt.

Bei Google Cloud -Load-Balancern, die für interne LoadBalancer-Dienste erstellt werden, fehlen möglicherweise neu erstellte Knoten in der Backend-Instanzgruppe.

Das Problem ist am deutlichsten in einem Cluster zu sehen, der auf null Knoten skaliert und dann wieder auf einen oder mehrere Knoten skaliert wurde.

Problemumgehungen:

  • Aktivieren Sie die GKE-Teileinstellung und erstellen Sie den Dienst neu.

    Hinweis: Die GKE-Teilmengeneinstellung kann nicht deaktiviert werden, nachdem sie aktiviert wurde.

  • Erstellen Sie einen weiteren internen Load-Balancing-Dienst. Wenn die Synchronisierung erfolgt, wird die Instanzgruppe auch für den betroffenen Dienst korrigiert. Der neue Dienst kann nach der Synchronisierung entfernt werden.
  • Fügen Sie einem der Knoten das Label node.kubernetes.io/exclude-from-external-load-balancers hinzu und entfernen Sie es dann wieder.
  • Fügen Sie dem Cluster einen Knoten hinzu. Sie können den Knoten entfernen, nachdem der Dienst funktioniert.
1.31,1.32
  • 1.31.7-gke.1158000 und höher
  • 1.32.3-gke.1499000 und höher

Probleme mit der Gateway API aufgrund von „storedVersions“, die aus dem CRD-Status entfernt wurden

Der Kube-Addon-Manager in GKE entfernt fälschlicherweise die v1alpha2 storedVersion aus dem Status von Gateway API-CRDs wie gateway, httpRoute, gatewayClass und referenceGrant. Dieses Problem tritt auch dann auf, wenn im Cluster noch Instanzen dieser CRDs im v1alpha2-Format gespeichert sind. Wenn die GKE-Clusterversion ohne storedVersions aktualisiert wird, schlagen die Gateway API-Aufrufe fehl. Die fehlgeschlagenen Aufrufe können auch Controller unterbrechen, die die Gateway API implementieren.

Ihr Cluster ist möglicherweise gefährdet, wenn alle folgenden Bedingungen erfüllt sind:

  • Die Gateway API ist in Ihrem Cluster aktiviert.
  • Sie haben zu einem beliebigen Zeitpunkt in der Vergangenheit eine v1alpha2-Version einer Gateway API-CRD installiert.
  • Ihr Cluster wurde mit einer betroffenen GKE-Version ausgeführt.

Workaround:

Der empfohlene Workaround besteht darin, Clusterupgrades zu verzögern, bis das Problem behoben ist.

Wenn Sie die Clusterversion aktualisieren müssen, müssen Sie alternativ die Speicherversion für alle betroffenen Gateway API-CRDs auf v1beta1 aktualisieren. Im folgenden Beispiel wird die CRD gatewayClass aktualisiert:

  1. Prüfen Sie, ob die Speicherversion von v1alpha2 vorhanden ist:
    kubectl get crd gatewayclasses.gateway.networking.k8s.io -ojsonpath="{.status.storedVersions}"
  2. Passen Sie die Speicherversion auf v1beta1 an, indem Sie den folgenden Befehl für alle im Cluster vorhandenen GatewayClass-Ressourcen ausführen:
    kubectl annotate gatewayclass gateway-class-name bump-storage-version="yes"
  3. Entfernen Sie die v1alpha2-Speicherversion und legen Sie die Speicherversion auf v1beta1 fest:
    kubectl patch customresourcedefinitions gatewayclasses.gateway.networking.k8s.io --subresource='status' --type='merge' -p '{"status":{"storedVersions":["v1beta1"]}}'
  4. Führen Sie das Upgrade wie gewohnt aus.
1,32
  • 1.32.3-gke.1170000 und höher

Neue Pods können nicht initialisiert werden und bleiben im Status „ContainerCreating“ hängen

Neue Pods können nicht erstellt werden und verbleiben im Status ContainerCreating. Wenn dieses Problem auftritt, wird im Dienstcontainer Folgendes protokolliert:

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "[sandbox-ID]": plugin type="cilium-cni" failed (add): unable to create endpoint: Cilium API client timeout exceeded

Das Problem betrifft GKE-Cluster in Versionen zwischen 1.32 und vor 1.32.3-gke.1170000, die in GKE-Versionen 1.31 oder 1.32 erstellt wurden. Die Ursache ist, dass eine In-Memory-Datenstruktur, in der eine Sammlung zugewiesener Cilium-Identitäten verwaltet wurde, nicht richtig mit dem Status des Kubernetes API-Servers synchronisiert wurde.

Mit dem folgenden Befehl können Sie die initialClusterVersion-Ressource abfragen, um die GKE-Version zu ermitteln, die zum Erstellen des Clusters verwendet wurde:

  gcloud container clusters describe [cluster_name] --location [location] --format='value(initialClusterVersion)'
  

Wenn im GKE-Cluster Logging aktiviert ist, protokolliert der cilium-agent-Container die unable to resolve identity: timed out waiting for cilium-operator to allocate CiliumIdentity for key-Nachricht im Log-Explorer mit der folgenden Abfrage:

   resource.type="k8s_container"
   resource.labels.container_name="cilium-agent"
  

Workaround:

Eine vorübergehende Abhilfe besteht darin, die Steuerungsebene neu zu starten. Dies kann erreicht werden, indem Sie die Steuerungsebene auf dieselbe Version aktualisieren, die bereits ausgeführt wird:

  gcloud container clusters upgrade [cluster_name] --location [location] --cluster-version=[version] --master
  
1.27,1.28,1.29,1.30,1.31

NEG-Controller verwaltet Endpunkte nicht mehr, wenn Port aus Dienst entfernt wird

Wenn der NEG-Controller so konfiguriert ist, dass er eine eigenständige NEG für einen Dienst erstellt, und einer der konfigurierten Ports später aus dem Dienst entfernt wird, verwaltet der NEG-Controller schließlich keine Endpunkte mehr für die NEG. Neben Diensten, für die der Nutzer eine eigenständige NEG-Annotation erstellt, betrifft dies auch Dienste, auf die von GKE Gateway, MCI und GKE Multi-Cluster-Gateway verwiesen wird.

Workaround:

Wenn Sie einen Port aus einem Dienst mit einer eigenständigen NEG-Annotation entfernen, muss die Annotation auch aktualisiert werden, um den betreffenden Port zu entfernen.

1,28

Gateway-TLS-Konfigurationsfehler

Wir haben ein Problem bei der Konfiguration von TLS für Gateways in Clustern mit GKE-Version 1.28.4-gke.1083000 festgestellt. Dies betrifft TLS-Konfigurationen mit einem SSLCertificate oder einer CertificateMap. Wenn Sie einen Cluster mit vorhandenen Gateways aktualisieren, schlagen Aktualisierungen des Gateways fehl. Bei neuen Gateways werden die Load-Balancer nicht bereitgestellt. Dieses Problem wird in einer zukünftigen GKE 1.28-Patchversion behoben.

1.27,1.28,1.29
  • 1.26.13-gke.1052000 und höher
  • 1.27.10-gke.1055000 und höher
  • 1.28.6-gke.1095000 und höher
  • 1.29.1-gke.1016000 und höher

Zeitweise fehlgeschlagene Verbindungsaufbauten

Bei Clustern mit Steuerungsebenenversionen ab 1.26.6-gke.1900 kann es zu zeitweiligen Fehlern beim Herstellen von Verbindungen kommen.

Die Wahrscheinlichkeit von Fehlern ist gering und sie betreffen nicht alle Cluster. Die Ausfälle sollten nach einigen Tagen nach dem Auftreten der Symptome vollständig aufhören.

1.27,1.28,1.29
  • 1.27.11-gke.1118000 oder höher
  • 1.28.7-gke.1100000 oder höher
  • 1.29.2-gke.1217000 oder höher

Probleme mit der DNS-Auflösung bei Container-Optimized OS

Bei Arbeitslasten, die auf GKE-Clustern mit Container-Optimized OS-basierten Knoten ausgeführt werden, kann es zu Problemen bei der DNS-Auflösung kommen.

1,28 1.28.3-gke.1090000 oder höher

Netzwerkrichtlinie bricht eine Verbindung aufgrund einer falschen Verbindungsverfolgung ab

Wenn in Clustern mit aktivierter GKE Dataplane V2 ein Client-Pod über einen Dienst oder die virtuelle IP-Adresse eines internen Passthrough-Network Load Balancer eine Verbindung zu sich selbst herstellt, wird das Antwortpaket aufgrund eines falschen Conntrack-Lookups in der Datenebene nicht als Teil einer vorhandenen Verbindung identifiziert. Das bedeutet, dass eine Netzwerkrichtlinie, die eingehenden Traffic für den Pod einschränkt, für das Paket falsch erzwungen wird.

Die Auswirkungen dieses Problems hängen von der Anzahl der konfigurierten Pods für den Dienst ab. Wenn der Dienst beispielsweise einen Backend-Pod hat, schlägt die Verbindung immer fehl. Wenn der Dienst zwei Backend-Pods hat, schlägt die Verbindung in 50% der Fälle fehl.

Workaround:

Sie können dieses Problem mindern, indem Sie port und containerPort im Service-Manifest auf denselben Wert festlegen.

1.27,1.28
  • 1.28.3-gke.1090000 oder höher
  • 1.27.11-gke.1097000 oder höher

Paketdrops für Hairpin-Anschlussflows

Wenn in Clustern mit aktiviertem GKE Dataplane V2 ein Pod mithilfe eines Service eine TCP-Verbindung zu sich selbst erstellt, sodass der Pod sowohl Quelle als auch Ziel der Verbindung ist, überwacht die GKE Dataplane V2 eBPF-Verbindungsüberwachung den Verbindungsstatus nicht korrekt, was zu verlorenen conntrack-Einträgen führt.

Wenn ein Verbindungstupel (Protokoll, Quell-/Ziel-IP und Quell-/Zielport) offengelegt wurde, kann es bei neuen Verbindungen mit demselben Verbindungstupel dazu kommen, dass Rückgabepakete verworfen werden.

Workaround:

Versuchen Sie einen der folgenden Schritte, um das Problem zu umgehen:

  • Aktivieren Sie die TCP-Wiederverwendung (Keep-Alives) für eine Anwendung, die in einem Pod ausgeführt wird und möglicherweise über einen Service mit sich selbst kommuniziert. Dadurch wird verhindert, dass das TCP FIN-Flag ausgegeben wird und dass der Conntrack-Eintrag ausgegeben wird.
  • Wenn Sie kurzlebige Verbindungen verwenden, machen Sie den Pod über einen Proxy-Load-Balancer wie Gateway verfügbar, um den Dienst verfügbar zu machen. Dies führt dazu, dass das Ziel der Verbindungsanfrage auf die IP-Adresse des Load-Balancers festgelegt wird. Dadurch wird verhindert, dass GKE Dataplane V2 SNAT zum Loopback der IP-Adresse ausführt.
Älter als 1.31.0-gke.1506000 1.31.0-gke.1506000 und höher

Gerätetypisiertes Netzwerk in GKE-Multi-Netzwerk schlägt bei langen Netzwerknamen fehl

Die Clustererstellung schlägt mit dem folgenden Fehler fehl:

error starting very-long-string-that-exceeds-character-limit-gpu-nic0 device plugin endpoint: listen unix /var/lib/kubelet/plugins_registry/networking.gke.io.networks_very-long-string-that-exceeds-character-limit-gpu-nic0.sock: bind: invalid argument

Workaround:

Beschränken Sie die Länge von Namen von Netzwerkobjekten mit Gerätetyp auf maximal 41 Zeichen. Der vollständige Pfad jedes UNIX-Domain-Sockets wird zusammengesetzt, einschließlich des entsprechenden Netzwerknamens. Unter Linux gilt eine Beschränkung für die Länge von Socket-Pfaden (unter 107 Byte). Nach Berücksichtigung des Verzeichnisses, des Dateinamenpräfixes und der Erweiterung .sock ist der Netzwerkname auf maximal 41 Zeichen begrenzt.

1.27, 1.28, 1.29, 1.30
  • 1.30.4-gke.1282000 oder höher
  • 1.29.8-gke.1157000 oder höher
  • 1.28.13-gke.1078000 oder höher
  • 1.27.16-gke.1342000 oder höher

Verbindungsprobleme für hostPort-Pods nach Upgrade der Steuerungsebene

Bei Clustern mit aktivierter Netzwerkrichtlinie können Verbindungsprobleme mit hostPort-Pods auftreten. Außerdem kann es bei neu erstellten Pods zusätzlich 30 bis 60 Sekunden dauern, bis sie bereit sind.

Das Problem tritt auf, wenn die GKE-Steuerungsebene eines Clusters auf eine der folgenden GKE-Versionen aktualisiert wird:

  • 1.30 bis 1.30.4-gke.1281999
  • 1.29.1-gke.1545000 bis 1.29.8-gke.1156999
  • 1.28.7-gke.1042000 bis 1.28.13-gke.1077999
  • 1.27.12-gke.1107000 bis 1.27.16-gke.1341999

Workaround:

Aktualisieren oder erstellen Sie Knoten unmittelbar nach dem Upgrade der GKE-Steuerungsebene neu.

1.31, 1.32
  • 1.32.1-gke.1729000 oder höher
  • 1.31.6-gke.1020000 oder höher

Fehlerhafter UDP-Traffic zwischen Pods, die auf demselben Knoten ausgeführt werden

Bei Clustern, für die die knoteninterne Sichtbarkeit aktiviert ist, kann es zu Problemen mit dem UDP-Traffic zwischen Pods kommen, die auf demselben Knoten ausgeführt werden.

Das Problem tritt auf, wenn der GKE-Clusterknoten auf eine der folgenden GKE-Versionen aktualisiert oder mit einer dieser Versionen erstellt wird:

  • 1.32.1-gke.1729000 oder höher
  • 1.31.6-gke.1020000 oder höher

Der betroffene Pfad ist Pod-zu-Pod-UDP-Traffic auf demselben Knoten über Hostport oder Dienst.

Lösung

Aktualisieren Sie den Cluster auf eine der folgenden korrigierten Versionen:

  • 1.32.3-gke.1927000 oder höher
  • 1.31.7-gke.1390000 oder höher
1.28, 1.29, 1.30, 1.31

Calico-Pods sind in Clustern mit weniger als 3 Knoten und unzureichender vCPU nicht fehlerfrei

Die Pods „calico-typha“ und „calico-node“ können nicht in Clustern geplant werden, die alle folgenden Bedingungen erfüllen: weniger als 3 Knoten insgesamt, jeder Knoten mit maximal 1 zuweisbaren vCPU und Netzwerkrichtlinie aktiviert aktiviert. Das liegt an unzureichenden CPU-Ressourcen.

Problemumgehungen:

  • Skalieren Sie auf mindestens drei Knotenpools mit einem Knoten mit einer zuweisbaren vCPU.
  • Ändern Sie die Größe eines einzelnen Knotenpools auf mindestens 3 Knoten mit 1 zuweisbaren vCPU.
  • Verwenden Sie einen Maschinentyp mit mindestens zwei zuweisbaren vCPUs in einem Knotenpool mit einem einzelnen Knoten.

MCG-Ausfälle (Multi-Cluster Gateway) in zonalen Clustern während Upgrades der Steuerungsebene

Bei Bereitstellungen mit Multi-Cluster Gateway (MCG) in zonalen GKE-Clustern kann es während Ereignissen, die einen Neustart der Steuerungsebene verursachen, z. B. bei einem Clusterupgrade, zu Ausfällen mit `503`-Fehlern kommen. Das liegt daran, dass MCG auf einem Legacy-Mechanismus für die Ermittlung von Netzwerk-Endpunktgruppen (NEGs) basiert, der fälschlicherweise null Back-Ends meldet, wenn Knoten in einem zonalen Cluster während des Neustarts der Steuerungsebene vorübergehend nicht verfügbar sind. Dadurch werden alle Back-Ends vom Load-Balancer entfernt, was zu Trafficverlusten führt.

Problemumgehungen:

  • Die empfohlene Lösung ist die Migration von einem zonalen GKE-Cluster zu einem regionalen GKE-Cluster. Regionale Cluster haben eine hochverfügbare Steuerungsebene, wodurch der Single Point of Failure, der dieses Problem bei Upgrades oder Neustarts auslöst, vermieden wird.