קבלת אירועים באמצעות יומני ביקורת של Cloud ‏ (ה-CLI של gcloud)

במדריך למתחילים הזה נסביר איך להגדיר שירות Google Kubernetes Engine ‏ (GKE) כיעד לקבלת אירועים מ-Cloud Storage באמצעות Eventarc.

במדריך למתחילים הזה תלמדו:

  1. מגדירים חשבון שירות כדי ש-Eventarc יוכל לשלוף אירועים ולהעביר אותם ליעד.
  2. יוצרים קטגוריה של Cloud Storage שתשמש כמקור האירועים.
  3. יוצרים אשכול GKE.
  4. מאחלים יעדים ב-GKE ב-Eventarc.
  5. פריסת שירות GKE שמקבל אירועים.
  6. יוצרים טריגר Eventarc ששולח אירועים מ-Cloud Storage לשירות GKE.
  7. מעלים קובץ לקטגוריה של Cloud Storage כדי ליצור אירוע ולראות את האירוע ביומני ה-Pod של GKE.

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  7. התקינו את ה-CLI של Google Cloud.

  8. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  9. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  10. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  11. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  12. מעדכנים את הרכיבים של Google Cloud CLI:
    gcloud components update
  13. מפעילים את ממשקי ה-API של Eventarc,‏ מנהל המשאבים ו-Google Kubernetes Engine:
    gcloud services enable eventarc.googleapis.com \
        cloudresourcemanager.googleapis.com \
        container.googleapis.com
  14. מגדירים את משתני ההגדרה שמשמשים במדריך הזה:
    PROJECT_ID=$(gcloud config get-value project)
    TRIGGER_SA=eventarc-sa
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
  15. אם אתם יוצרי הפרויקט, מוקצה לכם תפקיד הבעלים הבסיסי (roles/owner). כברירת מחדל, תפקיד ניהול הזהויות והרשאות הגישה (IAM) הזה כולל את ההרשאות שנדרשות לגישה מלאה לרוב המשאבים Google Cloud, ואפשר לדלג על השלב הזה.

    אם אתם לא יוצרי הפרויקט, צריך להעניק את ההרשאות הנדרשות בחשבון המשתמש המתאים בפרויקט. לדוגמה, חשבון משתמש יכול להיות חשבון Google (למשתמשי קצה) או חשבון שירות (לאפליקציות ולעומסי עבודה ממוחשבים). מידע נוסף זמין בדף תפקידים והרשאות של יעד האירוע.

    ההרשאות הנדרשות

    כדי לקבל את ההרשאות שדרושות לביצוע ההפעלה המהירה הזו, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

    להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

  16. חשוב לשים לב לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כי תצטרכו לצרף אותו לטריגר של Eventarc כדי לייצג את הזהות של הטריגר למטרות בדיקה. חשבון השירות הזה נוצר באופן אוטומטי אחרי שמפעילים או משתמשים בשירות Google Cloud שמשתמש ב-Compute Engine, והוא בפורמט האימייל הבא:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud. אפשר לראות את מספר הפרויקט בדף Welcome במסוף Google Cloud או על ידי הרצת הפקודה הבאה:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

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

  17. מקצים לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine את התפקיד 'הרשאה לקריאת מינויים ב-Pub/Sub' (roles/pubsub.subscriber) בפרויקט, כדי שהטריגר של Eventarc יוכל לשלוף אירועים מ-Pub/Sub.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/pubsub.subscriber
  18. מקצים את התפקיד 'מקבל אירועים ב-Eventarc' (roles/eventarc.eventReceiver) בפרויקט לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כדי שהטריגר של Eventarc יוכל לקבל אירועים מספקי אירועים.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  19. אם הפעלתם את סוכן השירות של Cloud Pub/Sub ב-8 באפריל 2021 או לפני כן, כדי לתמוך בבקשות push מאומתות של Pub/Sub, צריך להקצות לסוכן השירות את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator). אחרת, התפקיד הזה מוענק כברירת מחדל:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  20. ב-Google Cloud Storage, מפעילים את סוגי היומנים של השירותים הבאים: קריאת אדמין, קריאת נתונים וכתיבת נתונים:

    1. קוראים את מדיניות ה-IAM של הפרויקט ושומרים אותה בקובץ:
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. עורכים את המדיניות בקובץ ‎/tmp/policy.yaml, ומוסיפים או משנים *רק* את ההגדרה של יומני הביקורת Data Access. שימו לב: חובה לשמור את הקטעים `bindings:` ו-`etag:` ללא שינויים. אם לא תעשו זאת, יכול להיות שלא תוכלו להשתמש בפרויקט.
      auditConfigs:
        - auditLogConfigs:
          - logType: ADMIN_READ
          - logType: DATA_WRITE
          - logType: DATA_READ
          service: storage.googleapis.com
        bindings:
        - members:
          - user:EMAIL_ADDRESS
          role: roles/owner
        etag: BwW_bHKTV5U=
        version: 1
      מחליפים את EMAIL_ADDRESS בכתובת האימייל.
    3. כותבים את מדיניות ה-IAM החדשה:
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      אם הפקודה הקודמת מדווחת על התנגשות עם שינוי אחר, צריך לחזור על השלבים האלה, החל מקריאת מדיניות ה-IAM של הפרויקט.

יצירת קטגוריה של Cloud Storage

