אתם יכולים להעביר טריגרים של אירועים כך ששירות Google Kubernetes Engine (GKE) (כולל שירותי Knative) יוכל לקבל אירועים של Pub/Sub באמצעות Eventarc. במדריך הזה אנחנו יוצאים מנקודת הנחה שאתם מעבירים טריגרים קיימים של אירועים וששירות GKE שלכם פועל באשכול GKE. צריך להריץ העברה לכל אשכול.
במסלול ההעברה הזה נמנע אובדן של אירועים, ומצומצמת הכפילות שלהם.
ההעברה כוללת את הפעולות הבאות:
- כדי לאפשר ל-Eventarc לנהל משאבים באשכול GKE, צריך להפעיל יעדי GKE.
- במידת הצורך, מפעילים Workload Identity באשכול GKE שבו פועל שירות GKE של היעד.
- זיהוי טריגרים קיימים של אירועים.
- יוצרים טריגר Eventarc שמפנה לאותו שירות GKE כמו הטריגר הקיים.
- מוודאים שאירועים מועברים על ידי טריגר Eventarc כמצופה.
- מוחקים את טריגר האירוע המקורי ומבצעים ניקוי אחרי ההעברה.
לפני שמתחילים
במדריך הזה אנחנו יוצאים מנקודת הנחה שכבר יש לכם:
הגדרת סביבת שורת הפקודה
כדי להגדיר את כלי שורת הפקודה gcloud ו-kubectl:
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
נכנסים באמצעות החשבון:
gcloud auth login
מגדירים את הגדרות ברירת המחדל של ה-CLI של gcloud:
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
מחליפים את מה שכתוב בשדות הבאים:
מפעילים את ממשקי ה-API הבאים בפרויקט:
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
מתקינים את כלי שורת הפקודה
kubectl:gcloud components install kubectl
עדכון של רכיבים מותקנים ב-CLI של gcloud:
gcloud components update
הפעלת יעדים ב-GKE
כדי לאפשר ל-Eventarc לנהל משאבים באשכול GKE, צריך להפעיל יעדי GKE ולקשר את חשבון השירות של Eventarc לתפקידים הנדרשים.
מפעילים יעדי GKE ל-Eventarc:
gcloud eventarc gke-destinations init
בהנחיה לקשירת התפקידים הנדרשים, מזינים
y.התפקידים הבאים מקושרים:
roles/compute.viewerroles/container.developerroles/iam.serviceAccountAdmin
הפעלת איחוד זהויות של עומסי עבודה ל-GKE באשכול
אם איחוד זהויות של עומסי עבודה ל-GKE כבר מופעל באשכול, אפשר לדלג על השלב הזה.
איחוד זהויות של עומסי עבודה ל-GKE הוא הדרך המומלצת לגשת ל Google Cloud שירותים מאפליקציות שפועלות ב-GKE, כי הוא מספק מאפייני אבטחה וניהול משופרים. היא נדרשת גם כדי להעביר אירועים של GKE באמצעות Eventarc.
כדי להפעיל איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE באשכול קיים, אפשר לעיין במאמר שימוש ב-Workload Identity.
זיהוי טריגרים קיימים של אירועים
לפני שמעבירים טריגרים קיימים של אירועים, צריך לאחזר את פרטי הטריגר.
מציגים את רשימת טריגרי האירועים הקיימים באשכול GKE:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
מחליפים את
EVENTS_NAMESPACEבמרחב השמות של ברוקר האירועים.הפלט אמור להיראות כך:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
כדי ליצור את טריגר Eventarc, צריך את מזהה הנושא. מאחזרים את מזהה הנושא של טריגר האירוע הקיים:
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)"
מחליפים את
TRIGGER_IDבמזהה של טריגר האירוע הקיים או במזהה מוגדר במלואו.הפלט אמור להיראות כך:
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
יצירת טריגר Eventarc להחלפת הטריגר הקיים
לפני שיוצרים את טריגר Eventarc, צריך להגדיר חשבון שירות בניהול המשתמש ולהעניק לו תפקידים ספציפיים, כדי ש-Eventarc יוכל לנהל אירועים ליעדי GKE.
יוצרים Google Cloud חשבון שירות (GSA):
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
מחליפים את
SERVICE_ACCOUNT_NAMEבשם באורך של 6 עד 30 תווים. הוא יכול להכיל תווים אלפאנומריים באותיות קטנות ומקפים.מקצים לחשבון השירות את התפקידים
pubsub.subscriberו-monitoring.metricWriter: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"
יוצרים טריגר חדש של Eventarc על סמך ההגדרות של טריגר האירוע הקיים. כל הארגומנטים, כולל שירות היעד, האשכול ומזהה הנושא, צריכים להיות זהים לאלה של טריגר האירוע הקיים.
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
מחליפים את
EVENTARC_TRIGGER_NAMEבשם של טריגר Eventarc החדש ואת TOPIC_ID במזהה הנושא של Pub/Sub שאוחזר קודם.הפעולה הזו יוצרת טריגר Eventarc למזהה של נושא Pub/Sub.
מוודאים שהטריגר נוצר בהצלחה:
gcloud eventarc triggers list
הפלט אמור להיראות כך:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
בדיקת ההעברה ואימות התוצאה
כדי לבדוק את ההעברה, מפעילים אירוע בדיקה על ידי פרסום בנושא Pub/Sub, ואז מוודאים שיש לפחות אירוע אחד שמועבר לכל אחד מטריגרי האירועים הקיימים ומטריגרי Eventarc, בהתאמה.
לדוגמה, הפלט אחרי הפעלה של אירוע בדיקה ישוכפל ויהיה דומה לזה:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
אפשר גם להשתמש בתרחיש הבא כדי לקבל הנחיות לגבי המקום שבו מקבל האירוע יכול להציג את נתוני האירוע:
מפרסמים הודעה בנושא Pub/Sub:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
מוודאים שהאירוע הועבר בהצלחה. לדוגמה, אפשר לעיין ביומנים של שירות GKE שמקבל את הבקשה:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
הפלט משני הטריגרים דומה לזה שמופיע בהמשך, עם הבדלים רק ב-
Context Attributesוב-Extensions. נתוני ההודעה בפועל, למעט נתוניsubscription, צריכים להיות זהים כדי שלא יהיה צורך בשינויים במקבל האירוע אחרי המעבר ל-Eventarc.אירוע 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" } }אירוע של מילוי בקשות מסוג 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" } }
ניקוי אחרי ההעברה
אחרי שבודקים ומאמתים את ההעברה של הטריגר ל-Eventarc, אפשר למחוק את טריגר האירוע המקורי.
מוחקים את טריגר האירוע המקורי:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
העברתם טריגר קיים של Knative serving אל Eventarc.