Los pods de la pasarela de entrada de Apigee muestran que se está ejecutando 1 de 2 contenedores

Síntoma

Tus pods apigee-ingressgateway solo muestran 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 el comando describe en uno de los pods anteriores, se mostrará que la comprobación de disponibilidad falla con el código de estado 503.

Por ejemplo, en la sección Events de la descripción del pódcast, puede ver 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
El ingreso de Apigee está configurado para escuchar en el puerto 80 La configuración de entrada de Apigee en el puerto 80 ya no se admite a partir de Apigee Hybrid 1.9.

Causa: el objeto Ingress de Apigee está configurado para escuchar en el puerto 80

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

Esto puede ocurrir si has actualizado desde una versión anterior de Apigee Hybrid que permitía el puerto 80 o si hay otro error de configuración que lo haya habilitado.

Diagnóstico

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

    Ejecuta el siguiente comando:

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

    Ejemplo de salida

    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 de la lista para comprobar los eventos:
    kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD

    Donde APIGEE_INGRESSGATEWAY_POD es un pod apigee-ingressgateway que aparece en el resultado del comando anterior.

    Ejemplo:

    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

    Puede que vea una entrada de registro que muestre que no se ha podido enlazar el puerto 80 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 de apigeeroute actual para encontrar la que tiene habilitado el puerto 80 (HTTP).
    • Obtener una lista de las rutas de Apigee definidas.
      kubectl -n apigee get apigeeroute

      Ejemplo:

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

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

      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml

      APIGEE_ROUTE_NAME es el nombre de un apigeeroute.

      Comando de ejemplo:

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

      Ejemplo:

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

Resolución

Para solucionar este problema, inhabilita el puerto 80 en el archivo apigeeroute yaml original eliminando 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

    Donde APIGEE_ROUTE_NAME es el apigeeroute que se está actualizando para eliminar la configuración del puerto 80.

    Donde APIGEE_ROUTE_FILENAME es el nombre del archivo de salida que contiene el contenido 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 elimina las siguientes líneas:

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

    Donde APIGEE_ROUTE_FILENAME es el archivo de salida que contiene la configuración apigeeroute actualizada.

  4. Los pods apigee-ingressgateway ahora deberían ejecutarse con 2/2 contenedores. Si no lo hacen, elimina los pods para 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
            

Debe recoger información de diagnóstico

Si el problema persiste incluso después de seguir las instrucciones anteriores, reúne la siguiente información de diagnóstico y ponte en contacto con el equipo de Asistencia 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
    • Ejecuta el siguiente comando para cada una de las rutas indicadas:
      kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
  • También puede ejecutar y proporcionar la información de must-gather de Apigee Hybrid.