פתרון בעיות ב-Eventarc ל-Google Kubernetes Engine‏ (GKE)

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

אם נתקלים בבעיות אחרות, אפשר לעיין במאמרים הבאים לפתרון בעיות:

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

מופיעות הודעות שגיאה שדומות לאחת מההודעות הבאות:

Error applying IAM policy for service account 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT':
Error setting IAM policy for service account 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT':
googleapi: Error 403: Permission iam.serviceAccounts.setIamPolicy is required to perform this
operation on service account SERVICE_ACCOUNT., forbidden

Error when reading or editing Container Cluster "cluster": googleapi:
Error 403: Required "container.clusters.get" permission(s) for "..."., forbidden
Error reading instance group manager returned as an instance group URL:
"googleapi: Error 403: Required 'compute.instanceGroupManagers.get' permission
for '...', forbidden"

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

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

יצירת הטריגר נכשלת כי לא ניתן למצוא את אשכול היעד או כי איחוד זהויות של עומסי עבודה ל-GKE לא מופעל

מופיעות הודעות שגיאה שדומות לאחת מההודעות הבאות:

ERROR: (gcloud.eventarc.triggers.create) NOT_FOUND: Not found: projects/PROJECT_ID/locations/
LOCATION/clusters/CLUSTER_NAME.
...
ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: workload identity is not enabled on
cluster CLUSTER_NAME in LOCATION
...

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

כדי לפתור את הבעיה, צריך לוודא שקיים אשכול היעד ושמופעל בו Workload Identity.

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

מופיעה הודעת שגיאה שדומה להודעה הבאה:

ERROR: (gcloud.eventarc.triggers.create) Invalid resource state for projects/PROJECT_ID/locations/LOCATION/triggers/TRIGGER_ID.
Ensure that you have enabled your GKE destination and assigned required permissions to the service account.

השגיאה הזו יכולה להופיע אם:

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

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

  1. מוודאים שהפעלתם יעדי GKE:
    gcloud eventarc gke-destinations init
    למידע נוסף, פועלים לפי ההוראות לספק ספציפי ולסוג אירוע ספציפי בקטע 'הפעלת יעדים של GKE'.
  2. מוודאים שחשבון השירות של Eventarc הוגדר עם ההרשאות המתאימות ליצירת משאבים. מידע נוסף על אופן ההקצאה של התפקידים המתאימים לחשבון השירות מופיע בהוראות לפלאגין שמתממשק עם שירותים חיצוניים ספציפי ולסוג אירוע ספציפי בקטע 'הכנה ליצירת טריגר'.
  3. אם אתם רואים כשלים בבדיקת המוכנות של מעביר האירועים, המשמעות היא ש-kubelet בצומת לא הצליח להתחבר ליציאת הקונטיינר של מעביר האירועים. השגיאה הזו יכולה להתרחש כשאיחוד זהויות של עומסי עבודה ל-GKE לא מופעל במאגר הצמתים. אפשר להפעיל באופן ידני איחוד זהויות של עומסי עבודה ל-GKE במאגרי צמתים קיימים. הפעלת ההגדרה הזו מבטיחה שפוד מעביר האירועים ישתמש בחשבון השירות הנכון עם ההרשאות הנדרשות.
  4. אם השגיאה נמשכת, פנו לתמיכה.

הטריגר נוצר בהצלחה אבל היעד לא מקבל אירועים

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

  1. אם האירועים לא מועברים ליעד, יכול להיות שהאירועים שנשלחים מ-Pub/Sub ליעד מושמטים:

    כדי לוודא שהאירועים לא יימחקו, צריך להגדיר מדיניות ניסיון חוזר של מינוי Pub/Sub או להעביר הודעות שלא נמסרו לנושא להודעות ללא מוצא (שנקרא גם תור של הודעות שלא נמסרו).

    לפני שמגדירים את נושא ההודעות שלא נמסרו, מאחזרים את הנושא והמינוי של הטריגר:

    gcloud eventarc triggers describe TRIGGER \
      --location=LOCATION

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

    • TRIGGER: המזהה של הטריגר או מזהה מלא.
    • LOCATION: המיקום של טריגר Eventarc.
  2. אם הטריגר עדיין לא פועל, בודקים את הסטטוס של רכיב העברת האירועים של Eventarc כדי לראות אם הוא נפרס בצורה תקינה:

    1. כדי לזהות את מרחבי השמות של האשכול, מציגים רשימה של כל הפודים שכוללים את event-forwarder בשם שלהם:
      kubectl get pods --all-namespaces | grep event-forwarder
      הפלט אמור להיראות כך:
      event-forwarder-namespace-hash1   event-forwarder-hash1   1/1   Running   0   5d2h
      event-forwarder-namespace-hash2   event-forwarder-hash2   1/1   Running   0   2d2h
      
      ה-30 התווים הראשונים של מרחבי השמות צריכים להיות זהים לשם של הטריגר של Eventarc שיצרתם, ואחריהם גיבוב כדי להבדיל בין טריגרים עם אותם 30 תווים ראשונים.
    2. מאחזרים את פרטי הפריסה:
      kubectl get deployments -n EVENT_FORWARDER_NAMESPACE event-forwarder
    3. מאחזרים את פרטי ה-Pod:
      kubectl describe pod -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
    4. מדפיסים את היומנים של ה-Pod כדי לבדוק למה או איפה הכשל התרחש:
      kubectl logs -f -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
      לדוגמה, ביומן הבא, התפקיד Pub/Sub Subscriber בוטל בחשבון השירות:
      {"error":"generic::permission_denied: missing 'pubsub.subscriptions.consume' permission",
      "message":"Permissions check failed","severity":"fatal","timestamp":"2021-07-07T14:57:49.038877483Z"}