Bekannte Probleme mit GKE-Netzwerken

Auf dieser Seite sind bekannte Probleme mit dem GKE-Netzwerk 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:

Identifizierte Version(en) Korrigierte Version(en) Problem und Problemumgehung
1,36 Fehlerbehebung läuft

Bei GKE-Clustern mit Windows Server-Knotenpools, auf denen Version 1.36 ausgeführt wird, kann Folgendes auftreten:

  • Fehler bei der ausgehenden Netzwerkverbindung für Arbeitslasten.
  • Kritische System-Pods (z. B. pdcsi-node-windows und gke-metrics-agent-windows) werden kontinuierlich im Status CrashLoopBackOff neu gestartet.

Dieses Problem tritt auf, wenn Cluster interne Layer-4-Load-Balancer ohne GKE-Teileinstellung oder externe Passthrough-Network Load Balancer mit älteren Zielpools oder Instanzgruppen verwenden. In GKE 1.36 aktiviert der Compute Engine-Gast-Agent standardmäßig CorePlugin auf Windows Server und bindet virtuelle IP-Adressen (VIP) des Load Balancers dynamisch direkt an den Hostnetzwerkadapter (vEthernet (Ethernet)) als sekundäre /32-Adressen. Ausgehender Traffic zur VIP wird zurück zum Host geleitet und verworfen. Ausgehende Verbindungen zur GKE-Steuerungsebene (Kubernetes API-Server) oder zum Google Cloud Metadatenserver (169.254.169.254) wählen zeitweise die sekundäre VIP als Quell-IP-Adresse aus, was zu Verbindungszeitüberschreitungen führt.

Workaround:

Versuchen Sie Folgendes, um dieses Problem zu beheben:

  • L4-Teilmengeneinstellung aktivieren (für interne Load Balancer empfohlen): Fügen Sie der Spezifikation des internen LoadBalancer-Dienstes die Annotation gke.googleapis.com/subsetting: "true" hinzu und erstellen Sie die Windows-Knoten neu oder führen Sie einen rollierenden Neustart durch, um vorhandene sekundäre IP-Adressen zu löschen:
    apiVersion: v1
    kind: Service
    metadata:
      name: SERVICE_NAME
      annotations:
        cloud.google.com/load-balancer-type: "Internal"
        gke.googleapis.com/subsetting: "true"
    spec:
      type: LoadBalancer
            
  • Backend-Dienst-basierte externe Load Balancer verwenden: Migrieren Sie für externes Load Balancing ältere Zielpool-basierte Dienste zu Backend-Dienst-basierten externen Load Balancern.
  • IP-Adressweiterleitung des Gast-Agents mithilfe eines Knotenstartskripts deaktivieren: Verwenden Sie ein benutzerdefiniertes Knotenstartskript, das das Schlüssel/Wert-Paar ip_forwarding = false im Abschnitt [NetworkInterfaces] der Datei C:\Program Files\Google\Compute Engine\instance_configs.cfg hinzufügt und dann den Dienst GCEGuestAgent neu startet:
    $configFile = "C:\Program Files\Google\Compute Engine\instance_configs.cfg"
    if (Test-Path $configFile) {
        Add-Content -Path $configFile -Value "`r`n[NetworkInterfaces]`r`nip_forwarding = false"
        Restart-Service -Name GCEGuestAgent -Force
    }
            
  • Upgrades von Windows-Knotenpools verschieben: Behalten Sie Windows-Knotenpools in GKE 1.34 oder 1.35 bei, bis das korrigierte Windows-Knoten-Image verfügbar ist.
InferencePool-Helm-Diagramm v1.1.0

In Version v1.1.0 des Helm-Diagramms InferencePool wird das Flag --set inferencePool.targetPortNumber möglicherweise ignoriert und die Zielportnummer ist standardmäßig 8000. Diese Standardportnummer verursacht Routingprobleme, wenn Ihr Modellserver einen anderen Port überwacht, z. B. 30000 für SGLang.


Workaround:

Prüfen Sie den Port nach der Installation:

kubectl get inferencepool POOL_NAME -o jsonpath='{.spec.targetPorts}' \
    --context=CLUSTER_CONTEXT
    

