API 调用失败并显示超时错误

您正在查看 ApigeeApigee Hybrid 文档。
查看 Apigee Edge 文档。

症状

您可能会观察到以下某种症状:

  1. 客户端应用收到超时错误,以此响应 Apigee Hybrid 上的 API 调用。
  2. 在 Apigee Hybrid 安装过程中将配置 (overrides.yaml)) 应用于集群时,会观察到诸如 Error from server (invalid)The Job "apigee-resources-install" is invalid 等错误。

错误消息

您可能会观察到以下某种错误:

对 API 调用的错误响应

Apigee Hybrid 上的 API 请求可能会失败,并显示以下错误消息:

* 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

将配置 (overrides.yaml) 应用到集群时观察到错误

在安装过程中将配置(overrides.yaml 文件)应用于集群时,您可能会观察到以下某种错误:

错误 #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"

错误 #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,

可能的原因

如果 istio-ingressgateway 服务处于 pending 状态,并且无法绑定到如下所示的外部 IP 地址,则可能会出现这些错误:

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

istio-ingressgateway 服务处于 pending 状态的可能原因如下:

原因 说明
istio-system 命名空间中有作业处于错误/待处理状态 istio-system 命名空间中的 incomplete/erroneous 作业可能会导致 istio-ingressgateway 服务永久处于 pending 状态,并且无法绑定到外部 IP 地址。
apigee-system 命名空间中有 apigee-resources-install 作业处于错误/待处理状态 apigee-system 命名空间中的 incomplete 作业可能会导致 istio- ingressgateway 服务永久处于 pending 状态,并且无法绑定到外部 IP 地址。
分配给外部负载均衡器的 IP 地址范围不正确 istio-operator.yaml 文件中配置的 IP 地址范围可能不正确,从而导致 istio-ingressgateway 服务永久进入 pending 状态,并且在安装过程中无法绑定到外部 IP 地址。

原因:istio-system 命名空间中有作业处于错误/待处理状态

诊断

  1. 使用以下命令检查 istio-system 命名空间中的作业状态:
    kubectl get jobs -n istio-system
    
  2. 作业状态必须为 complete。如果作业状态为 erroneous/pending,则会导致此问题。

解决方法

  1. 如果有任何作业处于 pendingerroneous 状态,请使用以下命令删除这些作业:
    kubectl -n istio-system delete job JOB_NAME_FROM_STEP_1
    
  2. 通过应用 overrides.yaml 文件重新运行安装:
    apigeectl apply -f overrides.yaml
    

原因:apigee-system 命名空间中的 apigee-resources-install 作业可能处于错误状态

诊断

  1. 使用以下命令检查 apigee-system 命名空间中的作业状态:
    kubectl get jobs -n apigee-system
    
  2. 作业状态必须为 complete。如果作业状态为 erroneous/pending,则会导致此问题。以下示例输出显示作业 apigee-resources-install 已成功完成。
    kubectl get jobs  -n apigee-system
    NAME                       COMPLETIONS   DURATION   AGE
    apigee-resources-install   1/1           23s        16d
    

解决方法

  1. 如果有作业处于 pendingerroneous 状态,请使用以下命令删除这些作业:
    kubectl -n apigee-system delete job JOB_NAME_FROM_STEP_1
    
  2. 通过应用 overrides.yaml 文件重新运行安装:
    apigeectl apply -f overrides.yaml
    

原因:分配给外部负载均衡器的 IP 地址范围不正确

诊断

  1. istio- operator.yaml 文件中检查为负载均衡器配置的 IP 地址。例如,以下代码段显示了 istio-operator.yaml 文件中配置 IP 地址的位置:
    -name: istio-ingressgateway
      enabled: true
      k8s:
        service:
          type: LoadBalancer
         loadBalancerIP: 10.195.24.23
    
  2. istio-ingressgateway 服务在 istio-operator.yaml 文件中被配置为负载均衡器(由类型指示)。在 ASM 安装过程中,系统会使用配置的 IP 地址创建负载均衡器,并使用有线方式与 istio- ingressgateway 服务进行通信。因此,应正确配置 IP 地址并将其预留给负载均衡器。
  3. 请与您的网络团队联系并验证为 loadBalancerIP 配置的 IP 地址是否正确。如果不正确,负载均衡器服务将无法绑定到 IP 地址。这会导致 istio-ingressgateway 服务永久处于 pending 状态。

解决方法

  1. 请与您的网络团队合作并在 istio- operator.yaml 文件中配置正确的 IP 地址。
  2. 重新运行 ASM 安装并应用 overrides.yaml 文件:
    apigeectl apply -f overrides.yaml
    

必须收集的诊断信息

如果按照上述说明操作后问题仍然存在,请收集以下诊断信息,然后联系 Apigee 支持团队

  1. Google Cloud 项目 ID
  2. Apigee Hybrid 组织的名称
  3. Kubernetes 集群名称
  4. Google Cloud 项目名称(如果 kubernetes 集群位于不同的 Google Cloud 项目中)
  5. overrides.yaml 文件
  6. 在 ASM 安装过程中使用的 Istio-operator .yaml 文件。
  7. 收集 istio-system 命名空间中的每个 istio-ingressgateway pod 的日志:
    kubectl logs NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.log
    
  8. 收集 istio-system 命名空间中的每个 pod 的说明:
    kubectl describe pod NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.yaml
    
  9. 收集 istio-system 命名空间中的服务列表:
    kubectl get svc -n istio-system