本頁面說明如何解決使用 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 管理 Google Kubernetes Engine (GKE) 叢集資源時所需的 Eventarc 服務帳戶,就會發生這個錯誤。
如要解決這個問題,請確認 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.
發生這個錯誤的可能原因如下:
- 尚未啟用 GKE 目的地。
- 服務帳戶未獲得必要角色和權限,因此 Eventarc 無法管理 GKE 目的地事件。
- 節點集區尚未啟用 Workload Identity Federation for GKE。
如何解決這個問題:
- 確認已啟用 GKE 目的地:
如要瞭解詳情,請按照「啟用 GKE 目的地」一節中特定供應商和事件類型的指示操作。
gcloud eventarc gke-destinations init
- 確認 Eventarc 服務帳戶已設定適當的權限,可建立資源。如要進一步瞭解如何為服務帳戶授予適當的角色,請按照「準備建立觸發條件」一節中特定供應商和事件類型的指示操作。
- 如果看到事件轉送器的就緒探測失敗,表示節點上的 kubelet 無法連線至事件轉送器容器通訊埠。如果節點集區未啟用 Workload Identity Federation for GKE,就可能發生這種情況。您可以在現有節點集區上,手動啟用 GKE 適用的工作負載身分聯盟。啟用這項功能可確保事件轉送器 Pod 使用正確的服務帳戶,並具備必要權限。
- 如果錯誤持續發生,請與支援團隊聯絡。
已成功建立觸發條件,但目標未收到事件
確認觸發條件建立後已過足夠時間。系統最多可能需要兩分鐘才會傳送事件。
如果事件未傳送至目標,從 Pub/Sub 傳送至目標的事件可能遭到捨棄:
為確保事件不會遭到捨棄,請設定 Pub/Sub 訂閱項目重試政策,或將無法傳送的訊息轉送至 dead-letter 主題 (也稱為無效信件佇列)。
設定 dead-letter 主題前,請先擷取觸發程序的相關主題和訂閱項目:
gcloud eventarc triggers describe TRIGGER \ --location=LOCATION
更改下列內容:
TRIGGER:觸發條件的 ID 或完整合格的 ID。LOCATION:Eventarc 觸發條件的位置。
如果觸發程序仍無法運作,請檢查 Eventarc 的事件轉送器元件狀態,確認是否已正確部署:
- 列出名稱中含有「-canary」
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"}
- 列出名稱中含有「-canary」
相關資訊
- 進一步瞭解 GKE 適用的 Eventarc。
- 如需其他協助,請參閱「取得支援」。