Los pods de la puerta de enlace de entrada de Apigee muestran 1 de los 2 contenedores en ejecución

Síntoma

Tus pods apigee-ingressgateway muestran solo 1 de los 2 contenedores en ejecución cuando obtienes la lista de pods.

Por ejemplo, cuando ejecutas el siguiente comando:

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

Resultado:

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

Además, si ejecutas un comando describe en uno de los pods anteriores, se mostrará que la prueba de disponibilidad falla con un código de estado 503.

Por ejemplo, en la sección Events de la descripción del Pod, es posible que veas el siguiente mensaje:

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

Causa posible

Causa Descripción
La entrada de Apigee está configurada para detectar el puerto 80 A partir de Apigee Hybrid 1.9, ya no se admite la configuración de entrada de Apigee en el puerto 80.

Causa: La entrada de Apigee está configurada para detectar el puerto 80

Este problema se debe a que la puerta de enlace de entrada de Apigee está configurada para escuchar en el puerto 80, que ya no es compatible a partir de Apigee Hybrid 1.9.

Esto puede ocurrir si actualizaste desde una versión anterior de Apigee Hybrid que permitía el puerto 80 o si hay otra configuración incorrecta que lo habilitó.

Diagnóstico

  1. Obtén una lista de tus Pods de apigee-ingressgateway.

    Ejecuta el siguiente comando:

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

    Ejemplo de resultado

    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. Describe uno de los pods enumerados para verificar los eventos:
    kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD

    Aquí, APIGEE_INGRESSGATEWAY_POD es un Pod de apigee-ingressgateway que aparece en el resultado del comando anterior.

    Resultado de muestra:

    Events:
      Type     Reason     Age                    From     Message
      ----     ------     ----                   ----     -------
      Warning  Unhealthy  76s (x32903 over 18h)  kubelet  Readiness probe failed: HTTP probe failed with statuscode: 503
    
  3. Obtén los registros del pod APIGEE_INGRESSGATEWAY_POD.
    kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD

    Es posible que veas una entrada de registro que muestre que el puerto 80 no se pudo vincular debido a un error de permiso denegado, seguido de un mensaje que indica que Envoy no está listo.

    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. Revisa la configuración actual de apigeeroute para encontrar la que tiene habilitado el puerto 80 (HTTP).
    • Obtén una lista de las rutas de Apigee definidas.
      kubectl -n apigee get apigeeroute

      Resultado de muestra:

      NAME                                  STATE     AGE
      myorg-hyb-dev-grp-000-33620d0         running   2d1h
      non-sni                               running   17s
      
    • Verifica cada apigeeroute para ver dónde se define el puerto 80.

      Ejecuta el siguiente comando para cada apigeeroute que se muestra en el resultado del comando anterior:

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      Aquí, APIGEE_ROUTE_NAME es el nombre de un apigeeroute individual.

      Comando de muestra:

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

      Resultado de muestra:

            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
            
      El apigeeroute sin SNI muestra que el puerto 80 está habilitado como parte de esta ruta.

Solución

Para resolver este problema, inhabilita el puerto 80 en el archivo apigeeroute YAML original quitando las siguientes líneas.

  - number: 80
    protocol: HTTP
      

Si no tienes el archivo apigeeroute YAML original, puedes seguir estos pasos:

  1. Exporta la configuración actual con el siguiente comando:
    kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml

    Aquí, APIGEE_ROUTE_NAME es el apigeeroute que se actualiza para quitar la configuración del puerto 80.

    Aquí, APIGEE_ROUTE_FILENAME es el nombre del archivo de salida que contiene el contenido del archivo apigeeroute en formato YAML.

  2. Edita el archivo apigeeroute YAML para quitar la configuración del puerto 80.

    Abre el archivo APIGEE_ROUTE_FILENAME en un editor de texto y quita las siguientes líneas:

            - number: 80
              protocol: HTTP
                
  3. Reemplaza el archivo apigeeroute existente por el archivo YAML modificado:
    kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
    

    Aquí, APIGEE_ROUTE_FILENAME es el archivo de salida que contiene la configuración de apigeeroute actualizada.

  4. Los Pods apigee-ingressgateway ahora deberían ejecutarse con 2/2 contenedores. Si no es así, borra los Pods para permitir que se creen otros automáticamente.
            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
            

Se debe recopilar información de diagnóstico

Si el problema persiste incluso después de seguir las instrucciones anteriores, recopila la siguiente información de diagnóstico y, luego, comunícate con Atención al cliente de Google Cloud:
  • Overrides.yaml
  • Resultado de los siguientes comandos:
    • kubectl -n apigee get pods -l app=apigee-ingressgateway
    • kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
    • kubectl -n apigee get apigeeroutes
    • Para cada una de las rutas indicadas, ejecuta el siguiente comando:
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • Como alternativa, puedes ejecutar y proporcionar la información de must-gather de Apigee Hybrid.