העברת טריגרים של Pub/Sub מ-Events for Cloud Run for Anthos ל-Eventarc

אתם יכולים להעביר טריגרים של אירועים כך ששירות Google Kubernetes Engine ‏ (GKE) (כולל שירותי Knative) יוכל לקבל אירועים של Pub/Sub באמצעות Eventarc. במדריך הזה אנחנו יוצאים מנקודת הנחה שאתם מעבירים טריגרים קיימים של אירועים וששירות GKE שלכם פועל באשכול GKE. צריך להריץ העברה לכל אשכול.

במסלול ההעברה הזה נמנע אובדן של אירועים, ומצומצמת הכפילות שלהם.

ההעברה כוללת את הפעולות הבאות:

  1. כדי לאפשר ל-Eventarc לנהל משאבים באשכול GKE, צריך להפעיל יעדי GKE.
  2. במידת הצורך, מפעילים Workload Identity באשכול GKE שבו פועל שירות GKE של היעד.
  3. זיהוי טריגרים קיימים של אירועים.
  4. יוצרים טריגר Eventarc שמפנה לאותו שירות GKE כמו הטריגר הקיים.
  5. מוודאים שאירועים מועברים על ידי טריגר Eventarc כמצופה.
  6. מוחקים את טריגר האירוע המקורי ומבצעים ניקוי אחרי ההעברה.

לפני שמתחילים

במדריך הזה אנחנו יוצאים מנקודת הנחה שכבר יש לכם:

הגדרת סביבת שורת הפקודה

כדי להגדיר את כלי שורת הפקודה gcloud ו-kubectl:

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. נכנסים באמצעות החשבון:

    gcloud auth login
  3. מגדירים את הגדרות ברירת המחדל של ה-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

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט
    • ‫CLUSTER_NAME: השם של האשכול
    • ‫CLUSTER_LOCATION: כל אזור שבו יש תמיכה ב-GKE, לדוגמה: us-central1-a.
    • ‫LOCATION: מיקום לטריגר Eventarc. לדוגמה: us-central1.
  4. מפעילים את ממשקי ה-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
  5. מתקינים את כלי שורת הפקודה kubectl:

    gcloud components install kubectl
  6. עדכון של רכיבים מותקנים ב-CLI של gcloud:

    gcloud components update

הפעלת יעדים ב-GKE

כדי לאפשר ל-Eventarc לנהל משאבים באשכול GKE, צריך להפעיל יעדי GKE ולקשר את חשבון השירות של Eventarc לתפקידים הנדרשים.

  1. מפעילים יעדי GKE ל-Eventarc:

    gcloud eventarc gke-destinations init
  2. בהנחיה לקשירת התפקידים הנדרשים, מזינים y.

    התפקידים הבאים מקושרים:

    • roles/compute.viewer
    • roles/container.developer
    • roles/iam.serviceAccountAdmin

הפעלת איחוד זהויות של עומסי עבודה ל-GKE באשכול

אם איחוד זהויות של עומסי עבודה ל-GKE כבר מופעל באשכול, אפשר לדלג על השלב הזה.

איחוד זהויות של עומסי עבודה ל-GKE הוא הדרך המומלצת לגשת ל Google Cloud שירותים מאפליקציות שפועלות ב-GKE, כי הוא מספק מאפייני אבטחה וניהול משופרים. היא נדרשת גם כדי להעביר אירועים של GKE באמצעות Eventarc.

כדי להפעיל איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE באשכול קיים, אפשר לעיין במאמר שימוש ב-Workload Identity.

זיהוי טריגרים קיימים של אירועים

לפני שמעבירים טריגרים קיימים של אירועים, צריך לאחזר את פרטי הטריגר.

  1. מציגים את רשימת טריגרי האירועים הקיימים באשכול 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
    
  2. כדי ליצור את טריגר 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.

  1. יוצרים Google Cloud חשבון שירות (GSA):

    TRIGGER_GSA=SERVICE_ACCOUNT_NAME
    gcloud iam service-accounts create $TRIGGER_GSA

    מחליפים את SERVICE_ACCOUNT_NAME בשם באורך של 6 עד 30 תווים. הוא יכול להכיל תווים אלפאנומריים באותיות קטנות ומקפים.

  2. מקצים לחשבון השירות את התפקידים 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"
  3. יוצרים טריגר חדש של 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.

  4. מוודאים שהטריגר נוצר בהצלחה:

    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

אפשר גם להשתמש בתרחיש הבא כדי לקבל הנחיות לגבי המקום שבו מקבל האירוע יכול להציג את נתוני האירוע:

  1. מפרסמים הודעה בנושא Pub/Sub:

    gcloud pubsub topics publish TOPIC_ID \
      --message "Hello, World!"
    
  2. מוודאים שהאירוע הועבר בהצלחה. לדוגמה, אפשר לעיין ביומנים של שירות 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, אפשר למחוק את טריגר האירוע המקורי.

  1. מוחקים את טריגר האירוע המקורי:

    gcloud beta events triggers delete TRIGGER_NAME \
      --platform gke \
      --namespace EVENTS_NAMESPACE \
      --quiet

העברתם טריגר קיים של Knative serving אל Eventarc.

המאמרים הבאים