במדריך למתחילים הזה נעשה שימוש ב-Cloud Storage כמקור האירועים. יוצרים קטגוריה של Cloud Storage:

gcloud storage buckets create  gs://events-quickstart-$(gcloud config get-value project) --location=us-central1

אחרי שיוצרים את מקור האירועים, אפשר לפרוס את שירות מקלט האירועים ב-GKE.

יצירת אשכול GKE

אשכול GKE מורכב לפחות ממכונת מישור בקרה אחת של האשכול ומכמה מכונות worker שנקראות צמתים. צמתים הם מכונות וירטואליות (VM) של Compute Engine שמריצות את תהליכי Kubernetes שנדרשים כדי שהן יהיו חלק מהאשכול. אתם פורסים אפליקציות באשכולות, והאפליקציות פועלות בצמתים.

יוצרים אשכול Autopilot בשם events-cluster:

gcloud container clusters create-auto $CLUSTER_NAME --region us-central1

יכול להיות שיחלפו כמה דקות עד שהאשכול ייווצר. אחרי שהאשכול נוצר, הפלט אמור להיראות כך:

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING

ייווצר אשכול GKE בשם events-cluster בפרויקט עם מזהה פרויקט Google Cloud של MY_PROJECT.

הפעלת יעדי GKE

לכל טריגר שמטרגט שירות GKE,‏ Eventarc יוצר רכיב להעברת אירועים ששולף אירועים מ-Pub/Sub ומעביר אותם ליעד. כדי ליצור את הרכיב ולנהל משאבים באשכול GKE, צריך להעניק הרשאות לסוכן השירות של Eventarc:

  1. הפעלת יעדי GKE ל-Eventarc:

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

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

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

יצירת יעד של שירות GKE

פריסת שירות GKE שיקבל אירועים ויתעד אותם באמצעות תמונה מוכנה מראש, us-docker.pkg.dev/cloudrun/container/hello:

  1. ‫Kubernetes משתמש בקובץ YAML שנקרא kubeconfig כדי לאחסן את פרטי האימות של האשכול עבור kubectl. מעדכנים את הקובץ kubeconfig בפרטי הכניסה ובפרטי נקודת הקצה כדי להפנות את kubectl אל אשכול GKE:

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region us-central1
    
  2. יוצרים פריסת Kubernetes:

    kubectl create deployment $SERVICE_NAME \
        --image=us-docker.pkg.dev/cloudrun/container/hello
    
  3. חשיפה כשירות Kubernetes:

    kubectl expose deployment $SERVICE_NAME \
        --type ClusterIP --port 80 --target-port 8080
    

יצירת טריגר Eventarc

כשמעלים קובץ ל-Cloud Storage, הטריגר של Eventarc שולח אירועים מ-Cloud Storage לשירות hello-gke GKE.

  1. יוצרים טריגר של יומני ביקורת ב-Cloud:

    gcloud eventarc triggers create my-gke-trigger \
        --location="us-central1" \
        --destination-gke-cluster="events-cluster" \
        --destination-gke-location="us-central1" \
        --destination-gke-namespace="default" \
        --destination-gke-service="hello-gke" \
        --destination-gke-path="/" \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=storage.googleapis.com" \
        --event-filters="methodName=storage.objects.create" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
    

    הפעולה הזו יוצרת טריגר בשם my-gke-trigger.

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

    gcloud eventarc triggers list

    הפלט אמור להיראות כך:

    NAME: my-gke-trigger
    TYPE: google.cloud.audit.log.v1.written
    DESTINATION: GKE: hello-gke
    ACTIVE: By 20:39:43
    LOCATION: us-central1
    

יצירה והצגה של אירוע

מעלים קובץ טקסט ל-Cloud Storage כדי ליצור אירוע ולהפעיל את שירות GKE. אחר כך תוכלו לראות את ההודעה של האירוע ביומני ה-Pod.

  1. העלאת קובץ טקסט ל-Cloud Storage:

    echo "Hello World" > random.txt
    gcloud storage cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt

    ההעלאה יוצרת אירוע, וה-pod של GKE מתעד ביומן את ההודעה של האירוע.

  2. כדי לראות את הודעת האירוע:

    1. מאתרים את מזהה הפוד:

      kubectl get pods

      הפלט אמור להיראות כך:

      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

      מעתיקים את NAME של הפוד כדי להשתמש בו בשלב הבא.

    2. בודקים את היומנים של ה-pod:

      kubectl logs NAME

      מחליפים את NAME בשם הפוד שהעתקתם.

    3. מחפשים רשומה ביומן שדומה ל:

      2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
      {"severity":"INFO","eventType":"google.cloud.audit.log.v1.written","message":"Received event of type google.cloud.audit.log.v1.written. [...]}
      

הסרת המשאבים

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

אתם יכולים:

  1. מחיקת הקטגוריה של Cloud Storage.

  2. מחיקת טריגר Eventarc

  3. מחיקת אשכול GKE.

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

כדי למחוק Google Cloud פרויקט:

gcloud projects delete PROJECT_ID

אם אתם מתכננים להיעזר במספר מדריכי לימוד או מדריכים למתחילים, מומלץ להשתמש שוב באותו פרויקט כדי לא לחרוג ממכסות הפרויקטים.

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

קבלת אירועים באמצעות Pub/Sub‏ (Google Cloud CLI)