As chamadas da API falham com erros de tempo limite

Está a ver a documentação do Apigee e do Apigee Hybrid.
Veja a documentação do Apigee Edge.

Sintoma

Pode observar um dos seguintes sintomas:

  1. As aplicações cliente recebem erros de limite de tempo como resposta a chamadas API no Apigee Hybrid.
  2. Observa erros como Error from server (invalid) ou The Job "apigee-resources-install" is invalid ao aplicar a configuração (overrides.yaml) ao cluster durante a instalação híbrida.

Mensagens de erro

Pode observar um dos seguintes erros:

Resposta de erro a chamadas API

Os pedidos de API no Apigee Hybrid podem falhar com a seguinte mensagem de erro:

* 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

Erros observados ao aplicar a configuração (overrides.yaml) aos clusters

Pode observar um dos seguintes erros ao aplicar a configuração (ficheiro overrides.yaml) aos clusters durante a instalação:

Erro n.º 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"

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

Causas possíveis

Estes erros podem ocorrer se o serviço istio-ingressgateway estiver num estado pending e não conseguir associar-se a um endereço IP externo, conforme mostrado abaixo:

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

As possíveis causas para o serviço istio-ingressgateway estar num estado pending são as seguintes:

Causa Descrição
Tarefas num estado com erros/pendente no espaço de nomes istio-system As tarefas incomplete/erroneous no espaço de nomes istio-system podem fazer com que o serviço istio-ingressgateway fique no estado pending para sempre e não consiga associar-se a um endereço IP externo.
apigee-resources-install job in erroneous/pending state in apigee-system namespace As tarefas incomplete no espaço de nomes apigee-system podem fazer com que o serviço istio- ingressgateway fique no estado pending para sempre e não consiga associar-se a um endereço IP externo.
Intervalo de endereços IP incorreto atribuído ao balanceador de carga externo Pode ser configurado um intervalo de endereços IP incorreto no ficheiro istio-operator.yaml, o que faz com que o serviço istio-ingressgateway entre no estado pending para sempre e não consiga associar-se a um endereço IP externo durante a instalação.

Causa: tarefas no espaço de nomes istio-system num estado com erros/pendente

Diagnóstico

  1. Verifique o estado das tarefas no espaço de nomes istio-system através do seguinte comando:
    kubectl get jobs -n istio-system
    
  2. O estado das tarefas tem de ser complete. Se o estado dos trabalhos estiver num estado erroneous/pending, é essa a causa deste problema.

Resolução

  1. Se alguma das tarefas estiver no estado pending ou erroneous, elimine-as usando o seguinte comando:
    kubectl -n istio-system delete job JOB_NAME_FROM_STEP_1
    
  2. Volte a executar a instalação aplicando o ficheiro overrides.yaml:

    Atualize o apigee-serving-cert através do Helm:

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

    Certifique-se de que inclui todas as definições apresentadas, incluindo --atomic para que a ação seja revertida em caso de falha.

    Instale o gráfico:

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

Causa: a tarefa apigee-resources-install no espaço de nomes apigee-system pode estar num estado incorreto

Diagnóstico

  1. Verifique o estado das tarefas no espaço de nomes apigee-system através do seguinte comando:
    kubectl get jobs -n apigee-system
    
  2. O estado das tarefas tem de ser complete. Se o estado dos trabalhos estiver num estado erroneous/pending, é essa a causa deste problema. O seguinte resultado de exemplo mostra que a tarefa foi concluída com êxito.apigee-resources-install
    kubectl get jobs  -n apigee-system
    NAME                       COMPLETIONS   DURATION   AGE
    apigee-resources-install   1/1           23s        16d
    

Resolução

  1. Se as tarefas estiverem no estado pending ou erroneous, elimine-as com o seguinte comando:
    kubectl -n apigee-system delete job JOB_NAME_FROM_STEP_1
    
  2. Volte a executar a instalação aplicando o ficheiro overrides.yaml:
    apigeectl apply -f overrides.yaml
    

Causa: intervalo de endereços IP incorreto atribuído ao equilibrador de carga externo

Diagnóstico

  1. Verifique o endereço IP configurado para o equilibrador de carga no ficheiro istio- operator.yaml. Por exemplo, o fragmento seguinte mostra a localização no ficheiro istio-operator.yaml onde o endereço IP está configurado:
    -name: istio-ingressgateway
      enabled: true
      k8s:
        service:
          type: LoadBalancer
         loadBalancerIP: 10.195.24.23
  2. O serviço istio-ingressgateway está configurado como um equilibrador de carga (indicado pelo tipo) no ficheiro istio-operator.yaml. Durante a instalação do ASM, é criado um equilibrador de carga com o endereço IP configurado e ligado para comunicar com o serviço istio- ingressgateway. Como tal, o endereço IP configurado deve estar correto e reservado para o balanceador de carga.
  3. Contacte a sua equipa de rede e verifique se o endereço IP configurado para loadBalancerIP está correto. Se estiver incorreto, o serviço de balanceamento de carga não vai poder associar-se ao endereço IP. Isto faz com que o serviço istio-ingressgateway fique para sempre no estado pending.

Resolução

  1. Trabalhe com a sua equipa de rede e configure o endereço IP correto no ficheiro istio- operator.yaml.
  2. Volte a executar a instalação para o gateway de entrada do Apigee e aplique o ficheiro overrides.yaml:
    helm upgrade $ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE

Tem de recolher informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, reúna as seguintes informações de diagnóstico e, em seguida, contacte o apoio ao cliente da Google Cloud:

  1. O ID do projeto do Google Cloud
  2. O nome da organização do Apigee Hybrid
  3. Nome do cluster do Kubernetes
  4. Nome do projeto do Google Cloud se o cluster do Kubernetes residir num projeto do Google Cloud diferente
  5. O ficheiro overrides.yaml
  6. O ficheiro Istio-operator .yaml usado durante a instalação do ASM.
  7. Recolha os registos de cada pod no espaço de nomes istio-system:istio-ingressgateway
    kubectl logs NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.log
    
  8. Recolha a descrição de cada pod no namespace istio-system:
    kubectl describe pod NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.yaml
    
  9. Recolha a lista de serviços no espaço de nomes istio-system:
    kubectl get svc -n istio-system