Wenn der Port falsch ist, patchen Sie die benutzerdefinierte Ressource InferencePool, bevor Sie sie exportieren:

kubectl patch inferencepool POOL_NAME --type=merge \
    -p '{"spec":{"targetPorts":[{"number":TARGET_PORT}]}}' \
    --context=CLUSTER_CONTEXT
    
1.33, 1.34, 1.35
  • 1.33.11-gke.1137000 oder höher
  • 1.34.6-gke.1154000 oder höher
  • 1.35.0-gke.3047000 oder höher

Bei Clustern mit aktiviertem GKE Dataplane V2 kann es zu zeitweiligen Verbindungsausfällen oder Problemen mit der DNS-Auflösung für ausgeführte Pods kommen. Dieses Problem wird durch eine Race-Bedingung während des Startvorgangs von cilium-agent (anetd) verursacht.

Wenn der cilium-agent vorübergehend nicht verfügbar ist, kann das cilium-cni-Plug-in Anfragen zum Löschen von Endpunkten für vorhandene Pods in die Warteschlange stellen. Wenn der Agent diese veralteten Löschereignisse verarbeitet, nachdem er den Endpunkt des Pods erfolgreich initialisiert oder neu erstellt hat, löscht der Agent fälschlicherweise die aktive CiliumEndpoint. Folglich verliert der betroffene Pod seine Netzwerkidentität und Routingkonfiguration, was dazu führt, dass sein Traffic verworfen wird. Dieses Problem äußert sich häufig in DNS-Fehlern, da der eBPF-ipcache das Ziel fälschlicherweise als nicht verwaltet identifiziert. Betroffene Pods können in den Status CrashLoopBackOff wechseln.


Workaround:

Löschen Sie den betroffenen Pod manuell oder starten Sie den anetd-Pod auf dem Knoten neu, auf dem das Problem auftritt, um das Problem zu beheben. Dadurch wird die Neuerstellung des fehlenden CiliumEndpoint erzwungen und die Verbindung wiederhergestellt.

Lösung:

Die Korrektur ist in der advanceddatapath-Komponentenversion 33.7.36 oder höher enthalten. Aktualisieren Sie Ihren Cluster auf eine der in der Spalte Korrigierte Version(en) aufgeführten Versionen, um dieses Problem zu beheben.

1.29, 1.30, 1.31, 1.32, 1.33 1,34

Der cilium-agent-Container im anetd-Pod stürzt nach dem Löschen einer FQDN-Netzwerkrichtlinie ab

Bei Clustern mit aktiviertem GKE Dataplane V2 kann es zu einem vorübergehenden Absturz von cilium-agent-Containern kommen, was zu einer längeren Abgleichszeit für Ereignisse führt, die in der Datenebene programmiert werden müssen. Dieses Problem wird durch eine Nullzeiger-Dereferenzierung beim Löschen der FQDN-Netzwerkrichtlinie verursacht.

Das Problem wird durch das Löschen einer FQDN-Netzwerkrichtlinie ausgelöst. Wenn das Problem auftritt, gibt der Cilium-Agent-Container in den anetd-Pods eine Fehlermeldung wie die folgende zurück: panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x33e237d]


Workaround:

Um dieses Problem zu beheben, können Sie eine FQDN-Richtlinie patchen, anstatt sie zu löschen, damit sie keine Auswirkungen hat. Achten Sie dazu darauf, dass keine Pods der Richtlinie unterliegen:

      kubectl patch fqdnnetpol -n namespace policy-name --patch '
      spec:
        podSelector:
          matchLabels:
            miss: me
      '
    

Lösung

Clusterversion auf Version 1.34 aktualisieren

1.28, 1.29, 1.30, 1.31, 1.32, 1.33

Pod-IP-Adressenleck auf Knoten mit GKE Dataplane V2

Bei Clustern mit aktiviertem GKE Dataplane V2 kann es zu einer Erschöpfung der Pod-IP-Adressen auf Knoten kommen. Dieses Problem wird durch einen Fehler in der Containerlaufzeit verursacht, der dazu führen kann, dass zugewiesene IP-Adressen offengelegt werden, wenn Pods während der Erstellung vorübergehende CNI-Fehler aufweisen.

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

  • 1.33 und höher
  • 1.32 und 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 und geben eine Fehlermeldung wie die folgende zurück: failed to assign an IP address to container.


