בדף הזה מוסבר איך לפתור בעיות ב-Policy Controller.
טיפים כלליים
בקטע הבא מפורטות עצות כלליות לפתרון בעיות ב-Policy Controller.
הפסקת Policy Controller
אם Policy Controller גורם לבעיות באשכול, אפשר להפסיק את Policy Controller בזמן שבודקים את הבעיה.
בדיקת המדדים
בדיקת המדדים של Policy Controller יכולה לעזור לכם לאבחן בעיות ב-Policy Controller.
אימות ההתקנה
אפשר לוודא שהתקנתם את Policy Controller ואת ספריית תבניות האילוצים בהצלחה.
ניתוק Policy Controller
במקרים נדירים, יכול להיות שתצטרכו לנתק את Policy Controller מהאשכולות.
הפעולה הזו משביתה לחלוטין את הניהול של Policy Controller. כדאי לנסות להפסיק באופן זמני את Policy Controller כדי לראות אם אפשר לפתור את הבעיות לפני השימוש בפקודה detach.
מנתקים את Policy Controller מכלל המכשירים:
gcloud container fleet policycontroller detachמצרפים מחדש את Policy Controller:
gcloud container fleet policycontroller enable
שגיאה ביצירת תבנית אילוצים
אם מופיעה שגיאה שכוללת את disallowed ref, צריך לוודא שהפעלתם אילוצים שלמות נתונים. לדוגמה, אם משתמשים ב-data.inventory בתבנית אילוצים בלי להפעיל קודם אילוצי הפניה, השגיאה תהיה דומה לזו:
admission webhook "validation.gatekeeper.sh" denied the request: check refs failed on module {templates["admission.k8s.gatekeeper.sh"]["MyTemplate"]}: disallowed ref data.inventory...
האילוץ לא נאכף
בקטע הבא מפורטות הנחיות לפתרון בעיות אם אתם חושדים שההגבלות שלכם לא נאכפות או אם אתם יודעים שהן לא נאכפות.
איך בודקים אם האילוץ נאכף
אם אתם חוששים שהאילוץ לא נאכף, אתם יכולים לבדוק את spec.status של האילוץ ואת תבנית האילוץ. כדי לבדוק את הסטטוס, מריצים את הפקודה הבאה:
kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
CONSTRAINT_TEMPLATE_NAME: השם של תבנית האילוץ שרוצים לבדוק. לדוגמה,K8sNoExternalServices.
CONSTRAINT_NAME: ה-Nameשל האילוץ שרוצים לבדוק.במקרה הצורך, מריצים את הפקודה
kubectl get constraintכדי לראות אילו תבניות של אילוצים ואילו אילוצים מותקנים במערכת.
בפלט של הפקודה kubectl describe, רושמים את הערכים בשדות metadata.generation ו-status.byPod.observedGeneration. בדוגמה הבאה הערכים האלה מודגשים:
Name: no-internet-services
Namespace:
API Version: constraints.gatekeeper.sh/v1beta1
Kind: K8sNoExternalServices
Metadata:
Creation Timestamp: 2021-12-03T19:00:06Z
Generation: 1
Managed Fields:
API Version: constraints.gatekeeper.sh/v1beta1
Fields Type: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
f:config.k8s.io/owning-inventory:
f:configmanagement.gke.io/cluster-name:
f:configmanagement.gke.io/managed:
f:configmanagement.gke.io/source-path:
f:configmanagement.gke.io/token:
f:configsync.gke.io/declared-fields:
f:configsync.gke.io/git-context:
f:configsync.gke.io/manager:
f:configsync.gke.io/resource-id:
f:labels:
f:app.kubernetes.io/managed-by:
f:configsync.gke.io/declared-version:
f:spec:
f:parameters:
f:internalCIDRs:
Manager: configsync.gke.io
Operation: Apply
Time: 2022-02-15T17:13:20Z
API Version: constraints.gatekeeper.sh/v1beta1
Fields Type: FieldsV1
fieldsV1:
f:status:
Manager: gatekeeper
Operation: Update
Time: 2021-12-03T19:00:08Z
Resource Version: 41460953
UID: ac80849d-a644-4c5c-8787-f73e90b2c988
Spec:
Parameters:
Internal CID Rs:
Status:
Audit Timestamp: 2022-02-15T17:21:51Z
By Pod:
Constraint UID: ac80849d-a644-4c5c-8787-f73e90b2c988
Enforced: true
Id: gatekeeper-audit-5d4d474f95-746x4
Observed Generation: 1
Operations:
audit
status
Constraint UID: ac80849d-a644-4c5c-8787-f73e90b2c988
Enforced: true
Id: gatekeeper-controller-manager-76d777ddb8-g24dh
Observed Generation: 1
Operations:
webhook
Total Violations: 0
Events: <none>
אם רואים שכל ה-Pods של Policy Controller עם ערך observedGeneration שווה לערך metadata.generation (כמו בדוגמה הקודמת), סביר להניח שהאילוץ נאכף. עם זאת, אם הערכים האלה זהים, אבל אתם עדיין נתקלים בבעיות באכיפת ההגבלה, כדאי לעיין בטיפים בקטע הבא. אם אתם רואים שרק חלק מהערכים תואמים, או שחלק מה-Pods לא מופיעים, הסטטוס של האילוץ לא ידוע. יכול להיות שהאילוץ לא ייאכף באופן עקבי בכל ה-Pods של Policy Controller, או שהוא לא ייאכף בכלל. אם אין ערכים תואמים, האילוץ לא נאכף.
האילוץ לא נאכף, אבל תוצאות הביקורת מדווחות
אם הבדיקה observedGeneration שמתוארת בקטע הקודם מצאה ערכים תואמים ותוצאות הביקורת שדווחו על האילוץ מראות הפרות צפויות (עבור אובייקטים קיימים, לא עבור בקשות נכנסות), אבל האילוץ עדיין לא נאכף, סביר להניח שהבעיה קשורה ל-webhook. יכול להיות שנתקלתם באחת מהבעיות הבאות ב-webhook:
- יכול להיות ש-Pod של Policy Controller webhook לא פועל. טכניקות לניפוי באגים ב-Kubernetes יכולות לעזור לכם לפתור בעיות ב-Pod של ה-Webhook.
- יכול להיות שיש חומת אש בין שרת ה-API לבין שירות ה-webhook. כדי לדעת איך לתקן את חומת האש, צריך לעיין במאמרי העזרה של ספק חומת האש.
לא נאכף אילוץ שלמות נתונים
אם האילוץ הוא אילוץ הפניה, צריך לוודא שהמשאבים הנדרשים נשמרים במטמון. פרטים על שמירת משאבים במטמון זמינים במאמר הגדרת Policy Controller לאילוצים של הפניות.
בדיקת התחביר של תבנית האילוצים
אם כתבתם תבנית אילוצים משלכם והיא לא נאכפת, יכול להיות שיש שגיאה בתחביר של תבנית האילוצים.
אפשר לבדוק את התבנית באמצעות הפקודה הבאה:
kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME
מחליפים את CONSTRAINT_TEMPLATE_NAME בשם התבנית שרוצים לבדוק. צריך לדווח על שגיאות בשדה status.
המאמרים הבאים
אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו לקבל עזרה נוספת במאמר קבלת תמיכה, כולל עצות בנושאים הבאים:
פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care
פתיחת בקשות בקשר לבעיות או הגשת בקשות להוספת תכונות באמצעות Issue Tracker ציבורי Google Cloud או פתיחת בקשה ציבורית בקשר לבעיה ב-Gatekeeper ב-GitHub.