Eventarc 觸發條件會宣告您對特定事件或一組事件感興趣。您可以為觸發事件指定篩選器 (包括事件來源),以及在 GKE 叢集中執行的目標 Google Kubernetes Engine (GKE) 服務,藉此設定事件路由。請注意,目標只能包含在 (公開或私人) GKE 叢集中執行的服務,且該叢集必須有公開端點。如要指定使用私人端點的 GKE 叢集中的服務,請將事件轉送至內部 HTTP 端點。
Eventarc 會透過 HTTP 要求,以 CloudEvents 格式將事件傳送至事件接收器。
本操作說明將說明如何將事件路由設定為由直接Firebase Remote Config 事件觸發的 GKE 服務。詳情請參閱支援的直接事件清單。
事前準備
您必須在目的地服務執行的 GKE 叢集上啟用 Workload Identity Federation for GKE。您必須使用 Workload Identity Federation for GKE,才能正確設定事件轉送器。由於這項功能的安全性和可管理性較高,因此建議您使用這項功能,從在 GKE 中執行的應用程式存取Google Cloud 服務。
Workload Identity Federation for GKE
在 GKE 上執行的應用程式可能需要存取Google Cloud API。GKE 適用的工作負載身分聯盟可讓 GKE 叢集中的 Kubernetes 服務帳戶充當 IAM 服務帳戶。使用已設定 Kubernetes 服務帳戶的 Pod,會在存取 Google Cloud API 時自動以 IAM 服務帳戶身分進行驗證。使用 GKE 適用的工作負載身分聯盟,即可為叢集內的每個應用程式指派不重複的精細身分與授權。請注意,您必須將特定權限授予 Eventarc 觸發事件的服務帳戶。請參閱本文件中的建立服務帳戶步驟。
如要進一步瞭解如何在 GKE 叢集中啟用及設定 Workload Identity Federation for GKE,請參閱「使用 Workload Identity Federation for GKE」。
事件轉送器
Eventarc 的事件轉送器會從 Eventarc 提取新事件,並轉送至 GKE 目的地。這個元件可充當 Pub/Sub 傳輸層和 GKE 服務之間的仲介。這項功能適用於現有服務,也支援信號傳遞服務 (包括未在完全代管叢集外公開的服務),同時簡化設定和維護作業。在網路層級,如要接收 GKE 服務中的事件,您不需要將服務開放給外部流量,因為所有事件都是從位於同一個 GKE 叢集的來源傳送。
請注意,Eventarc 會管理事件轉送器的生命週期,如果您不小心刪除事件轉送器,Eventarc 會還原這個元件。
針對每個指向 GKE 目的地的觸發事件,事件轉送器 (特別設定的 gke-forwarder
Pod) 會執行以下操作:
它會使用 Pub/Sub API 開啟至觸發運送工具 (Pub/Sub 主題和訂閱項目) 的
StreamingPull
連線,並在事件可用時接收事件。它會將事件轉換為正確的 CloudEvents 格式,並將其編碼為
HTTP POST
要求,傳送至目標 GKE 服務。
Eventarc 服務代理需要權限才能執行並定期更新 gke-forwarder
例項。每個專案都必須授予這項權限一次。如需詳細資訊,請參閱本文件中的「啟用 GKE 目的地」一節。
準備建立觸發條件
針對每個指定 GKE 服務的觸發條件,Eventarc 都會建立事件轉送器元件。Eventarc 需要安裝權限,才能在 GKE 叢集中安裝元件及管理資源。為 GKE 目的地建立 Eventarc 觸發事件前,請務必完成下列工作。
主控台
在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。
啟用 Eventarc、Eventarc 發布、Google Kubernetes Engine 和 Resource Manager API。
如有需要,請啟用與直接事件相關的 API。例如,如果是 Firebase Remote Config 事件,請啟用Firebase Remote Config API。
如果您還沒有使用者代管的服務帳戶,請建立這類帳戶,然後授予必要的角色和權限,以便 Eventarc 管理目標服務的事件。
前往 Google Cloud 控制台的「Create service account」(建立服務帳戶) 頁面。
選取專案。
在「Service account name」(服務帳戶名稱) 欄位中輸入名稱。 Google Cloud 控制台會根據這個名稱填入「Service account ID」欄位。
在「服務帳戶說明」欄位中輸入說明。例如:
Service account for event trigger
。按一下「建立並繼續」。
如要提供適當的存取權,請在「Select a role」(請選擇角色) 清單中,選取要授予服務帳戶的必要 Identity and Access Management (IAM) 角色。詳情請參閱「GKE 目標的角色和權限」。
如要新增其他角色,請按一下
「Add another role」(新增其他角色),然後新增其他角色。按一下「繼續」。
如要完成帳戶建立程序,請按一下「完成」。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
啟用 Eventarc、Eventarc 發布、Google Kubernetes Engine 和 Resource Manager API。
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ container.googleapis.com \ cloudresourcemanager.googleapis.com
如有需要,請啟用與直接事件相關的 API。例如,針對 Firebase Remote Config 事件,請啟用
firebaseremoteconfig.googleapis.com
。如果您尚未建立使用者代管的服務帳戶,請建立這類帳戶,然後授予必要的角色和權限,以便 Eventarc 管理目標 GKE 目的地的事件。
建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME
替換為服務帳戶名稱。長度必須介於 6 至 30 個半形字元,可以使用小寫英數字元和破折號。建立服務帳戶後,就無法變更名稱。授予必要的 Identity and Access Management (IAM) 角色或權限。詳情請參閱「GKE 目標的角色和權限」。
啟用 GKE 目的地
如要讓 Eventarc 管理 GKE 叢集中的資源,請啟用 GKE 目的地,並將 Eventarc 服務代理人與必要角色繫結。
為 Eventarc 啟用 GKE 目的地:
gcloud eventarc gke-destinations init
系統提示您繫結必要角色時,請輸入
y
。已綁定下列角色:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
建立觸發條件
您可以使用 Google Cloud CLI 或透過 Google Cloud 主控台建立 Eventarc 觸發條件。
主控台
- 在 Google Cloud 控制台中,前往 Eventarc「Triggers」頁面。
- 按一下 「建立觸發條件」。
- 輸入觸發條件名稱。
這是觸發事件的 ID,開頭必須是英文字母。最多可以包含 63 個小寫英文字母、數字或連字號。
- 在「Trigger type」(觸發條件類型) 中,選取「Google sources」(Google 來源)。
- 在「Event provider」清單中,選取「Firebase Remote Config」。
請注意,相關Google Cloud 說明文件中使用的事件提供者名稱可能沒有 Cloud 或 Google Cloud 前置字串。舉例來說,在控制台中,Memorystore for Redis 會稱為 Google Cloud Memorystore for Redis。
- 在「Event type」清單中,從「Direct」事件中選取事件類型。
- 如要指定事件酬載的編碼方式,請在「事件資料內容類型」清單中選取「application/json」或「application/protobuf」。
請注意,以 JSON 格式編寫的事件酬載比以 Protobuf 格式編寫的酬載大。這可能會影響可靠性,具體取決於事件目的地和事件大小限制。詳情請參閱「已知問題」。
- 在「區域」清單中選取「global (Global)」。
詳情請參閱「Eventarc 位置」。
- 選取要叫用服務或工作流程的服務帳戶。
或者,您也可以建立新的服務帳戶。
這會指定與觸發事件相關聯的 Identity and Access Management (IAM) 服務帳戶電子郵件地址,以及您先前授予 Eventarc 所需的特定角色。
- 在「Event destination」清單中,選取「Kubernetes Engine」。
- 選取服務。
這是接收觸發事件的服務名稱。服務必須與觸發條件位於同一個專案中,且每當事件產生時,就會以 HTTP POST 要求的形式傳送至其根網址路徑 (
/
)。 - 您可以視需要指定要傳送傳入要求的 服務網址路徑。
這是目的地服務中的相對路徑,用於傳送觸發事件。例如:
/
、/route
、route
、route/subroute
。 - 如要新增標籤,您可以選擇按一下 什麼是標籤?」 「新增標籤」。標籤是鍵/值組合,可協助您整理Google Cloud 資源。詳情請參閱「
- 點選「建立」。
建立觸發條件後,就無法修改事件來源篩選器。請改為建立新的觸發條件,並刪除舊的觸發條件。詳情請參閱「管理觸發條件」。
gcloud
您可以執行 gcloud eventarc triggers create
指令,並搭配必要和選用標記來建立觸發條件。
gcloud eventarc triggers create TRIGGER \ --location=global \ --destination-gke-cluster=DESTINATION_GKE_CLUSTER \ --destination-gke-location=DESTINATION_GKE_LOCATION \ --destination-gke-namespace=DESTINATION_GKE_NAMESPACE \ --destination-gke-service=DESTINATION_GKE_SERVICE \ --destination-gke-path=DESTINATION_GKE_PATH \ --event-filters="type=google.firebase.remoteconfig.remoteConfig.v1.updated" \ --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
更改下列內容:
TRIGGER
:觸發條件 ID 或完整修飾 IDDESTINATION_GKE_CLUSTER
:接收事件的目標 GKE 服務正在執行的 GKE 叢集名稱。DESTINATION_GKE_LOCATION
:(選用) 目標 GKE 服務執行所在的 GKE 叢集 Compute Engine 區域。如果未指定,系統會假設叢集是區域叢集,且與觸發事件位於相同區域。DESTINATION_GKE_NAMESPACE
:(選用) 目的地 GKE 服務執行的命名空間。如果未指定,系統會使用default
命名空間。DESTINATION_GKE_SERVICE
:接收觸發事件的 GKE 服務名稱。服務可以位於任何 GKE 支援的位置,且不必與觸發事件位於相同位置。不過,服務必須與觸發事件位於相同專案中,且每次產生事件時,都會以 HTTP POST 要求傳送至其根網址路徑 (/
) 的形式接收事件。DESTINATION_GKE_PATH
:(選用) 您在目的地 GKE 服務上指定的相對路徑,該路徑是觸發事件應傳送的目標。例如:/
、/route
、route
、route/subroute
。-
EVENT_DATA_CONTENT_TYPE
:(選用) 事件酬載的編碼。可以是application/json
或application/protobuf
。預設編碼為application/json
。請注意,以 JSON 格式編寫的事件酬載比以 Protobuf 格式編寫的酬載大。這可能會影響可靠性,具體取決於事件目的地和事件大小限制。詳情請參閱「已知問題」。
SERVICE_ACCOUNT_NAME
:使用者自行管理的服務帳戶名稱。PROJECT_ID
:您的 Google Cloud 專案 ID。
注意:
--location
旗標必須為global
。詳情請參閱「Eventarc 位置」。
- 必須使用
--event-filters
旗標,且類型必須為google.firebase.remoteconfig.remoteConfig.v1.updated
。更新遠端設定範本時,系統會傳送事件。 - 建立觸發條件後,就無法變更事件篩選器類型。如要使用其他事件類型,您必須建立新的觸發條件,並刪除舊的觸發條件。
--service-account
標記可用於指定與觸發事件相關聯的身分與存取權管理 (IAM) 服務帳戶電子郵件。
範例:
gcloud eventarc triggers create helloworld-trigger \ --location=global \ --destination-gke-cluster=gke-events-cluster \ --destination-gke-location=us-central1-a \ --destination-gke-namespace=default \ --destination-gke-service=helloworld-events \ --destination-gke-path=/ \ --event-filters="type=google.firebase.remoteconfig.remoteConfig.v1.updated" \ --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
這個指令會為標示為 google.firebase.remoteconfig.remoteConfig.v1.updated
的事件建立名為 helloworld-trigger
的觸發條件。
Terraform
您可以使用 Terraform 為 GKE 目的地建立觸發事件。詳情請參閱「使用 Terraform 建立觸發條件」一文。
列出觸發條件
您可以使用 Google Cloud CLI 或 Google Cloud 主控台列出 Eventarc 觸發事件,確認是否已建立觸發事件。
主控台
在 Google Cloud 控制台中,前往「Eventarc」「Triggers」(觸發條件) 頁面。
這個頁面會列出所有位置的觸發事件,並提供名稱、區域、事件供應者、目的地等詳細資料。
如要篩選觸發條件,請按照下列步驟操作:
- 按一下 「篩選器」或「篩選器觸發條件」欄位。
- 在「Properties」清單中,選取要用來篩選觸發條件的選項。
您可以選取單一資源,或使用邏輯運算子
OR
新增更多資源。如要排序觸發事件,請按一下任何支援的欄標題旁邊的
「排序」。
gcloud
執行下列指令,列出觸發條件:
gcloud eventarc triggers list --location=-
這個指令會列出所有位置的觸發事件,並提供名稱、類型、目的地和狀態等詳細資料。