Workaround:

Sie können dieses Problem beheben, indem Sie das DaemonSet zur Aussetzung von Maßnahmen 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
  • 1.32.8-gke.1108000 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 von GKE verwalteten Load Balancers, der mit Ingress oder Service bereitgestellt wird, getrennt werden. Dies führt dazu, dass der Load Balancer keine aktiven Backends hat, 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 wird für diesen Befehl eine leere Ausgabe zurückgegeben.

Workaround:

Da Legacy-Netzwerke schon seit einiger Zeit eingestellt sind, ist die bevorzugte Lösung, Ihr Legacy-Netzwerk zu einem VPC-Netzwerk zu migrieren. Dazu können Sie ein Legacy-Netzwerk, das GKE-Cluster enthält, umwandeln. Wenn Sie diese Migration derzeit nicht durchführen können, wenden Sie sich an 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 den internen Layer-4-Load-Balancern nicht hinzugefügt.

Google Cloud Load Balancer, die für interne LoadBalancer-Dienste erstellt werden, können neu erstellte Knoten in der Backend-Instanzgruppe verpassen.

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

Behelfslösungen:

  • 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 LoadBalancer-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 das Label node.kubernetes.io/exclude-from-external-load-balancers zu einem der Knoten 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

Gateway API-Probleme 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 der Cluster noch Instanzen dieser CRDs im v1alpha2-Format gespeichert hat. Wenn die GKE-Clusterversion ohne storedVersions aktualisiert wird, schlagen die Gateway API-Aufrufe fehl. Die fehlgeschlagenen Aufrufe können auch Controller beeinträchtigen, 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:

Als Problemumgehung wird empfohlen, Clusterupgrades zu verschieben, 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 v1alpha2 vorhanden ist:
    kubectl get crd gatewayclasses.gateway.networking.k8s.io -ojsonpath="{.status.storedVersions}"
  2. Passen Sie die Speicherversion auf v1beta1 an. Führen Sie dazu den folgenden Befehl für alle GatewayClass-Ressourcen im Cluster aus:
    kubectl annotate gatewayclass gateway-class-name bump-storage-version="yes"
  3. Entfernen Sie die Speicherversion v1alpha2 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 bleiben im Status ContainerCreating hängen. 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 mit Versionen zwischen 1.32 und vor 1.32.3-gke.1170000, die mit den GKE-Versionen 1.31 oder 1.32 erstellt wurden. Die Ursache ist, dass eine speicherinterne Datenstruktur, die eine Sammlung zugewiesener Cilium-Identitäten verwaltet, nicht korrekt mit dem Status des Kubernetes API-Servers synchronisiert wurde.

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

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

Wenn für den GKE-Cluster Logging aktiviert ist, protokolliert der Container cilium-agent die Nachricht unable to resolve identity: timed out waiting for cilium-operator to allocate CiliumIdentity for key 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. Dazu können Sie die Steuerungsebene auf die 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 keine Endpunkte mehr, wenn der Port aus dem 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 irgendwann keine Endpunkte mehr für die NEG. Zusätzlich zu Diensten, bei denen der Nutzer eine eigenständige NEG-Annotation erstellt, wirkt sich dies auch auf Dienste aus, die von GKE Gateway, MCI und GKE Multi-Cluster-Gateway referenziert werden.

Workaround:

Wenn Sie einen Port aus einem Dienst mit einer Annotation für eine eigenständige NEG entfernen, muss die Annotation ebenfalls aktualisiert werden, um den betreffenden Port zu entfernen.

1,28

Gateway-TLS-Konfigurationsfehler

Wir haben ein Problem mit der Konfiguration von TLS für Gateways in Clustern mit der GKE-Version 1.28.4-gke.1083000 festgestellt. Dies betrifft TLS-Konfigurationen, die entweder ein SSLCertificate oder eine CertificateMap verwenden. Wenn Sie ein Upgrade für einen Cluster mit vorhandenen Gateways ausführen, schlagen Aktualisierungen am Gateway fehl. Für neue 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 Fehler beim Verbindungsaufbau

