本页面介绍如何解决在使用 Eventarc for GKE 时可能遇到的问题,包括在 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 目标的说明操作。
由于找不到目标集群或目标集群未启用 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 目标的事件所需的角色和权限。
要解决此问题,请执行以下操作:
- 确保您已启用 GKE 目标:
gcloud eventarc gke-destinations init
- 确保 Eventarc 服务账号已配置创建资源所需的权限。如需详细了解如何向服务账号授予适当的角色,请按照“准备创建触发器”中特定提供商和事件类型的说明操作。
- 如果此错误仍然存在,请与支持团队联系。
已成功创建触发器,但目标未收到事件
确认创建触发器以后等待了足够长的时间。触发器最长可能需要两分钟才能发送事件。
如果事件未传送到目标,则从 Pub/Sub 发送到目标的事件可能会被丢弃:
为确保事件不被丢弃,请设置 Pub/Sub 订阅重试政策或将未传送的消息转发到死信主题(也称为死信队列)。
在设置死信主题之前,请检索触发器的主题和订阅:
gcloud eventarc triggers describe TRIGGER \ --location=LOCATION
替换以下内容:
TRIGGER
:触发器的 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"}
- 通过列出名称中包含
相关信息
- 详细了解 Eventarc for GKE。
- 如需获取其他帮助,请参阅获取支持。