Anda dapat memigrasikan pemicu peristiwa sehingga layanan Google Kubernetes Engine (GKE) (termasuk layanan penayangan Knative) dapat menerima peristiwa Pub/Sub menggunakan Eventarc. Panduan ini mengasumsikan bahwa Anda memigrasikan pemicu peristiwa yang ada dan layanan GKE Anda berjalan di cluster GKE. Migrasi harus dijalankan untuk setiap cluster.
Jalur migrasi ini menghindari hilangnya peristiwa sekaligus meminimalkan duplikasinya.
Migrasi ini melibatkan hal-hal berikut:
- Untuk mengizinkan Eventarc mengelola resource di cluster GKE, aktifkan tujuan GKE.
- Jika perlu, aktifkan Workload Identity untuk cluster GKE yang menjalankan layanan GKE target Anda.
- Identifikasi pemicu peristiwa yang ada.
- Buat pemicu Eventarc yang mengarah ke layanan GKE yang sama dengan pemicu yang ada.
- Pastikan pemicu Eventarc mengirimkan peristiwa seperti yang diharapkan.
- Hapus pemicu peristiwa asli dan bersihkan setelah migrasi.
Sebelum memulai
Panduan ini mengasumsikan bahwa Anda sudah:
Menyiapkan lingkungan command line
Untuk menyiapkan alat command line gcloud
dan kubectl
:
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.
Login menggunakan akun Anda:
gcloud auth login
Tetapkan setelan default untuk gcloud CLI:
gcloud config set project PROJECT_ID gcloud config set run/cluster CLUSTER_NAME gcloud config set run/cluster_location CLUSTER_LOCATION gcloud config set run/platform gke gcloud config set eventarc/location LOCATION
Ganti kode berikut:
Aktifkan API berikut untuk project:
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
Instal alat command line
kubectl
:gcloud components install kubectl
Update komponen gcloud CLI yang diinstal:
gcloud components update
Mengaktifkan tujuan GKE
Untuk mengizinkan Eventarc mengelola resource di cluster GKE, aktifkan tujuan GKE, dan ikat akun layanan Eventarc dengan peran yang diperlukan.
Aktifkan tujuan GKE untuk Eventarc:
gcloud eventarc gke-destinations init
Pada perintah untuk mengikat peran yang diperlukan, masukkan
y
.Peran berikut terikat:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Mengaktifkan Workload Identity Federation untuk GKE di cluster
Jika Workload Identity Federation untuk GKE sudah diaktifkan di cluster, Anda dapat melewati langkah ini.
Workload Identity Federation untuk GKE adalah cara yang direkomendasikan untuk mengakses Google Cloud layanan dari aplikasi yang berjalan dalam GKE karena properti keamanan dan pengelolaannya yang lebih baik. Fungsi ini juga diperlukan untuk meneruskan peristiwa GKE menggunakan Eventarc.
Untuk mengaktifkan Workload Identity Federation untuk GKE di cluster yang ada, lihat Menggunakan Workload Identity.
Mengidentifikasi pemicu peristiwa yang ada
Sebelum memigrasikan pemicu peristiwa yang ada, Anda harus mengambil detail pemicu.
Cantumkan pemicu peristiwa yang ada untuk cluster GKE:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Ganti
EVENTS_NAMESPACE
dengan namespace broker peristiwa Anda.Outputnya mirip dengan hal berikut ini:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Anda memerlukan ID topik untuk membuat pemicu Eventarc. Ambil ID topik untuk pemicu peristiwa yang ada:
gcloud beta events triggers describe TRIGGER_ID \ --platform gke --namespace EVENTS_NAMESPACE \ --format="flattened(serialized_source.spec.topic,serialized_trigger.spec.filter.attributes.type,serialized_trigger.spec.subscriber.ref.name,serialized_trigger.spec.subscriber.ref.namespace)"
Ganti
TRIGGER_ID
dengan ID pemicu peristiwa yang ada atau ID yang sepenuhnya memenuhi syarat.Outputnya mirip dengan hal berikut ini:
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Membuat pemicu Eventarc untuk mengganti pemicu yang ada
Sebelum membuat pemicu Eventarc, siapkan akun layanan yang dikelola pengguna dan berikan peran tertentu agar Eventarc dapat mengelola peristiwa untuk tujuan GKE.
Buat akun layanan (GSA) Google Cloud :
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
Ganti
SERVICE_ACCOUNT_NAME
dengan nama yang terdiri dari 6 hingga 30 karakter. Nama ini dapat berisi karakter alfanumerik huruf kecil dan tanda hubung.Berikan peran
pubsub.subscriber
danmonitoring.metricWriter
ke akun layanan:PROJECT_ID=$(gcloud config get-value project) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
Buat pemicu Eventarc baru berdasarkan konfigurasi pemicu peristiwa yang ada. Semua argumen, termasuk layanan, cluster, dan ID topik tujuan, harus cocok dengan pemicu peristiwa yang ada.
gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location LOCATION \ --destination-gke-service=DESTINATION_SERVICE \ --destination-gke-cluster=CLUSTER_NAME \ --destination-gke-location=CLUSTER_LOCATION \ --destination-gke-namespace=EVENTS_NAMESPACE \ --destination-gke-path=/ \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
Ganti
EVENTARC_TRIGGER_NAME
dengan nama untuk pemicu Eventarc baru dan TOPIC_ID dengan ID topik Pub/Sub yang Anda ambil sebelumnya.Tindakan ini akan membuat pemicu Eventarc untuk ID topik Pub/Sub.
Konfirmasi bahwa pemicu berhasil dibuat:
gcloud eventarc triggers list
Outputnya mirip dengan hal berikut ini:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
Menguji migrasi dan memverifikasi output
Untuk menguji migrasi, picu peristiwa pengujian dengan memublikasikan ke topik Pub/Sub, lalu pastikan ada setidaknya satu peristiwa yang dikirim untuk setiap pemicu peristiwa dan pemicu Eventarc yang ada.
Misalnya, output setelah memicu peristiwa pengujian akan diduplikasi, dan akan mirip dengan berikut ini:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
Anda juga dapat menggunakan skenario berikut sebagai panduan untuk penerima peristiwa yang dapat menampilkan data peristiwa:
Publikasikan pesan ke topik Pub/Sub:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Verifikasi peristiwa dan pengirimannya yang berhasil. Misalnya, lihat log layanan GKE penerima:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
Output dari kedua pemicu mirip dengan yang berikut ini, dengan perbedaan hanya pada
Context Attributes
danExtensions
. Data pesan sebenarnya, kecuali datasubscription
, harus identik sehingga tidak ada perubahan penerima peristiwa yang diperlukan setelah bermigrasi ke Eventarc.Peristiwa Eventarc:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z datacontenttype: application/json Data, { "subscription": "projects/project-id/subscriptions/eventarc-us-central1-eventarc-trigger-name-sub-567", "message": { "data": "V29ybGQ=", "messageId": "2759155988927083", "publishTime": "2021-07-22T17:47:19.964Z" } }
Peristiwa penayangan Knative:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/pubsub/v1/data.proto datacontenttype: application/json Extensions, knativearrivaltime: 2021-07-22T17:47:20.723302362Z knsourcetrigger: link0.09767362059083662 traceparent: 00-f3cc6d754d361a0e49e83e5973fa3565-b4a20ef4ecffe96b-00 Data, { "subscription": "cre-src_events_source-for-trigger-name_5ffa9638-8cab-4010-900a-2edb275d9eaf", "message": { "messageId": "2759155988927083", "data": "V29ybGQ=", "publishTime": "2021-07-22T17:47:19.964Z" } }
Membersihkan setelah migrasi
Setelah menguji dan memverifikasi migrasi pemicu ke Eventarc, Anda dapat menghapus pemicu peristiwa asli.
Hapus pemicu peristiwa asli:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Anda telah memigrasikan pemicu penayangan Knative yang ada ke Eventarc.