I pod del gateway in entrata Apigee mostrano 1 dei 2 container in esecuzione

Sintomo

I tuoi pod apigee-ingressgateway mostrano solo 1 dei 2 container in esecuzione quando ricevi l'elenco dei pod.

Ad esempio, quando esegui questo comando:

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

Output:

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

Inoltre, l'esecuzione di un comando describe su uno dei pod precedenti mostrerà il probe di preparazione non riuscito con un codice di stato 503.

Ad esempio, nella sezione Events della descrizione del podcast, potresti visualizzare il seguente messaggio:

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

Possibile causa

Causa Descrizione
L'ingresso Apigee è configurato per l'ascolto sulla porta 80 A partire da Apigee Hybrid 1.9, la configurazione dell'ingresso Apigee sulla porta 80 non è più supportata.

Causa: l'ingresso Apigee è configurato per l'ascolto sulla porta 80

Questo problema è causato dal gateway in entrata Apigee configurato per l'ascolto sulla porta 80, che non è più supportata a partire da Apigee Hybrid 1.9.

Ciò può accadere se hai eseguito l'upgrade da una versione precedente di Apigee Hybrid che consentiva la porta 80 o se è presente un'altra configurazione errata che la abilitava.

Diagnosi

  1. Ottieni un elenco dei tuoi pod apigee-ingressgateway.

    Esegui questo comando:

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

    Esempio di output

    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. Descrivi uno dei pod elencati per controllare gli eventi:
    kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD

    Dove APIGEE_INGRESSGATEWAY_POD è un pod apigee-ingressgateway elencato nell'output del comando precedente.

    Esempio di output:

    Events:
      Type     Reason     Age                    From     Message
      ----     ------     ----                   ----     -------
      Warning  Unhealthy  76s (x32903 over 18h)  kubelet  Readiness probe failed: HTTP probe failed with statuscode: 503
    
  3. Recupera i log per il pod APIGEE_INGRESSGATEWAY_POD.
    kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD

    Potresti visualizzare una voce di log che indica che l'associazione della porta 80 non è riuscita a causa di un errore di autorizzazione negata, seguita da un messaggio che indica che Envoy non è pronto.

    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. Esamina la configurazione apigeeroute attuale per trovare quella con la porta 80 (HTTP) abilitata.
    • Visualizza un elenco delle route Apigee definite.
      kubectl -n apigee get apigeeroute

      Esempio di output:

      NAME                                  STATE     AGE
      myorg-hyb-dev-grp-000-33620d0         running   2d1h
      non-sni                               running   17s
      
    • Controlla ogni apigeeroute per vedere dove è definita la porta 80.

      Esegui questo comando per ogni apigeeroute elencato nell'output del comando precedente:

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      Dove APIGEE_ROUTE_NAME è il nome di un singolo apigeeroute.

      Comando di esempio:

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

      Esempio di output:

            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
            
      apigeeroute non-sni mostra che la porta 80 è abilitata come parte di questa route.

Risoluzione

Per risolvere il problema, disattiva la porta 80 nel file apigeeroute yaml originale rimuovendo le seguenti righe.

  - number: 80
    protocol: HTTP
      

Se non hai il file YAML apigeeroute originale, puoi procedere nel seguente modo:

  1. Esporta la configurazione attuale con il seguente comando:
    kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml

    dove APIGEE_ROUTE_NAME è apigeeroute in fase di aggiornamento per rimuovere la configurazione della porta 80.

    dove APIGEE_ROUTE_FILENAME è il nome del file di output contenente i contenuti YAML di apigeeroute.

  2. Modifica il file YAML apigeeroute per rimuovere la configurazione della porta 80.

    Apri il file APIGEE_ROUTE_FILENAME in un editor di testo e rimuovi le seguenti righe:

            - number: 80
              protocol: HTTP
                
  3. Sostituisci il file apigeeroute esistente con il file YAML modificato:
    kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
    

    dove APIGEE_ROUTE_FILENAME è il file di output contenente la configurazione apigeeroute aggiornata.

  4. I pod apigee-ingressgateway ora dovrebbero essere eseguiti con 2/2 container. In caso contrario, elimina i pod per consentire la creazione automatica di nuovi pod.
            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
            

Deve raccogliere informazioni diagnostiche

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza clienti Google Cloud:
  • Overrides.yaml
  • Output dei seguenti comandi:
    • kubectl -n apigee get pods -l app=apigee-ingressgateway
    • kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
    • kubectl -n apigee get apigeeroutes
    • Per ciascuno degli itinerari indicati, esegui:
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • In alternativa, puoi eseguire e fornire le informazioni di Apigee hybrid must-gather.