本頁說明如何解決使用 GKE 適用的 Eventarc 時可能遇到的問題,包括在 GKE 叢集中執行的私人和公開服務的公開端點。
如要瞭解其他可能遇到的問題,請參閱下列疑難排解文章:
因資源建立權限錯誤,無法建立觸發條件
您會收到類似下列其中一則的錯誤訊息:
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 服務帳戶,Eventarc 就無法管理 Google Kubernetes Engine (GKE) 叢集中的資源,此時就會發生這個錯誤。
如要解決這個問題,請確認 Eventarc 服務帳戶已正確設定,並具備建立資源的適當權限。詳情請按照特定供應商、事件類型和 GKE 目的地的說明操作。
找不到目標叢集,或目標叢集未啟用 GKE 適用的 Workload Identity Federation,因此無法建立觸發條件
您會收到類似下列其中一則的錯誤訊息:
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 叢集,或叢集未啟用 GKE 的 Workload Identity Federation,就會發生這個錯誤。
如要解決這個問題,請確認目標叢集存在,且已啟用 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/standard/docs/gke/troubleshooting.
發生這個錯誤的原因如下:
- 尚未啟用 GKE 目的地。
- 服務帳戶未取得必要角色和權限,因此 Eventarc 無法管理 GKE 目的地事件。
如何解決這個問題:
- 確認已啟用 GKE 目的地:
gcloud eventarc gke-destinations init
- 確認 Eventarc 服務帳戶已設定適當的權限,可建立資源。如要進一步瞭解如何將適當角色授予服務帳戶,請按照「準備建立觸發條件」一節中特定供應商和事件類型的操作說明進行。
- 如果錯誤持續發生,請與支援團隊聯絡。
已成功建立觸發條件,但目標未收到事件
確認觸發條件建立後已過足夠時間。系統最多可能需要兩分鐘的時間才會傳送事件。
如果目標未收到事件,可能是因為從 Pub/Sub 傳送至目標的事件遭到捨棄:
為確保事件不會遭到捨棄,請設定 Pub/Sub 訂閱重試政策,或將未傳送的訊息轉送至無效信件主題 (也稱為無效信件佇列)。
設定無法寄送的郵件主題前,請先擷取觸發條件的主題和訂閱項目:
gcloud eventarc triggers describe TRIGGER \ --location=LOCATION
更改下列內容:
TRIGGER
:觸發條件的 ID 或完整 ID。LOCATION
:Eventarc 觸發條件的位置。
如果觸發程序仍無法運作,請檢查 Eventarc 的事件轉送器元件狀態,確認是否已正確部署:
- 列出名稱中含有
event-forwarder
的所有 Pod,找出叢集命名空間: 輸出結果會與下列內容相似:kubectl get pods --all-namespaces | grep event-forwarder
命名空間的前 30 個字元應與您建立的 Eventarc 觸發程序名稱相符,並加上雜湊,以區分開頭 30 個字元相同的觸發程序。event-forwarder-namespace-hash1 event-forwarder-hash1 1/1 Running 0 5d2h event-forwarder-namespace-hash2 event-forwarder-hash2 1/1 Running 0 2d2h
- 擷取部署作業詳細資料:
kubectl get deployments -n EVENT_FORWARDER_NAMESPACE event-forwarder
- 擷取 Pod 詳細資料:
kubectl describe pod -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
- 列印 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"}
- 列出名稱中含有
相關資訊
- 進一步瞭解 GKE 適用的 Eventarc。
- 如需其他協助,請參閱「取得支援」一文。