As chamadas de API falham com erros de tempo limite

Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.

Sintoma

É possível observar um dos seguintes sintomas:

  1. Os aplicativos clientes recebem erros de tempo limite como resposta para chamadas de API na Apigee híbrida.
  2. 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 da Apigee híbrida são observados.

Mensagens de erro

Um dos seguintes erros pode ser observado:

Resposta de erro às chamadas de API

As solicitações de API na Apigee híbrida 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

Talvez você observe um dos seguintes erros ao aplicar a configuração (arquivo overrides.yaml) aos clusters durante a instalação:

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

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

Causas possíveis

Esses erros podem acontecer se o serviço istio-ingressgateway estiver em um estado pending e não puder ser vinculado a um endereço IP externo, como 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 em um estado pending são as seguintes:

Causa Descrição
Jobs com estado incorreto/pendente no namespace istio-system Os jobs incomplete/erroneous no namespace istio-system podem fazer com que o serviço istio-ingressgateway fique no estado pending para sempre e não possa ser vinculado a um endereço IP externo.
job apigee-resources-install em estado incorreto/pendente no namespace apigee-system Os jobs incomplete no namespace apigee-system podem fazer com que o serviço istio- ingressgateway fique no estado pending para sempre e não consiga ser vinculado a um endereço IP externo.
Intervalo de endereços IP incorreto atribuído ao balanceador de carga externo Um intervalo de endereços IP incorreto pode ser configurado no arquivo istio-operator.yaml, fazendo com que o serviço istio-ingressgateway entre no estado pending para sempre e não consiga se vincular a um endereço IP externo durante a instalação.

Causa: jobs no namespace do sistema istio em estado incorreto/pendente

Diagnóstico

  1. Verifique o status dos jobs no namespace istio-system usando o seguinte comando:
    kubectl get jobs -n istio-system
    
  2. O status dos jobs precisa ser complete. Se o status dos jobs for um estado erroneous/pending, essa é a causa do problema.

Resolução

  1. Se algum dos jobs estiver no estado pending ou erroneous, exclua-os usando o seguinte comando:
    kubectl -n istio-system delete job JOB_NAME_FROM_STEP_1
    
  2. Execute novamente a instalação aplicando o arquivo overrides.yaml:
    apigeectl apply -f overrides.yaml
    

Causa: o job apigee-resources-install no namespace apigee-system pode estar no estado incorreto

Diagnóstico

  1. Verifique o status dos jobs no namespace apigee-system usando o seguinte comando:
    kubectl get jobs -n apigee-system
    
  2. O status dos jobs precisa ser complete. Se o status dos jobs estiver em um estado erroneous/pending, essa é a causa do problema. O exemplo de saída a seguir mostra que o job apigee-resources-install foi concluído.
    kubectl get jobs  -n apigee-system
    NAME                       COMPLETIONS   DURATION   AGE
    apigee-resources-install   1/1           23s        16d
    

Resolução

  1. Se os jobs estiverem em estado pending ou erroneous, exclua-os usando o seguinte comando:
    kubectl -n apigee-system delete job JOB_NAME_FROM_STEP_1
    
  2. Execute novamente a instalação aplicando o arquivo overrides.yaml:
    apigeectl apply -f overrides.yaml
    

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

Diagnóstico

  1. Verifique o endereço IP configurado para o balanceador de carga no arquivo istio- operator.yaml. Por exemplo, o snippet a seguir mostra o local no arquivo istio-operator.yaml em que 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 balanceador de carga (indicado por tipo) no arquivo istio-operator.yaml. Durante a instalação do ASM, um balanceador de carga é criado com o endereço IP configurado e conectado para se comunicar com o serviço istio- ingressgateway. Portanto, o endereço IP configurado precisa estar correto e reservado para o balanceador de carga.
  3. Envolva sua equipe de rede e verifique se o endereço IP configurado para loadBalancerIP está correto. Se estiver incorreto, o serviço de balanceador de carga não poderá se vincular ao endereço IP. Isso faz com que o serviço istio-ingressgateway fique no estado pending para sempre.

Resolução

  1. Trabalhe com sua equipe de rede e configure o endereço IP correto no arquivo istio- operator.yaml.
  2. Execute novamente a instalação do ASM e aplique o arquivo overrides.yaml:
    apigeectl apply -f overrides.yaml
    

É necessário coletar 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 entre em contato com o Suporte do Google Cloud:

  1. O ID do projeto do Google Cloud
  2. O nome da organização da Apigee híbrida
  3. Nome do cluster do Kubernetes
  4. Nome do projeto do Google Cloud se o cluster do Kubernetes estiver em um projeto diferente do Google Cloud
  5. Arquivo overrides.yaml
  6. O arquivo Istio-operator .yaml usado durante a instalação do ASM.
  7. Colete os registros em cada pod istio-ingressgateway no namespace istio-system:
    kubectl logs NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.log
    
  8. Colete 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. Colete a lista de serviços no namespace istio-system:
    kubectl get svc -n istio-system