קבלת אירועים באמצעות יומני ביקורת של Cloud (ה-CLI של gcloud)
במדריך למתחילים הזה נסביר איך להגדיר שירות Google Kubernetes Engine (GKE) כיעד לקבלת אירועים מ-Cloud Storage באמצעות Eventarc.
במדריך למתחילים הזה תלמדו:
- מגדירים חשבון שירות כדי ש-Eventarc יוכל לשלוף אירועים ולהעביר אותם ליעד.
- יוצרים קטגוריה של Cloud Storage שתשמש כמקור האירועים.
- יוצרים אשכול GKE.
- מאחלים יעדים ב-GKE ב-Eventarc.
- פריסת שירות GKE שמקבל אירועים.
- יוצרים טריגר Eventarc ששולח אירועים מ-Cloud Storage לשירות GKE.
- מעלים קובץ לקטגוריה של Cloud Storage כדי ליצור אירוע ולראות את האירוע ביומני ה-Pod של GKE.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים 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 .
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים 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 .
- מעדכנים את הרכיבים של Google Cloud CLI:
gcloud components update
- מפעילים את ממשקי ה-API של Eventarc, מנהל המשאבים ו-Google Kubernetes Engine:
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com
- מגדירים את משתני ההגדרה שמשמשים במדריך הזה:
PROJECT_ID=$(gcloud config get-value project) TRIGGER_SA=eventarc-sa CLUSTER_NAME=events-cluster SERVICE_NAME=hello-gke
-
אם אתם יוצרי הפרויקט, מוקצה לכם תפקיד הבעלים הבסיסי (
roles/owner). כברירת מחדל, תפקיד ניהול הזהויות והרשאות הגישה (IAM) הזה כולל את ההרשאות שנדרשות לגישה מלאה לרוב המשאבים Google Cloud, ואפשר לדלג על השלב הזה.אם אתם לא יוצרי הפרויקט, צריך להעניק את ההרשאות הנדרשות בחשבון המשתמש המתאים בפרויקט. לדוגמה, חשבון משתמש יכול להיות חשבון Google (למשתמשי קצה) או חשבון שירות (לאפליקציות ולעומסי עבודה ממוחשבים). מידע נוסף זמין בדף תפקידים והרשאות של יעד האירוע.
ההרשאות הנדרשות
כדי לקבל את ההרשאות שדרושות לביצוע ההפעלה המהירה הזו, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- אדמין ב-Eventarc (
roles/eventarc.admin) - אדמין ב-Kubernetes Engine (
roles/container.admin) - בעל הרשאת גישה לתצוגת יומנים (
roles/logging.viewAccessor) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - אדמין בחשבון שירות (
roles/iam.serviceAccountAdmin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - אדמין Service Usage (
roles/serviceusage.serviceUsageAdmin) - אדמין באחסון (
roles/storage.admin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- אדמין ב-Eventarc (
חשוב לשים לב לחשבון השירות שמוגדר כברירת מחדל ב-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 אחד או יותר שמכילים את ההרשאות המינימליות הנדרשות, ולפעול לפי העיקרון של הרשאות מינימליות.
- מקצים לחשבון השירות שמוגדר כברירת מחדל ב-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
- מקצים את התפקיד 'מקבל אירועים ב-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
- אם הפעלתם את סוכן השירות של 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
- ב-Google Cloud Storage, מפעילים את סוגי היומנים של השירותים הבאים: קריאת אדמין, קריאת נתונים וכתיבת נתונים:
- קוראים את מדיניות ה-IAM של הפרויקט ושומרים אותה בקובץ:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- עורכים את המדיניות בקובץ /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בכתובת האימייל. - כותבים את מדיניות ה-IAM החדשה:
אם הפקודה הקודמת מדווחת על התנגשות עם שינוי אחר, צריך לחזור על השלבים האלה, החל מקריאת מדיניות ה-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:
הפעלת יעדי GKE ל-Eventarc:
gcloud eventarc gke-destinations init
בהנחיה לקשירת התפקידים הנדרשים, מזינים
y.התפקידים הבאים משויכים לחשבון השירות:
compute.viewercontainer.developeriam.serviceAccountAdmin
יצירת יעד של שירות GKE
פריסת שירות GKE שיקבל אירועים ויתעד אותם באמצעות תמונה מוכנה מראש, us-docker.pkg.dev/cloudrun/container/hello:
Kubernetes משתמש בקובץ YAML שנקרא
kubeconfigכדי לאחסן את פרטי האימות של האשכול עבורkubectl. מעדכנים את הקובץkubeconfigבפרטי הכניסה ובפרטי נקודת הקצה כדי להפנות אתkubectlאל אשכול GKE:gcloud container clusters get-credentials $CLUSTER_NAME \ --region us-central1יוצרים פריסת Kubernetes:
kubectl create deployment $SERVICE_NAME \ --image=us-docker.pkg.dev/cloudrun/container/helloחשיפה כשירות Kubernetes:
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP --port 80 --target-port 8080
יצירת טריגר Eventarc
כשמעלים קובץ ל-Cloud Storage, הטריגר של Eventarc שולח אירועים מ-Cloud Storage לשירות hello-gke GKE.
יוצרים טריגר של יומני ביקורת ב-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.מוודאים שהטריגר נוצר בהצלחה:
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.
העלאת קובץ טקסט ל-Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt
ההעלאה יוצרת אירוע, וה-pod של GKE מתעד ביומן את ההודעה של האירוע.
כדי לראות את הודעת האירוע:
מאתרים את מזהה הפוד:
kubectl get pods
הפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
מעתיקים את
NAMEשל הפוד כדי להשתמש בו בשלב הבא.בודקים את היומנים של ה-pod:
kubectl logs NAME
מחליפים את
NAMEבשם הפוד שהעתקתם.מחפשים רשומה ביומן שדומה ל:
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. [...]}
הסרת המשאבים
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים.
אתם יכולים:
אפשר גם למחוק את הפרויקט Google Cloud כדי למנוע חיובים. כשמוחקים פרויקט ב- Google Cloud , החיוב על כל המשאבים שנעשה בהם שימוש באותו פרויקט מופסק.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
אם אתם מתכננים להיעזר במספר מדריכי לימוד או מדריכים למתחילים, מומלץ להשתמש שוב באותו פרויקט כדי לא לחרוג ממכסות הפרויקטים.