Llamadas a API fallidas con errores de tiempo de espera

Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

Síntoma

Puede observar uno de los siguientes síntomas:

  1. Las aplicaciones cliente reciben errores de tiempo de espera como respuesta a las llamadas a la API en Apigee hybrid.
  2. Se producen errores como Error from server (invalid) o The Job "apigee-resources-install" is invalid al aplicar la configuración (overrides.yaml) al clúster durante la instalación híbrida.

Mensajes de error

Puede que observes uno de los siguientes errores:

Respuesta de error a las llamadas a la API

Las solicitudes a la API en Apigee Hybrid pueden fallar y mostrar el siguiente mensaje de error:

* Connection failed
* connect to 34.84.67.39 port 443 failed: Operation timed out
* Failed to connect to example.apis.com port 443: Operation timed out
* Closing connection 0
curl: (7) Failed to connect to example.apis.com port 443: Operation timed out

Errores observados al aplicar la configuración (overrides.yaml) a los clústeres

Puede que se produzca uno de los siguientes errores al aplicar la configuración (archivo overrides.yaml) a los clústeres durante la instalación:

Error 1

helm upgrade operator apigee-operator/ \
  --install \
  --create-namespace \
  --namespace APIGEE_NAMESPACE \
  --atomic \
  -f OVERRIDES_FILE

...
...
Error from server (Invalid): error when applying patch:
to:
Resource: "batch/v1, Resource=jobs", GroupVersionKind: "batch/v1, Kind=Job"
Name: "istio-init-crd-10-1.4.6", Namespace: "istio-system"
to:
Resource: "batch/v1, Resource=jobs", GroupVersionKind: "batch/v1, Kind=Job"
Name: "istio-init-crd-11-1.4.6", Namespace: "istio-system"
to:
Resource: "batch/v1, Resource=jobs", GroupVersionKind: "batch/v1, Kind=Job"
Name: "istio-init-crd-14-1.4.6", Namespace: "istio-system"

Error n.º 2

helm upgrade operator apigee-operator/ \
--install \
--create-namespace \
--namespace APIGEE_NAMESPACE \
--atomic \
-f OVERRIDES_FILE

