סקירה כללית על שכבות הגנה
התכונה Apigee hybrid Guardrails היא מנגנון שמתריע בפני לקוחות על בעיה פוטנציאלית לפני שהיא משפיעה על מופע Hybrid. במילים אחרות, אמצעי הבקרה ההיברידיים יפסיקו פקודה אם היא עלולה לסכן את היציבות של מופע היברידי. בין אם מדובר בהגדרה שגויה או במשאב לא מספיק, אמצעי הבקרה ההיברידיים ימנעו שינויים במופע היברידי עד שהסיכון לבעיה יוסר. כך הלקוח לא צריך לבזבז זמן על בעיות שבדרך כלל לוקח שעות או ימים לפתור אותן.
שימוש במעקי ביטחון ב-Apigee Hybrid
כדי להשתמש ב-Hybrid Guardrails, מריצים את אותן פקודות התקנה של Hybrid Helm או שדרוג של Hybrid Helm שמתועדות בהוראות ההתקנה של Hybrid. אין צורך בפקודות נוספות כדי להפעיל את אמצעי הבקרה.
כשמריצים פקודת Helm ל-Apigee Hybrid, קורים שני דברים לפני שהפקודה מחילה את ההגדרה על מופע ה-Hybrid:
- Helm יוצר תרמיל זמני של Guardrails עם ההגדרה שהוחלה. אם ה-pod של אמצעי הבקרה עובר למצב תקין, הוא יבדוק את המכונה ההיברידית שלכם מול ההגדרה שהחלתם. אם הבדיקה עוברת בהצלחה, ה-pod של אמצעי הבקרה מסתיים וההגדרה שלכם מוחלת על מופע Apigee Hybrid.
- אם הבדיקה נכשלת, ה-pod של אמצעי הבקרה נשאר במצב לא תקין כדי לאפשר אבחון של ה-pod. בפקודת Helm תוצג הודעת שגיאה שמציינת שה-pod של Guardrails נכשל.
בדוגמה הבאה מוצג שימוש ב-Guardrails כדי לבדוק את הקישוריות לרשת ממכונה היברידית למישור הבקרה של Apigee כחלק מההתקנה של רכיב apigee-datastore. אפשר להשתמש באותו רצף לכל רכיבי Apigee hybrid:
מתקינים את הרכיב apigee-datastore באמצעות הפקודה הבאה:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides.yaml
אם יש שגיאה מיידית, פקודת Helm תציג גם הודעת שגיאה שמציינת שהבדיקות של אמצעי הבקרה נכשלו, כמו בדוגמה הבאה:
helm upgrade datastore apigee-datastore/ \
--install \
--namespace apigee \
-f my-overrides.yaml
. . .
Error: UPGRADE FAILED: pre-upgrade hooks failed: 1 error occurred:
* pod apigee-hybrid-helm-guardrail-datastore failedכדי לראות איזה אימות נכשל ומדוע, בודקים את היומנים של Guardrails pod, כמו בדוגמה הבאה:
kubectl logs -n apigee apigee-hybrid-helm-guardrail-datastore
{"level":"INFO","timestamp":"2024-02-01T20:28:55.934Z","msg":"logging enabled","log-level":"INFO"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"","checkpoint":"upgrade","component":"apigee-datastore"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"initiating pre-install checks"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"check validation starting...","check":"controlplane_connectivity"}
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}בדוגמה הזו, הודעת שגיאת הבדיקה בפועל היא החלק הזה:
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}ה-pod של אמצעי הבקרה מאותחל אוטומטית כשמריצים את פקודת ה-Helm. אם בדיקת הקישוריות של מישור הבקרה של Apigee עוברת בהצלחה, ה-pod של אמצעי הבקרה מסתיים בסוף הביצוע.
בודקים במהירות את הסטטוס של הפודים אחרי שמריצים את הפקודה helm install. בדוגמה הבאה של פלט אפשר לראות שהפודים של אמצעי הבקרה נמצאים במצב תקין, כלומר מבחן הקישוריות של מישור הבקרה עבר בהצלחה:
kubectl get pods -n apigee -w
NAME READY STATUS RESTARTS AGE
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 1s
apigee-hybrid-helm-guardrail-datastore 0/1 ContainerCreating 0 1s
apigee-hybrid-helm-guardrail-datastore 0/1 Completed 0 2s
apigee-hybrid-helm-guardrail-datastore 0/1 Completed 0 3s
apigee-hybrid-helm-guardrail-datastore 0/1 Terminating 0 3s
apigee-hybrid-helm-guardrail-datastore 0/1 Terminating 0 3sאם בדיקת הקישוריות של מישור הבקרה של Apigee נכשלת, ה-pod של Guardrails יישאר במצב שגיאה, בדומה לפלט של הדוגמה הבאה:
kubectl get pods -n apigee -w
NAME READY STATUS RESTARTS AGE
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Pending 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 ContainerCreating 0 0s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 4s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 5s
apigee-hybrid-helm-guardrail-datastore 0/1 Error 0 6sהשבתה זמנית של הגבלות בנוגע להקצאות
אם אתם צריכים להשבית את הבדיקות של אמצעי הבקרה, מוסיפים את הדגל --no-hooks לפקודת Helm. בדוגמה הבאה מוצג הדגל --no-hooks בפקודת Helm:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ -f overrides.yaml \ --no-hooks
הגדרת אמצעי בקרה בקובץ ההחלפות
החל מגרסה 1.12 של Apigee Hybrid, הגדרות Guardrails מוגדרות כברירת מחדל בכל תרשים. אפשר לשנות את כתובת ה-URL של התמונה, התג ומדיניות משיכת התמונה בקובץ overrides.
לדוגמה, כתובת ה-URL של תמונת ה-Guardrails, התג ומדיניות המשיכה שמופיעים בהמשך יתווספו לקובץ ההחלפות:
# Apigee Ingressgateway
ingressGateway:
image:
pullPolicy: Always
## NOTE: The Guardrails config is below. The ingressgateway config above is for position reference only and is NOT required for Guardrails config.
# Apigee Guardrails
guardrails:
image:
url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
tag: "12345_6789abcde"
pullPolicy: Always
שימוש ב-Kubernetes tolerations עם Guardrails
אפשר גם להוסיף tolerations ל-Guardrails בקובץ overrides. אם לא מוגדרות הקלות במסגרת ההגדרות של אמצעי הבקרה overrides, אמצעי הבקרה ישתמשו בהקלות שמוגדרות באופן גלובלי.
לדוגמה, כדי לכלול טולרנסים באופן ספציפי בקטע Guardrails בקובץ overrides, מוסיפים משהו דומה לפסקה הבאה:
# Apigee Guardrails
guardrails:
image:
url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
tag: "12345_6789abcde"
pullPolicy: Always
tolerations:
- key: "say"
operator: "Equal"
value: "taunt"
effect: "NoSchedule"
פתרון בעיות שקשורות לשכבות הגנה
נקודת הבדיקה של משתנה הסביבה חסרה או ריקה
אם אתם רואים את השגיאה Client.Timeout exceeded ביומן של ה-pod של apigee operator guradrails, הנה כמה שלבים לפתרון בעיות שיעזרו לכם לקבוע אם הבעיה היא בצד של guardrails או בצד של התשתית.
- יוצרים קובץ yaml חדש עם התוכן הבא. אפשר לתת לקובץ ה-YAML כל שם שרוצים.
- מריצים את הפקודה הבאה כדי להחיל את קובץ ה-YAML החדש:
- מריצים את הפקודה הבאה כדי להיכנס ל-pod:
- מריצים את הפקודה הבאה בתוך ה-pod
apigee-simple-clientובודקים את הפלט:
apiVersion: v1
kind: Pod
metadata:
labels:
name: apigee-simple-client
spec:
containers:
- name: apigee-simple-client
image: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra-client:1.10.1"
imagePullPolicy: Always
command:
- sleep
- "3650d"
restartPolicy: Never
hostNetwork: false
kubectl apply -n apigee-system -f name of the yaml file
kubectl exec -it -n apigee-system apigee-simple-client -- /bin/bash
curl -v -I --proxy http://forwarding-proxy.example.com:5678 \
https://apigee.googleapis.com
forwarding-proxy.example.com היא כתובת ה-Proxy. אפשר להשתמש בכל כתובת שרת proxy שיש לכם גישה אליה. אם אין לכם גישה לשרת proxy, אתם יכולים להשתמש בפקודה הבאה כדי לבדוק את הקישוריות לרשת:
curl -v -I https://apigee.googleapis.com
אם פקודת ה-curl מתחברת בהצלחה לשרת ה-proxy של http ומגיעה אל apigee.googleapis.com, פקודת ה-curl אמורה להחזיר קוד תגובת HTTP. אם פקודת curl לא מצליחה להגיע לשרת ה-proxy או להתחבר ל-apigee.googleapis.com דרך ה-proxy, פקודת curl אמורה להציג שגיאה.