Eventarc for Google Kubernetes Engine(GKE)のトラブルシューティング

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、Eventarc for GKE および Cloud Run for Anthos の使用中に発生する可能性のある問題の解決方法について説明します。

他に発生する可能性のある問題については、以下のトラブルシューティングをご覧ください。

リソース作成権限エラーが発生してトリガーを作成できない

次のいずれかのエラー メッセージが表示されます。

Error applying IAM policy for service account 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT':
Error setting IAM policy for service account 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT':
googleapi: Error 403: Permission iam.serviceAccounts.setIamPolicy is required to perform this
operation on service account SERVICE_ACCOUNT., forbidden

Error when reading or editing Container Cluster "cluster": googleapi:
Error 403: Required "container.clusters.get" permission(s) for "..."., forbidden
Error reading instance group manager returned as an instance group URL:
"googleapi: Error 403: Required 'compute.instanceGroupManagers.get' permission
for '...', forbidden"

これは、Eventarc が Google Kubernetes Engine(GKE)クラスタ内のリソースを管理するために必要な Eventarc サービス アカウントが正しく設定されていない場合に発生します。

この問題を解決するには、リソースを作成するための適切な権限で Eventarc サービス アカウントが正しく構成されていることを確認します。GKE 宛先を有効にするをご覧ください。

ターゲット クラスタが見つからないか、Workload Identity が有効になっていないため、トリガーの作成に失敗する

次のいずれかのエラー メッセージが表示されます。

ERROR: (gcloud.eventarc.triggers.create) NOT_FOUND: Not found: projects/PROJECT_ID/locations/
LOCATION/clusters/CLUSTER_NAME.
...
ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: workload identity is not enabled on
cluster CLUSTER_NAME in LOCATION
...

これは、Eventarc がターゲット GKE クラスタを特定できないか、クラスタで Workload Identity が有効になっていない場合に発生します。

この問題を解決するには、ターゲット クラスタが存在し、Workload Identity が有効になっていることを確認します。

リソースの状態が無効であるため、トリガーの作成に失敗する

プロジェクトに次のようなエラー メッセージが表示されます。

ERROR: (gcloud.eventarc.triggers.create) Invalid resource state for projects/PROJECT_ID/locations/LOCATION/triggers/TRIGGER_ID.
Ensure that you have enabled your GKE destination and assigned required permissions to the service account.
For more information, see https://cloud.google.com/eventarc/docs/gke/troubleshooting.

これは以下の場合に発生します。

  • GKE の宛先が有効になっていない。
  • Eventarc で GKE の宛先のイベントを管理するために必要なロールと権限が、サービス アカウントに付与されていない。

この問題を解決するには:

  1. GKE の宛先が有効になっていることを確認します。
    gcloud eventarc gke-destinations init
    詳細については、GKE の宛先を有効にするをご覧ください。
  2. Eventarc サービス アカウントに、リソースの作成に適切な権限が構成されていることを確認します。詳細については、サービス アカウントの作成をご覧ください。

トリガーは正常に作成されたが、ターゲットがイベントを受信しない

トリガーを作成してから十分な時間が経過していることを確認します。イベントが送信されるまでに 2 分ほどかかることがあります。

  1. イベントがターゲットで配信されない場合は、Pub/Sub からターゲットに送信されたイベントがドロップされる可能性があります。

    イベントがドロップされないように、Pub/Sub サブスクリプションの再試行ポリシーを設定するか、配信不能のメッセージをデッドレター トピックに転送します(これは、デッドレター キューとも呼ばれます)。

    デッドレター トピックを設定する前に、トリガーのトピックとサブスクリプションを取得します。

    gcloud eventarc triggers describe TRIGGER \
    --location=LOCATION

    次のように置き換えます。

    • TRIGGER: トリガーの ID または完全修飾識別子。
    • LOCATION: Eventarc トリガーのロケーション。
  2. それでもトリガーが機能しない場合は、Eventarc のイベント フォワーダー コンポーネントのステータスをチェックして、デプロイが適切に行われているかどうか確認してください。

    1. 名前に event-forwarder が含まれるすべての Pod を一覧表示して、クラスタの Namespace を特定します。
      kubectl get pods --all-namespaces | grep event-forwarder
      出力は次のようになります。
      event-forwarder-namespace-hash1   event-forwarder-hash1   1/1   Running   0   5d2h
      event-forwarder-namespace-hash2   event-forwarder-hash2   1/1   Running   0   2d2h
      
      Namespace の最初の 30 文字が、作成した Eventarc トリガーの名前に一致し、その後にハッシュが続きます。このハッシュは、最初の 30 文字が同じトリガーを区別するために使用されます。
    2. Deployment の詳細を取得します。
      kubectl get deployments -n EVENT_FORWARDER_NAMESPACE event-forwarder
      
    3. Pod の詳細を取得します。
      kubectl describe pod -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
      
    4. Pod のログを出力して、エラーが発生した理由と場所を調べます。
      kubectl logs -f -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
      
      たとえば、次のログでは、サービス アカウントの Pub/Sub Subscriber ロールが取り消されています。
      {"error":"generic::permission_denied: missing 'pubsub.subscriptions.consume' permission",
      "message":"Permissions check failed","severity":"fatal","timestamp":"2021-07-07T14:57:49.038877483Z"}