Bei Clustern mit Steuerungsebenenversionen ab 1.26.6-gke.1900 können gelegentlich Fehler beim Verbindungsaufbau auftreten.

Die Wahrscheinlichkeit von Fehlern ist gering und es sind nicht alle Cluster betroffen. Die Fehler sollten nach einigen Tagen nach 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, können Probleme mit der DNS-Auflösung auftreten.

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

Netzwerkrichtlinie bricht eine Verbindung aufgrund einer falschen Verbindungsverfolgung ab

Wenn ein Client-Pod in Clustern mit aktivierter GKE Dataplane V2 über einen Dienst oder die virtuelle IP-Adresse eines internen Passthrough-Network Load Balancers 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 Service beispielsweise einen Backend-Pod hat, schlägt die Verbindung immer fehl. Wenn der Service 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 ein Pod in Clustern mit aktiviertem GKE Dataplane V2 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) geleakt wurde, können neue Verbindungen, die dasselbe Verbindungstupel verwenden, dazu führen, 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, stellen Sie den Pod über einen Proxy-Load-Balancer wie Gateway bereit, 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ätetypnetzwerk 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 gerätetypisierten Netzwerkobjektnamen auf maximal 41 Zeichen. Der vollständige Pfad jedes UNIX-Domain-Sockets wird zusammengesetzt, einschließlich des entsprechenden Netzwerknamens. Linux hat eine Einschränkung für die Länge von Socket-Pfaden (unter 107 Byte). Nach Berücksichtigung des Verzeichnisses, des Dateinamenspräfixes und der Erweiterung .sock ist der Netzwerkname auf maximal 41 Zeichen beschränkt.

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 dem Upgrade der Steuerungsebene

Bei Clustern mit aktivierter Netzwerkrichtlinie können Verbindungsprobleme mit hostPort-Pods auftreten. Außerdem kann es weitere 30 bis 60 Sekunden dauern, bis neu erstellte Pods bereit sind.

Das Problem wird ausgelöst, 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:

Führen Sie unmittelbar nach dem Upgrade der GKE-Steuerungsebene ein Upgrade der Knoten durch oder erstellen Sie sie 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 mit aktivierter knoteninterner Sichtbarkeit kann es zu fehlerhaftem UDP-Traffic zwischen Pods kommen, die auf demselben Knoten ausgeführt werden.

Das Problem wird ausgelöst, 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 der 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 auf Clustern mit weniger als 3 Knoten und unzureichender vCPU nicht fehlerfrei

Calico-typha- und Calico-node-Pods können nicht auf Clustern geplant werden, die alle folgenden Bedingungen erfüllen: insgesamt weniger als 3 Knoten, jeder Knoten hat maximal 1 zuweisbare vCPU und die Netzwerkrichtlinie ist aktiviert. Dies liegt an unzureichenden CPU-Ressourcen.

Behelfslösungen:

  • Skalieren Sie auf mindestens 3 Knotenpools mit 1 Knoten, der 1 zuweisbare vCPU verwendet.
  • Ändern Sie die Größe eines einzelnen Knotenpools auf mindestens 3 Knoten mit 1 zuweisbaren vCPU.
  • Verwenden Sie einen Maschinentyp mit mindestens 2 zuweisbaren vCPUs in einem Knotenpool mit einem einzelnen Knoten.

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

Bei Bereitstellungen mit Multi-Cluster-Gateway (MCG) in zonalen GKE-Clustern kann es bei Ereignissen, die einen Neustart der Steuerungsebene verursachen, z. B. bei einem Clusterupgrade, zu Ausfällen mit „503“-Fehlern kommen. Das liegt daran, dass MCG einen Legacy-Mechanismus für die Erkennung von Netzwerk-Endpunktgruppen (NEGs) verwendet, 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.

Behelfslösungen:

  • 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 eliminiert wird, der dieses Problem bei Upgrades oder Neustarts auslöst.

