In Apigee Ingress-Gateway-Pods wird angezeigt, dass 1 von 2 Containern ausgeführt wird

Symptom

In der Pod-Liste wird für Ihre apigee-ingressgateway-Pods nur 1 von 2 Containern angezeigt.

Wenn Sie beispielsweise den folgenden Befehl ausführen:

kubectl -n apigee get pods -l app=apigee-ingressgateway

Ausgabe:

NAME                                                             READY   STATUS    RESTARTS   AGE
apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         1/2     Running      0      6m48s
apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         1/2     Running      0      123m

Wenn Sie außerdem einen describe-Befehl für einen der oben genannten Pods ausführen, schlägt die Bereitschaftsprüfung mit dem Statuscode 503 fehl.

Im Abschnitt Events der Pod-Beschreibung wird möglicherweise die folgende Meldung angezeigt:

Events:
  Type     Reason     Age                    From     Message
  ----     ------     ----                   ----     -------
  Warning  Unhealthy  76s (x32903 over 18h)  kubelet  Readiness probe failed: HTTP probe failed with statuscode: 503

Mögliche Ursache

Ursache Beschreibung
Apigee-Ingress ist für das Abhören von Port 80 konfiguriert Die Apigee-Ingress-Konfiguration auf Port 80 wird ab Apigee Hybrid 1.9 nicht mehr unterstützt.

Ursache: Apigee Ingress ist so konfiguriert, dass Port 80 überwacht wird.

Dieses Problem wird dadurch verursacht, dass das Apigee Ingress-Gateway für das Abhören von Port 80 konfiguriert ist. Dies wird ab Apigee Hybrid 1.9 nicht mehr unterstützt.

Das kann passieren, wenn Sie ein Upgrade von einer früheren Version von Apigee Hybrid durchgeführt haben, in der Port 80 zulässig war, oder wenn eine andere Fehlkonfiguration dies ermöglicht hat.

Diagnose

  1. Rufen Sie eine Liste Ihrer apigee-ingressgateway-Pods ab.

    Führen Sie dazu diesen Befehl aus:

    kubectl -n apigee get pods -l app=apigee-ingressgateway

    Beispielausgabe:

    NAME                                                              READY   STATUS    RESTARTS   AGE
    apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         1/2     Running   0          6m48s
    apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         1/2     Running   0          123m
    
  2. Beschreiben Sie einen der aufgelisteten Pods, um die Ereignisse zu prüfen:
    kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD

    Dabei ist APIGEE_INGRESSGATEWAY_POD ein apigee-ingressgateway-Pod, der in der Ausgabe des vorherigen Befehls aufgeführt ist.

    Beispielausgabe:

    Events:
      Type     Reason     Age                    From     Message
      ----     ------     ----                   ----     -------
      Warning  Unhealthy  76s (x32903 over 18h)  kubelet  Readiness probe failed: HTTP probe failed with statuscode: 503
    
  3. Rufen Sie die Logs für den Pod APIGEE_INGRESSGATEWAY_POD ab.
    kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD

    Möglicherweise sehen Sie einen Logeintrag, der besagt, dass Port 80 aufgrund eines Fehlers mit verweigerter Berechtigung nicht gebunden werden konnte, gefolgt von einer Meldung, dass Envoy nicht bereit ist.

    2025-09-11T06:16:45.457621Z     error   envoy config external/envoy/source/common/listener_manager/listener_manager_impl.cc:1186        listener '0.0.0.0_80' failed to bind or apply socket options: cannot bind '0.0.0.0:80': Permission denied
    ...
    2025-09-11T06:16:46.365818Z     warn    Envoy proxy is NOT ready: config received from XDS server, but was rejected: cds updates: 1 successful, 0 rejected; lds updates: 0 successful, 1 rejected
    
  4. Sehen Sie sich die aktuelle apigeeroute-Konfiguration an, um die Konfiguration zu finden, bei der Port 80 (HTTP) aktiviert ist.
    • Rufen Sie eine Liste der definierten Apigee-Routen ab.
      kubectl -n apigee get apigeeroute

      Beispielausgabe:

      NAME                                  STATE     AGE
      myorg-hyb-dev-grp-000-33620d0         running   2d1h
      non-sni                               running   17s
      
    • Prüfen Sie in jedem apigeeroute, wo Port 80 definiert ist.

      Führen Sie den folgenden Befehl für jedes apigeeroute aus, das in der Ausgabe des vorherigen Befehls aufgeführt ist:

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      Dabei ist APIGEE_ROUTE_NAME der Name eines einzelnen apigeeroute.

      Beispielbefehl:

            kubectl -n apigee get apigeeroute non-sni -o yaml
            

      Beispielausgabe:

            apiVersion: apigee.cloud.google.com/v1alpha2
            kind: ApigeeRoute
            metadata:
              name: non-sni
              namespace: apigee
              resourceVersion: "240441468"
            spec:
              enableNonSniClient: true
              hostnames:
              - '*'
            ports:
              - number: 443
                protocol: HTTPS
                tls:
                  credentialName: myorg-hyb-dev-grp
                  minProtocolVersion: TLS_AUTO
                  mode: SIMPLE
              - number: 80
                protocol: HTTP
            selector:
              app: apigee-ingressgateway
            status:
              lastAppliedGeneration: 1
              state: running
            
      Der nicht-SNI-apigeeroute zeigt, dass Port 80 als Teil dieser Route aktiviert ist.

Lösung

Um dieses Problem zu beheben, deaktivieren Sie Port 80 in der ursprünglichen YAML-Datei apigeeroute, indem Sie die folgenden Zeilen entfernen.

  - number: 80
    protocol: HTTP
      

Wenn Sie die ursprüngliche YAML-Datei apigeeroute nicht haben, können Sie so vorgehen:

  1. Exportieren Sie die aktuelle Konfiguration mit dem folgenden Befehl:
    kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml

    Dabei ist APIGEE_ROUTE_NAME die apigeeroute, die aktualisiert wird, um die Konfiguration für Port 80 zu entfernen.

    Dabei ist APIGEE_ROUTE_FILENAME der Name der Ausgabedatei mit dem YAML-Inhalt apigeeroute.

  2. Bearbeiten Sie die YAML-Datei apigeeroute, um die Konfiguration für Port 80 zu entfernen.

    Öffnen Sie die Datei APIGEE_ROUTE_FILENAME in einem Texteditor und entfernen Sie die folgenden Zeilen:

            - number: 80
              protocol: HTTP
                
  3. Ersetzen Sie die vorhandene apigeeroute durch die geänderte YAML-Datei:
    kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
    

    Dabei ist APIGEE_ROUTE_FILENAME die Ausgabedatei mit der aktualisierten apigeeroute-Konfiguration.

  4. Die apigee-ingressgateway-Pods sollten jetzt mit 2/2 Containern ausgeführt werden. Wenn nicht, löschen Sie die Pods, damit automatisch neue erstellt werden können.
            NAME                                                              READY   STATUS    RESTARTS   AGE
            apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r         2/2     Running   0          25h
            apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf         2/2     Running   0          26h
            

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Google Cloud Customer Care:
  • Overrides.yaml
  • Ausgabe der folgenden Befehle:
    • kubectl -n apigee get pods -l app=apigee-ingressgateway
    • kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
    • kubectl -n apigee get apigeeroutes
    • Führen Sie für jede der angegebenen Routen Folgendes aus:
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • Alternativ können Sie die Von Apigee Hybrid zu erfassende Daten ausführen und bereitstellen.