Les appels d'API échouent et renvoient des erreurs d'expiration de délai

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.

Symptôme

Vous pouvez observer l'un des symptômes suivants :

  1. Les applications clientes reçoivent des erreurs d'expiration de délai en réponse aux appels d'API dans Apigee hybrid.
  2. Vous observez des erreurs telles que Error from server (invalid) ou The Job "apigee-resources-install" is invalid lors de l'application de la configuration (overrides.yaml)) au cluster pendant l'installation d'Apigee hybrid.

Messages d'erreur

Vous pouvez rencontrer l'une des erreurs suivantes :

Réponse d'erreur aux appels d'API

Les requêtes API sur Apigee hybrid peuvent échouer avec le message d'erreur suivant :

* 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

Erreurs observées lors de l'application de la configuration (overrides.yaml) aux clusters.

Vous pouvez observer l'une des erreurs suivantes lors de l'application de la configuration (fichier overrides.yaml) aux clusters lors de l'installation :

Erreur #1

apigeectl init -f overrides/overrides.yaml

...
...
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"

Erreur #2

apigeectl init -f overrides/overrides.yaml

...
...
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,

Causes possibles

Ces erreurs peuvent se produire si le service istio-ingressgateway est à l'état pending et ne peut pas être associé à une adresse IP externe comme indiqué ci-dessous :

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

Le service istio-ingressgateway peut présenter l'état pending pour les raisons suivantes :

Cause Description
Tâches dans un état d'erreur/en attente dans l'espace de noms istio-system Les tâches incomplete/erroneous dans l'espace de noms istio-system peuvent faire basculer le service istio-ingressgateway vers l'état pending indéfiniment et empêcher sa liaison à une adresse IP externe.
apigee-resources-install job in erroneous/pending state in apigee-system namespace Les tâches incomplete dans l'espace de noms apigee-system peuvent faire basculer le service istio- ingressgateway vers l'état pending indéfiniment et empêcher sa liaison à une adresse IP externe.
Plage d'adresses IP incorrecte attribuée à l'équilibreur de charge externe Une plage d'adresses IP incorrecte peut être configurée dans le fichier istio-operator.yaml et faire basculer le service istio-ingressgateway vers l'état pending indéfiniment, ce qui empêche la liaison à une adresse IP externe pendant l'installation.

Cause : des tâches dans l'espace de noms istio-system sont en état d'erreur/en attente.

Diagnostic

  1. Vérifiez l'état des tâches dans l'espace de noms istio-system à l'aide de la commande suivante :
    kubectl get jobs -n istio-system
    
  2. L'état des tâches doit être complete. Si l'état des tâches est erroneous/pending, il s'agit de la cause du problème.

Solution

  1. Si l'une des tâches présente l'état pending ou erroneous, supprimez-la à l'aide de la commande suivante :
    kubectl -n istio-system delete job JOB_NAME_FROM_STEP_1
    
  2. Réexécutez l'installation en appliquant le fichier overrides.yaml :
    apigeectl apply -f overrides.yaml
    

Cause : la tâche apigee-resources-install dans l'espace de noms apigee-system peut se trouver dans un état d'erreur.

Diagnostic

  1. Vérifiez l'état des tâches dans l'espace de noms apigee-system à l'aide de la commande suivante :
    kubectl get jobs -n apigee-system
    
  2. L'état des tâches doit être complete. Si l'état des tâches est erroneous/pending, il s'agit de la cause du problème. L'exemple de résultat suivant montre que la tâche apigee-resources-install a abouti.
    kubectl get jobs  -n apigee-system
    NAME                       COMPLETIONS   DURATION   AGE
    apigee-resources-install   1/1           23s        16d
    

Solution

  1. Si les tâches sont à l'état pending ou erroneous, supprimez-les à l'aide de la commande suivante :
    kubectl -n apigee-system delete job JOB_NAME_FROM_STEP_1
    
  2. Réexécutez l'installation en appliquant le fichier overrides.yaml :
    apigeectl apply -f overrides.yaml
    

Cause : une plage d'adresses IP incorrecte est attribuée à l'équilibreur de charge externe.

Diagnostic

  1. Vérifiez l'adresse IP configurée pour l'équilibreur de charge dans le fichier istio- operator.yaml. Par exemple, l'extrait suivant indique l'emplacement du fichier istio-operator.yaml dans lequel l'adresse IP est configurée :
    -name: istio-ingressgateway
      enabled: true
      k8s:
        service:
          type: LoadBalancer
         loadBalancerIP: 10.195.24.23
    
  2. Le service istio-ingressgateway est configuré en tant qu'équilibreur de charge (indiqué par type) dans le fichier istio-operator.yaml. Lors de l'installation d'ASM, un équilibreur de charge est créé avec l'adresse IP configurée et connecté de manière à communiquer avec le service istio- ingressgateway. Par conséquent, l'adresse IP configurée doit être correcte et réservée à l'équilibreur de charge.
  3. Contactez votre équipe réseau et vérifiez que l'adresse IP configurée pour loadBalancerIP est correcte. Si l'adresse est incorrecte, le service d'équilibrage de charge ne pourra pas s'associer à l'adresse IP. Dans une telle situation, le service istio-ingressgateway reste indéfiniment à l'état pending.

Solution

  1. Collaborez avec votre équipe réseau et configurez l'adresse IP correcte dans le fichier istio- operator.yaml.
  2. Réexécutez l'installation d'ASM et appliquez le fichier overrides.yaml :
    apigeectl apply -f overrides.yaml
    

Vous devez collecter des informations de diagnostic

Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez l'assistance Apigee :

  1. L'ID de projet Google Cloud
  2. Nom de l'organisation Apigee Hybrid
  3. Nom du cluster Kubernetes
  4. Nom du projet Google Cloud si le cluster Kubernetes se trouve dans un autre projet Google Cloud.
  5. Le fichier overrides.yaml
  6. Le fichier Istio-operator .yaml utilisé lors de l'installation d'ASM.
  7. Collectez les journaux de chaque pod istio-ingressgateway dans l'espace de noms istio-system :
    kubectl logs NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.log
    
  8. Collectez la description de chaque pod dans l'espace de noms istio-system :
    kubectl describe pod NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.yaml
    
  9. Collectez la liste des services dans l'espace de noms istio-system :
    kubectl get svc -n istio-system