בדף הזה מוסבר איך לפתור בעיות שאתם עשויים להיתקל בהן כשאתם משתמשים ב-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 במאגר הצמתים.
כדי לפתור את הבעיה:
- מוודאים שהפעלתם יעדי GKE:
למידע נוסף, פועלים לפי ההוראות לספק ספציפי ולסוג אירוע ספציפי בקטע 'הפעלת יעדים של GKE'.
gcloud eventarc gke-destinations init
- מוודאים שחשבון השירות של Eventarc הוגדר עם ההרשאות המתאימות ליצירת משאבים. מידע נוסף על אופן ההקצאה של התפקידים המתאימים לחשבון השירות מופיע בהוראות לפלאגין שמתממשק עם שירותים חיצוניים ספציפי ולסוג אירוע ספציפי בקטע 'הכנה ליצירת טריגר'.
- אם אתם רואים כשלים בבדיקת המוכנות של מעביר האירועים, המשמעות היא ש-kubelet בצומת לא הצליח להתחבר ליציאת הקונטיינר של מעביר האירועים. השגיאה הזו יכולה להתרחש כשאיחוד זהויות של עומסי עבודה ל-GKE לא מופעל במאגר הצמתים. אפשר להפעיל באופן ידני איחוד זהויות של עומסי עבודה ל-GKE במאגרי צמתים קיימים. הפעלת ההגדרה הזו מבטיחה שפוד מעביר האירועים ישתמש בחשבון השירות הנכון עם ההרשאות הנדרשות.
- אם השגיאה נמשכת, פנו לתמיכה.
הטריגר נוצר בהצלחה אבל היעד לא מקבל אירועים
בודקים שעבר מספיק זמן מאז יצירת הטריגר. יכול להיות שיחלפו עד שתי דקות עד שהאירועים יישלחו.
אם האירועים לא מועברים ליעד, יכול להיות שהאירועים שנשלחים מ-Pub/Sub ליעד מושמטים:
כדי לוודא שהאירועים לא יימחקו, צריך להגדיר מדיניות ניסיון חוזר של מינוי Pub/Sub או להעביר הודעות שלא נמסרו לנושא להודעות ללא מוצא (שנקרא גם תור של הודעות שלא נמסרו).
לפני שמגדירים את נושא ההודעות שלא נמסרו, מאחזרים את הנושא והמינוי של הטריגר:
gcloud eventarc triggers describe TRIGGER \ --location=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
TRIGGER: המזהה של הטריגר או מזהה מלא. -
LOCATION: המיקום של טריגר Eventarc.
-
אם הטריגר עדיין לא פועל, בודקים את הסטטוס של רכיב העברת האירועים של Eventarc כדי לראות אם הוא נפרס בצורה תקינה:
- כדי לזהות את מרחבי השמות של האשכול, מציגים רשימה של כל הפודים שכוללים את
event-forwarderבשם שלהם: הפלט אמור להיראות כך:kubectl get pods --all-namespaces | grep event-forwarder
ה-30 התווים הראשונים של מרחבי השמות צריכים להיות זהים לשם של הטריגר של Eventarc שיצרתם, ואחריהם גיבוב כדי להבדיל בין טריגרים עם אותם 30 תווים ראשונים.event-forwarder-namespace-hash1 event-forwarder-hash1 1/1 Running 0 5d2h event-forwarder-namespace-hash2 event-forwarder-hash2 1/1 Running 0 2d2h
- מאחזרים את פרטי הפריסה:
kubectl get deployments -n EVENT_FORWARDER_NAMESPACE event-forwarder
- מאחזרים את פרטי ה-Pod:
kubectl describe pod -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
- מדפיסים את היומנים של ה-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"}
- כדי לזהות את מרחבי השמות של האשכול, מציגים רשימה של כל הפודים שכוללים את
מידע קשור
- מידע נוסף על Eventarc ל-GKE
- לקבלת עזרה נוספת, אפשר לעיין במאמר קבלת תמיכה.