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
-
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
-
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
-
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
- 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:
ElapiVersion: 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
sin SNI muestra que el puerto 80 está habilitado como parte de esta ruta.
-
Obtén una lista de las rutas de Apigee definidas.
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:
- 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. -
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
-
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. -
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.