...
...
The Job "apigee-resources-install" is invalid: spec.template: Invalid value:
core.PodTemplateSpec{ObjectMeta:v1.ObjectMeta{Name:"apigee-resources-install",
GenerateName:"", Namespace:"", SelfLink:"", UID:"", ResourceVersion:"",
Generation:0,

Posibles motivos

Estos errores pueden producirse si el servicio istio-ingressgateway se encuentra en un estado pending y no puede enlazarse a una dirección IP externa, como se muestra a continuación:

kubectl get services -n istio-system
NAME                      TYPE         CLUSTER-IP   EXTERNAL-IP  PORT(S)             AGE
istio-ingressgateway      LoadBalancer 10.198.5.104 <pending>    15020:31927/TCP,    12h
                                                                 80:31381/TCP,
                                                                 443:31391/TCP,
                                                                 31400:31401/TCP,
                                                                 15443:32623/TCP

Estos son los posibles motivos por los que el servicio istio-ingressgateway puede estar en estado pending:

Causa Descripción
Trabajos en estado de error o pendiente en el espacio de nombres istio-system Los trabajos incomplete/erroneous del espacio de nombres istio-system podrían provocar que el servicio istio-ingressgateway esté en estado pending para siempre y no pueda enlazarse a una dirección IP externa.
El trabajo apigee-resources-install está en estado de error o pendiente en el espacio de nombres apigee-system Los trabajos incomplete del espacio de nombres apigee-system podrían provocar que el servicio istio- ingressgateway esté en estado pending indefinidamente y no pueda enlazarse a una dirección IP externa.
Intervalo de direcciones IP incorrecto asignado al balanceador de carga externo Es posible que se haya configurado un intervalo de direcciones IP incorrecto en el archivo istio-operator.yaml, lo que provoca que el servicio istio-ingressgateway se quede en el estado pending para siempre y no pueda enlazarse a una dirección IP externa durante la instalación.

Causa: las tareas del espacio de nombres istio-system están en estado de error o pendiente

Diagnóstico

  1. Comprueba el estado de los trabajos del espacio de nombres istio-system con el siguiente comando:
    kubectl get jobs -n istio-system
    
  2. El estado de los trabajos debe ser complete. Si el estado de los trabajos es erroneous/pending, esa es la causa del problema.

Resolución

  1. Si alguno de los trabajos tiene el estado pending o erroneous, elimínelo con el siguiente comando:
    kubectl -n istio-system delete job JOB_NAME_FROM_STEP_1
    
  2. Vuelve a ejecutar la instalación aplicando el archivo overrides.yaml:

    Actualiza apigee-serving-cert con Helm:

    helm install operator apigee-operator/
    --namespace APIGEE_NAMESPACE \
    --atomic \
    -f OVERRIDES_FILE \
    --dry-run=server

    Asegúrate de incluir todos los ajustes que se muestran, incluido --atomic para que la acción se revierta si falla.

    Instala el gráfico:

    helm upgrade operator apigee-operator/
    --namespace APIGEE_NAMESPACE \
    --atomic \
    -f OVERRIDES_FILE

Causa: es posible que el trabajo apigee-resources-install del espacio de nombres apigee-system esté en un estado erróneo.

Diagnóstico

  1. Comprueba el estado de los trabajos del espacio de nombres apigee-system con el siguiente comando:
    kubectl get jobs -n apigee-system
    
  2. El estado de los trabajos debe ser complete. Si el estado de los trabajos es erroneous/pending, esa es la causa del problema. La siguiente salida de ejemplo muestra que la tarea apigee-resources-install se ha completado correctamente.
    kubectl get jobs  -n apigee-system
    NAME                       COMPLETIONS   DURATION   AGE
    apigee-resources-install   1/1           23s        16d
    

Resolución

  1. Si los trabajos tienen el estado pending o erroneous, elimínalos con el siguiente comando:
    kubectl -n apigee-system delete job JOB_NAME_FROM_STEP_1
    
  2. Vuelve a ejecutar la instalación aplicando el archivo overrides.yaml:
    apigeectl apply -f overrides.yaml
    

Causa: se ha asignado un intervalo de direcciones IP incorrecto al balanceador de carga externo

Diagnóstico

  1. Comprueba la dirección IP configurada para el balanceador de carga en el archivo istio- operator.yaml. Por ejemplo, el siguiente fragmento muestra la ubicación en el archivo istio-operator.yaml donde se configura la dirección IP:
    -name: istio-ingressgateway
      enabled: true
      k8s:
        service:
          type: LoadBalancer
         loadBalancerIP: 10.195.24.23
  2. El servicio istio-ingressgateway se configura como un balanceador de carga (indicado por el tipo) en el archivo istio-operator.yaml. Durante la instalación de ASM, se crea un balanceador de carga con la dirección IP configurada y se conecta para comunicarse con el servicio istio- ingressgateway. Por lo tanto, la dirección IP configurada debe ser correcta y estar reservada para el balanceador de carga.
  3. Ponte en contacto con tu equipo de redes y comprueba que la dirección IP configurada para loadBalancerIP sea correcta. Si no es correcta, el servicio de balanceador de carga no podrá enlazarse a la dirección IP. Esto hace que el servicio istio-ingressgateway esté en el estado pending para siempre.

Resolución

  1. Ponte en contacto con tu equipo de redes y configura la dirección IP correcta en el archivo istio- operator.yaml.
  2. Vuelve a ejecutar la instalación de la puerta de enlace de entrada de Apigee y aplica el archivo overrides.yaml:
    helm upgrade $ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE

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:

  1. El ID del proyecto de Google Cloud
  2. Nombre de la organización de Apigee Hybrid
  3. Nombre del clúster de Kubernetes
  4. Nombre del proyecto de Google Cloud si el clúster de Kubernetes reside en otro proyecto de Google Cloud
  5. El archivo overrides.yaml
  6. El archivo Istio-operator .yaml que se ha usado durante la instalación de ASM.
  7. Recopila los registros de cada pod istio-ingressgateway del espacio de nombres istio-system:
    kubectl logs NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.log
    
  8. Recopila la descripción de cada pod del espacio de nombres istio-system:
    kubectl describe pod NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.yaml
    
  9. Recoge la lista de servicios del espacio de nombres istio-system:
    kubectl get svc -n istio-system