הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
ככל שהצרכים שלכם לניהול ה-API גדלים ומשתנים, יכול להיות שתצטרכו להוסיף שירותים חדשים לאשכול או לעדכן מסלולים קיימים ואפשרויות Ingress. בדף הזה מוסבר איך לעדכן את האשכול כדי לבצע את המשימות הבאות:
- מוסיפים Gateway ו-HTTPRoute חדשים.
- עדכון של מוצר API
- יוצרים מוצר API חדש.
- יצירת קבוצה חדשה של פעולות API.
- בדיקת ההגדרה החדשה של השער
לפני שמתחילים
לפני שמתחילים במשימה הזו, חשוב לבצע את השלבים שמתוארים במאמר בנושא יצירת APIMExtensionPolicy. בדף הזה מניחים שהגדרתם אשכול Google Kubernetes Engine (GKE), התקנתם את Apigee Operator for Kubernetes, יצרתם שער Google Kubernetes Engine (GKE) והחלתם לפחות מדיניות אחת לניהול API על השער.
התפקידים הנדרשים
אם הקציתם לחשבון השירות את התפקידים הנדרשים כמו שמתואר במאמר התקנת Apigee Operator ל-Kubernetes, לא נדרשים תפקידים או הרשאות נוספים ב-IAM כדי להשלים את המשימות האלה.
אתם יכולים לבחור להרשות פעולות במשאבים באשכול Google Kubernetes Engine באמצעות מנגנון בקרת הגישה מבוססת-התפקידים (RBAC) המובנה ב-Kubernetes. מידע נוסף זמין במאמר מתן הרשאה לפעולות באשכולות באמצעות בקרת גישה מבוססת-תפקידים.
הוספה של Gateway ו-HTTPRoute חדשים
בקטע הזה תוסיפו שער חדש ו-HTTPRoute לאשכול. במדריכים הקודמים למשימות, הגדרות הדוגמה השתמשו ב-GKE Gateway חיצוני. אם פורסים כמה שערים באותו אזור, הם צריכים להיות מאותו סוג (שניהם חיצוניים או שניהם פנימיים). לכן, גם בהגדרת הדוגמה במדריך הזה נעשה שימוש בשער חיצוני.
אפשר להשתמש ב-Apigee Operator for Kubernetes עם שערים פנימיים או חיצוניים של GKE, אבל אי אפשר לפרוס את שני סוגי השערים באותו אזור.
כדי להוסיף Gateway ו-HTTPRoute חדשים לאשכול, מבצעים את השלבים הבאים:
- מגדירים שער GKE חיצוני חדש. מידע נוסף והוראות מפורטות זמינים במאמר בנושא פריסת שער חיצוני.
- יוצרים משאב גלובלי
SslCertificateבניהול Google:gcloud compute ssl-certificates create CERT_NAME \ --domains=HOST_NAME \ --global
כאשר:
-
CERT_NAMEהוא השם של האישור שרוצים ליצור. -
HOST_NAME_2הוא שם המארח של השער החדש.
-
- יוצרים קובץ חדש בשם
gateway2.yamlבמרחב השמותapim. - מעתיקים את התוכן הבא לקובץ החדש:
# gateway2.yaml apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: name: global-ext-lb2 spec: gatewayClassName: gke-l7-global-external-managed listeners: - name: https protocol: HTTPS allowedRoutes: kinds: - kind: HTTPRoute namespaces: from: All port: 443 tls: options: networking.gke.io/pre-shared-certs: CERT_NAME
- מוסיפים קובץ HTTPRoute חדש ל-
/postלאותו קובץ, כמו שמודגש למטה:# http-route2.yaml apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: http-bin-route-post namespace: http spec: parentRefs: - kind: Gateway name: global-ext-lb2 namespace: default hostnames: - HOST_NAME_2 rules: - matches: - path: type: PathPrefix value: "/post" backendRefs: - name: httpbin kind: Service port: 80 namespace: http
- החלת ה-Gateway וה-HTTPRoute החדשים:
kubectl apply -f gateway2.yaml
- בודקים את הסטטוס של HTTPRoute באמצעות הפקודה הבאה::
kubectl -n http get HttpRoute
הפלט אמור להיראות כך:
NAME HOSTNAMES AGE http-bin-route ["my-hostname-2"] 12d
- בודקים את סטטוס השער באמצעות הפקודה הבאה:
kubectl get gateway global-ext-lb2
הפלט אמור להיראות כך:
NAME CLASS ADDRESS PROGRAMMED AGE global-ext-lb2 gke-l7-global-external-managed 34.54.193.92 True 11d
מוודאים שהעמודה
Addressמכילה כתובת IP תקינה והסטטוס שלProgrammedהואTrue. - מתארים את השער כדי לוודא שהמסלול מצורף:
kubectl describe gateway global-ext-lb2
הפלט אמור להיראות כך:
... Listeners: Attached Routes: 1 Conditions: Last Transition Time: 2024-10-03T03:10:17Z ...מוודאים שהערך של
Attached Routesהוא1.- שולחים בקשה ל-Gateway כדי לוודא שהמסלול פועל:
curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער, כפי שמוצג בעמודהAddressשל התשובה שמוחזרת בשלב 7. -
HOST_NAME_2הוא שם המארח שמוגדר ב-HTTPRouteשל שער.
-
- הפלט אמור להיראות כך:
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701" }, "origin": "67.164.1.10,34.54.193.72", "url": "https://apigee-apim-operator-test.apigee.net/post" } - יוצרים מדיניות חדשה של תוסף APIM שמפנה אל HTTPRoute של השער החדש שנוצר בשלב קודם:
- יוצרים קובץ חדש בשם
apim-policy2.yamlבמרחב השמותapim. - מעתיקים את התוכן הבא לקובץ החדש:
# apim-policy2.yaml apiVersion: apim.googleapis.com/v1 kind: APIMExtensionPolicy metadata: name: global-ext-lb2-apim-policy-2 namespace: apim spec: location: global failOpen: false timeout: 1000ms defaultSecurityEnabled: true targetRef: # identifies the Gateway where the extension should be installed name: global-ext-lb2 kind: Gateway namespace: default
- החלת מדיניות חדשה של תוסף APIM:
kubectl apply -f apim-policy2.yaml
אחרי שהקובץ מוחל, Apigee Operator for Kubernetes יוצר משאבי רשת ברקע.
- בדיקת הסטטוס של מדיניות התוסף APIM:
kubectl -n apim get APIMExtensionPolicy
הפלט אמור להיראות כך:
NAME STATE ERRORMESSAGE global-ext-lb2-apim-policy-2 RUNNING
מוודאים שהערך של
STATEהואRUNNING. - ממתינים חמש דקות כדי לוודא שהשינויים מועברים לכל המופעים של מאזן העומסים, ואז משתמשים בפקודה הבאה כדי לוודא שבקשה לשער החדש נכשלת:
curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער שקיבלתם בשלב קודם. -
HOST_NAME_2הוא שם המארח שמוגדר ב-HTTPRouteשל שער.
הבקשה אמורה להיכשל עם תגובה שדומה לזו:
{ "fault": { "faultstring": "Raising fault. Fault name : RF-insufficient-request-raise-fault", "detail": { "errorcode": "steps.raisefault.RaiseFault" } } }המשמעות היא שהתוסף של השירות ל-Apigee פעיל, ומתבצעת אכיפה של אימות מפתח ה-API ואסימון הגישה. במאמר בדיקת תוסף שירות Apigee מוסבר איך ליצור אפליקציה למפתחים, לקבל מפתח API ולבדוק את השער החדש באמצעות המפתח.
-
- יוצרים קובץ חדש בשם
עדכון של מוצר API
לשנות מוצר API קיים כך שיפנה למדיניות החדשה של APIM Extension:
- יוצרים קובץ חדש בשם
api-product-2.yamlבמרחב השמותapim. - מעתיקים את התוכן הבא לקובץ החדש:
# api-product-2.yaml apiVersion: apim.googleapis.com/v1 kind: APIProduct metadata: name: api-product-2 namespace: apim spec: name: api-product-2 approvalType: auto description: Http bin GET calls displayName: api-product-2 EnforcementRefs: - name: global-ext-lb1-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim - name: global-ext-lb2-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- מחילים את קובץ המוצרים החדש של ה-API:
kubectl apply -f api-product-2.yaml
השינויים יחולו על כל האשכול תוך שלוש דקות בערך.
בדוגמה הזו, הקטע EnforcementRefs של מוצר ה-API api-product-2 מתעדכן כך שיפנה גם אל global-ext-lb1-apim-policy וגם אל global-ext-lb2-apim-policy, כמו שמוצג בחלקים המודגשים של yaml.
יצירת מוצר API חדש
יוצרים מוצר API חדש:
- יוצרים קובץ חדש בשם
api-product-2.yamlבמרחב השמותapim. - מעתיקים את התוכן הבא לקובץ החדש:
# api-product-2.yaml apiVersion: apim.googleapis.com/v1 kind: APIProduct metadata: name: api-product-2 namespace: apim spec: name: api-product-2 approvalType: auto description: Http bin GET calls displayName: api-product-2 enforcementRefs: - name: global-ext-lb2-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- מחילים את קובץ המוצרים החדש של ה-API:
kubectl apply -f api-product-2.yaml
השינויים יחולו על כל האשכול תוך שלוש דקות בערך.
בדוגמה הזו, הקטע EnforcementRefs של מוצר ה-API החדש api-product-2 נוצר כדי להפנות אל global-ext-lb2-apim-policy, כפי שמוצג בחלקים המודגשים של yaml.
יצירת קבוצה חדשה של פעולות API
כדי ליצור קבוצה חדשה של פעולות API:
- יוצרים קובץ חדש בשם
item-set-post.yamlבמרחב השמותapim. - מעתיקים את התוכן הבא לקובץ החדש:
# item-set-post.yaml apiVersion: apim.googleapis.com/v1 kind: APIOperationSet metadata: name: item-set-post namespace: apim spec: apiProductRefs: - name: api-product-2 kind: APIProduct group: apim.googleapis.com namespace: apim quota: limit: 1 interval: 1 timeUnit: minute restOperations: - name: PostItems path: "/post" methods: - POST
- מחילים את קובץ הפעולות החדש של ה-API:
kubectl apply -f item-set-post.yaml
השינויים יחולו על כל האשכול תוך שלוש דקות בערך.
בדוגמה הזו, הערך restOperations של קבוצת הפעולות החדשה ב-API item-set-post נוצר כדי להפנות לנתיב /post, כמו שמוצג בחלקים המודגשים של הקובץ.
בדיקת ההגדרות החדשות של השער
כדי לבדוק את ההגדרה החדשה של שער הגישה, שולחים את הבקשה הבאה לנתיב /post החדש:
curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"
כאשר:
- GATEWAY_IP_ADDRESS היא כתובת ה-IP של השער שקיבלתם בשלב קודם.
- HOST_NAME הוא שם המארח שמוגדר ב-
HTTPRouteשל שער.
הבקשה אמורה להצליח ולהחזיר תגובה שדומה לזו:
{
"args": {},
"headers": {
"Accept": "*/*",
"Host": "apigee-apim-operator-test.apigee.net",
"User-Agent": "curl/8.7.1",
"X-Api-Key": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt",
"X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
},
"origin": "34.54.193.72",
"url": "https://34.54.193.72/post"
}פתרון בעיות
אם נתקלתם בבעיות כשעדכנתם והרחבתם את מדיניות ניהול ה-API שמשמשת עם Apigee Operator for Kubernetes, תוכלו לעיין במאמר פתרון בעיות ב-Apigee Operator for Kubernetes כדי למצוא פתרונות לשגיאות נפוצות.