Eventarc 觸發條件會宣告您對特定事件或一組事件感興趣。您可以指定觸發條件的篩選器 (包括事件來源),以及在 GKE 叢集中執行的目標 Google Kubernetes Engine (GKE) 服務,藉此設定事件路由。請注意,目標只能包含在 (公開或私有) GKE 叢集中執行的服務,且這些服務必須有公開端點。如要透過私有端點將事件轉送至 GKE 叢集中的服務,請將事件轉送至內部 HTTP 端點。
Eventarc 會透過 HTTP 要求,以 CloudEvents 格式將事件傳送至事件接收器。
請參閱下列操作說明,瞭解如何設定事件轉送,將直接Cloud Speech-to-Text 事件觸發的事件轉送至 GKE 服務。詳情請參閱支援的直接事件清單。
事前準備
您必須在目的地服務執行的 GKE 叢集上,啟用 Workload Identity Federation for GKE。您必須使用 Workload Identity Federation for GKE,才能正確設定事件轉送器。此外,這項功能安全性較高,且更易於管理,因此建議您使用這項功能,從 GKE 中執行的應用程式存取Google Cloud 服務。
Workload Identity Federation for GKE
在 GKE 上執行的應用程式可能需要存取Google Cloud API。透過 Workload Identity Federation for 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 開啟
StreamingPull
連線,連線至觸發事件傳輸工具 (Pub/Sub 主題和訂閱項目),並在事件可用時接收事件。並將事件轉換為正確的 CloudEvents 格式,然後編碼並以
HTTP POST
要求的形式傳送至目標 GKE 服務。
Eventarc 服務代理需要權限才能執行及定期更新 gke-forwarder
執行個體。您只需要為每項專案授予一次權限即可。詳情請參閱本文的「啟用 GKE 目的地」一節。
準備建立觸發條件
針對以 GKE 服務為目標的每個觸發條件,Eventarc 都會建立事件轉送器元件。Eventarc 需要權限,才能在 GKE 叢集中安裝元件及管理資源。為 GKE 目的地建立 Eventarc 觸發程序前,請務必完成下列工作。
主控台
在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。
啟用 Eventarc、Eventarc Publishing、Google Kubernetes Engine 和 Resource Manager API。
如有需要,請啟用與直接事件相關的 API。舉例來說,如要使用 Cloud Speech-to-Text 活動,請啟用Cloud Speech-to-Text API。
如果沒有,請建立使用者代管的服務帳戶,然後授予必要角色和權限,讓 Eventarc 管理目標服務的事件。
前往 Google Cloud 控制台的「建立服務帳戶」頁面。
選取專案。
在「Service account name」(服務帳戶名稱) 欄位中輸入名稱。 Google Cloud 控制台會根據這個名稱填入「服務帳戶 ID」欄位。
在「服務帳戶說明」欄位中輸入說明。例如:
Service account for event trigger
。按一下「建立並繼續」。
如要提供適當的存取權,請在「Select a role」(請選擇角色) 清單中,選取要授予服務帳戶的必要 Identity and Access Management (IAM) 角色。詳情請參閱「GKE 目標的角色和權限」。
如要新增其他角色,請按一下「新增其他角色」
,然後新增每個其他角色。按一下「繼續」。
按一下「完成」,即可完成帳戶建立程序。
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 Publishing、Google Kubernetes Engine 和 Resource Manager API。
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ container.googleapis.com \ cloudresourcemanager.googleapis.com
如有需要,請啟用與直接事件相關的 API。舉例來說,如要啟用 Cloud Speech-to-Text 活動,請啟用
speech.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 建立 Eventarc 觸發條件,或透過 Google Cloud 控制台建立。
主控台
- 在 Google Cloud 控制台中,前往 Eventarc「Triggers」(觸發條件) 頁面。
- 按一下「建立觸發條件」 。
- 輸入觸發條件名稱。
這是觸發條件的 ID,開頭必須是英文字母。最多可包含 63 個小寫英文字母、數字或連字號。
- 在「Trigger type」(觸發條件類型) 中,選取「Google sources」(Google 來源)。
- 在「Event provider」(事件提供者) 清單中,選取「Cloud Speech-to-Text」。
請注意,相關Google Cloud 文件中使用的事件提供者名稱可能沒有 Cloud 或 Google Cloud 前置字元。舉例來說,在控制台中,「Memorystore for Redis」稱為「Memorystore for Redis」Google Cloud 。
- 在「Event type」(事件類型) 清單中,從「Direct」(直接) 事件選取事件類型。
- 如要指定事件酬載的編碼,請在「事件資料內容類型」清單中,選取「application/json」或「application/protobuf」。
請注意,以 JSON 格式設定的事件酬載會比以 Protobuf 格式設定的酬載大。視事件目的地和事件大小限制而定,這可能會影響可靠性。詳情請參閱「已知問題」。
- 在「Region」(區域) 清單中選取「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=EVENT_FILTER_TYPE" \ --event-filters="COLLECTION_ID=RESOURCE_ID" \ --event-filters-path-pattern="COLLECTION_ID=PATH_PATTERN" \ --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
更改下列內容:
TRIGGER
:觸發條件的 ID 或完整 ID--location
旗標必須為global
。詳情請參閱Eventarc 位置。DESTINATION_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_FILTER_TYPE
:事件的 ID。 方法的 API 呼叫成功時,系統會產生事件。如果是長時間執行的作業,系統只會在作業結束時產生事件,且僅限動作順利完成的情況。如需支援的事件類型清單,請參閱「Eventarc 支援的 Google 事件類型」。
COLLECTION_ID
(選用):可做為事件篩選器的資源元件,且為下列其中之一:customclass
phraseset
RESOURCE_ID
:資源的 ID,用做相關聯集合的篩選值。詳情請參閱「資源 ID」。PATH_PATTERN
:篩選資源時要套用的路徑模式。-
EVENT_DATA_CONTENT_TYPE
:(選填) 事件酬載的編碼。 可以是application/json
或application/protobuf
。預設編碼為application/json
。請注意,以 JSON 格式設定的事件酬載會比以 Protobuf 格式設定的酬載大。視事件目的地和事件大小限制而定,這可能會影響可靠性。詳情請參閱「已知問題」。
SERVICE_ACCOUNT_NAME
:使用者管理的服務帳戶名稱。PROJECT_ID
:您的 Google Cloud 專案 ID。
注意:
--event-filters="type=EVENT_FILTER_TYPE"
旗標為必要旗標。如未設定其他事件篩選器,系統會比對所有資源的事件。EVENT_FILTER_TYPE
建立後即無法變更。如要變更EVENT_FILTER_TYPE
,請建立新觸發條件並刪除舊觸發條件。- 每個觸發條件可以有多個事件篩選器,以逗號分隔,放在一個
--event-filters
=[ATTRIBUTE
=VALUE
,...] 標記中,也可以重複標記來新增更多篩選器。只有符合所有篩選條件的事件會傳送至目的地。不支援萬用字元和規則運算式,但使用--event-filters-path-pattern
旗標時,可以定義資源路徑模式。 --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.cloud.speech.phraseSet.v1.created" \ --event-filters-path-pattern="phraseset=my-phraseset-*" \ --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
這項指令會為標示為 google.cloud.speech.phraseSet.v1.created
的事件建立名為 helloworld-trigger
的觸發條件,並比對以 my-phraseset-
開頭的 phraseset
ID 事件。
Terraform
您可以使用 Terraform 為 GKE 目的地建立觸發條件。詳情請參閱「使用 Terraform 建立觸發條件」。
列出觸發條件
如要確認是否已建立觸發程序,請使用 Google Cloud CLI 或 Google Cloud 控制台列出 Eventarc 觸發程序。
主控台
在 Google Cloud 控制台中,前往 Eventarc「Triggers」(觸發條件) 頁面。
這個頁面會列出所有位置的觸發條件,並包含名稱、區域、事件供應商、目的地等詳細資料。
如要篩選觸發條件,請按照下列步驟操作:
- 按一下「篩選器」 或「篩選器觸發條件」欄位。
- 在「屬性」清單中,選取要用來篩選觸發條件的選項。
您可以選取單一屬性,或使用邏輯運算子
OR
新增更多屬性。如要排序觸發條件,請按一下任何支援的欄標題旁的「排序」
。
gcloud
執行下列指令來列出觸發條件:
gcloud eventarc triggers list --location=-
這個指令會列出所有位置的觸發條件,並包含名稱、類型、目的地和狀態等詳細資料。