Unter bestimmten Bedingungen können die Bereitschaftsgates einen „falsch positiven“ Bereitschaftsstatus zurückgeben, bevor die Ingress-Systemdiagnose einen fehlerfreien Status meldet. Dadurch werden Fehlerereignisse wie die folgenden für das Ingress-Objekt generiert:

NEG is not attached to any BackendService with health checking. Marking condition "cloud.google.com/load-balancer-neg-ready" to True.

Dieses Problem führt dazu, dass der Load Balancer einen 503-Fehler (failed_to_pick_backend) für den Traffic meldet, während GKE das Rolling Update für die Deployment-Arbeitslast ausführt.

Eine relativ kleine Anzahl von Pods (z. B. 2) im Vergleich zur Anzahl der NEGs erhöht das Risiko dieser Race-Bedingung. NEGs werden für jede Region erstellt, wobei eine NEG pro Zone erstellt wird. Dies führt in der Regel zu drei NEGs. Wenn es eine relativ große Anzahl von Pods gibt, sodass jede NEG vor dem Start des Rolling Updates immer mehrere Pods hat, ist es sehr unwahrscheinlich, dass diese Race-Bedingung ausgelöst wird.

Workaround:

Die beste Möglichkeit, diese Race-Bedingung zu verhindern, besteht darin, mehr Back-Ends in der Netzwerk-Endpunktgruppe zu haben. Achten Sie darauf, dass die Strategie für das rollierende Update so konfiguriert ist, dass immer mindestens ein Pod ausgeführt wird. Wenn beispielsweise nur zwei Pods normal ausgeführt werden, könnte eine Beispielkonfiguration so aussehen:

strategy:
   type: RollingUpdate
   rollingUpdate:
     maxUnavailable: 0
     maxSurge: 1
    

Das vorherige Beispiel ist ein Vorschlag. Sie müssen die Strategie anhand mehrerer Faktoren aktualisieren, z. B. der Anzahl der Replikate.

Die GKE führt alle zwei Minuten eine automatische Speicherbereinigung für containernative Load Balancer durch. Wenn ein Cluster gelöscht wird, bevor die Load Balancer vollständig entfernt wurden, müssen Sie die NEGs des Load Balancers manuell löschen.

Workaround:

Führen Sie folgenden Befehl aus, um die NEGs in Ihrem Projekt aufzulisten:

gcloud compute network-endpoint-groups list

Suchen Sie in der Befehlsausgabe nach den relevanten NEGs.

Führen Sie zum Löschen einer NEG folgenden Befehl aus und ersetzen Sie dabei <var>NEG_NAME</var> durch den Namen der NEG:

gcloud compute network-endpoint-groups delete <var>NEG_NAME</var>

Dieses Problem tritt nicht bei Clustern auf, die Arbeitslast-Einführungen über Pod-Readiness-Feedback verwalten. Wenn Sie eine Arbeitslast in Ihrem Cluster bereitstellen oder eine vorhandene Arbeitslast aktualisieren, kann es länger dauern, bis der container-native Load Balancer neue Endpunkte weitergibt, als es dauert, bis das Rollout der Arbeitslast abgeschlossen ist.


Workaround:

Für Ihre Arbeitslasten sollten Sie die Werte von minReadySeconds und terminationGracePeriodSeconds auf mindestens 60 Sekunden festlegen, damit der Dienst nicht aufgrund von Arbeitslast-Einführungen unterbrochen wird.

  • terminationGracePeriodSeconds ermöglicht, dass der Pod richtig heruntergefahren wird. Dafür wird auf das Beenden von Verbindungen gewartet, nachdem ein Pod zum Löschen vorgemerkt wurde.
  • Mit minReadySeconds wird nach dem Erstellen eines Pods eine Latenzzeit hinzugefügt.

Man könnte erwarten, dass die Konfigurationseinstellung initialDelaySeconds in der readinessProbe des Pods vom containernativen Load Balancer berücksichtigt wird. readinessProbe wird jedoch von kubelet implementiert und die Konfigurationseinstellung initialDelaySeconds steuert die kubelet-Systemdiagnose, nicht den containernativen Load Balancer. Das containernative Load Balancing hat eine eigene Systemdiagnose für das Load Balancing.