タイムアウト エラーで API 呼び出しが失敗する

現在、ApigeeApigee ハイブリッドのドキュメントを表示しています。
Apigee Edge ドキュメントを表示する

症状

次の症状が見られることがあります。

  1. クライアント アプリケーションが、Apigee ハイブリッドで API 呼び出しのレスポンスとしてタイムアウト エラーを受け取る。
  2. Apigee ハイブリッドのインストール中にクラスタに構成(overrides.yaml))を適用している間に、Error from server (invalid)The Job "apigee-resources-install" is invalid などのエラーが発生する。

エラー メッセージ

次のエラーが発生することがあります。

API 呼び出しのエラー レスポンス

Apigee ハイブリッドの 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 Namespace でエラーまたは保留中状態のジョブ istio-system Namespace で incomplete/erroneous ジョブを使用すると、istio-ingressgateway サービスが永続的に pending 状態になり、外部 IP アドレスにバインドできなくなる可能性があります。
apigee-system Namespace 内のエラーまたは保留状態の apigee-resources-install ジョブ apigee-system Namespace で incomplete ジョブを使用すると、istio- ingressgateway サービスが永続的に pending 状態になり、外部 IP アドレスにバインドできなくなる可能性があります。
外部ロードバランサに割り当てられた IP アドレス範囲が正しくない istio-operator.yaml ファイルで正しくない IP アドレス範囲が構成されていると、インストール中に istio-ingressgateway サービスが永続的に pending 状態になり、外部 IP アドレスにバインドできなくなる可能性があります。

原因: エラー状態または保留状態の istio-system Namespace のジョブ

診断

  1. 次のコマンドを使用して、istio-system 名前空間内のジョブのステータスを確認します。
    kubectl get jobs -n istio-system
    
  2. ジョブのステータスは complete である必要があります。ジョブのステータスが erroneous/pending 状態の場合、これが問題の原因です。

解決策

  1. いずれかのジョブが pending または erroneous 状態にある場合は、次のコマンドを使用してジョブを削除します。
    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. ジョブが pending または erroneous 状態の場合は、次のコマンドを使用してジョブを削除します。
    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 アドレスを確認します。たとえば、次のスニペットは、IP アドレスが構成されている istio-operator.yaml ファイルの場所を示しています。
    -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
    

診断情報の収集が必要な場合

前述の手順を踏んでも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアにご連絡ください。

  1. Google Cloud プロジェクト ID
  2. Apigee ハイブリッド組織の名前
  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