API 呼叫失敗,並顯示逾時錯誤

您目前查看的是 ApigeeApigee Hybrid 說明文件。
查看 Apigee Edge 說明文件。

問題

您可能會出現下列其中一種症狀:

  1. 用戶端應用程式在 Apigee Hybrid 上呼叫 API 時,會收到逾時錯誤的回應。
  2. 在混合式安裝期間,將設定 (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

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"

錯誤 #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,

可能原因

如果 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 檔案,重新執行安裝程序:

    使用 Helm 更新 apigee-serving-cert

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

    請務必加入顯示的所有設定,包括 --atomic,以便在失敗時回溯動作。

    安裝圖表:

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

原因: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 位址不正確,負載平衡器服務就無法繫結至該 IP 位址。這會導致 istio-ingressgateway 服務永遠處於 pending 狀態。

解析度

  1. 請與網路團隊合作,在 istio- operator.yaml 檔案中設定正確的 IP 位址。
  2. 重新執行 Apigee Ingress 閘道的安裝作業,並套用 overrides.yaml 檔案:
    helm upgrade $ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE

必須收集診斷資訊

如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡:

  1. Google Cloud 專案 ID
  2. Apigee Hybrid 機構的名稱
  3. Kubernetes 叢集名稱
  4. 如果 Kubernetes 叢集位於不同的 Google Cloud 專案,請提供 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