הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
בדף הזה מוסבר איך להוסיף מדיניות של זמן ריצה של Apigee ו Google מדיניות להוספת טוקנים לשער Google Kubernetes Engine (GKE) באמצעות Apigee Operator for Kubernetes. הוספה של קבוצת מדיניות זמינה ל-Gateway מאפשרת להרחיב את הפונקציונליות של ה-Gateway מעבר לאכיפה של מוצר API, כך שתכלול אבטחה נוספת וכללים עסקיים.
אפשר להשתמש ב-Apigee Operator for Kubernetes כדי להוסיף את המדיניות הבאה ל-Gateway:
- SpikeArrest policy
- מדיניות JavaScript
- Google token injection policy
- מדיניות GenerateJWT
- מדיניות KVM
- OASValidation policy
- מדיניות ServiceCallout
- מדיניות OAuthv2
- מדיניות ResponseCache
- מדיניות VerifyAPIKey
סקירה כללית
בקטעים הבאים מוסבר איך:
- הוספת מדיניות ל-GKE Gateway.
- יוצרים כלל תבנית כדי לאכוף את השימוש במדיניות.
- יוצרים תבנית Apigee כדי להשתמש בכלל התבנית.
- פריסת מדיניות Apigee Gateway באמצעות התבנית.
- אימות אכיפת המדיניות.
לפני שמתחילים
כדי לשנות את GKE Gateway באמצעות קבוצת המדיניות המלאה שמשמשת כדוגמה במדריך הזה, צריך חשבון שירות עם התפקידים הנדרשים ליצירת טוקנים ב-Apigee ולפריסת פרוקסי ותוספים. אם בחרתם לא ליצור אסימונים של Google , אתם לא צריכים להוסיף את התפקידים הנוספים לחשבון השירות, ואתם יכולים לדלג לקטע הבא.
כדי ליצור חשבון שירות עם ההרשאות הנדרשות:
- אם יצרתם חשבון שירות בשם
apigee-apim-gsaבמדריך ההתקנה של Apigee Operator for Kubernetes , אתם יכולים לדלג על השלב הזה ולעבור לשלב הבא. אם לא, יוצרים את חשבון השירות:gcloud iam service-accounts create apigee-apim-gsa --project=$PROJECT_ID
- מקצים לחשבון השירות את התפקיד שנדרש ליצירת אסימונים:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/iam.serviceAccountTokenCreator"
- מקצים לחשבון השירות
apigee-apim-gsaאת התפקיד הנדרש לפריסת שרתי proxy ותוספים:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/iam.serviceAccountUser"
שינוי של GKE Gateway באמצעות כללי מדיניות
אתם יכולים לבחור לשנות את GKE Gateway באמצעות מדיניות אחת או יותר כדי להרחיב את הפונקציונליות שלו. בדוגמה הזו, קובץ yaml מוחל על שער הכניסה, והוא כולל את המפרטים של שתי מדיניות Apigee ומדיניות הוספת טוקן yaml. Google
כל אחת מהמדיניות שמוחלת על שער באמצעות הקובץ yaml הבא ממלאת תפקיד שונה כשמתבצעת הערכה של בקשות שנשלחות לשער:
- המדיניות SpikeArrest שולטת בקצב השיא של ההודעות על ידי הגדרת קצב מקסימלי של בקשות מותרות ליחידת זמן. בדוגמה הזו, הקצב המקסימלי מוגדר לחמש לדקה. מידע נוסף על השימוש במדיניות SpikeArrest כדי למתן עליות פתאומיות בתעבורה זמין במאמר מדיניות SpikeArrest.
- מדיניות JavaScript מאפשרת להוסיף קוד JavaScript בהתאמה אישית לבקשות של שער. בדוגמה הזו, המדיניות משמשת להוספת כותרת מותאמת אישית לבקשה. מידע נוסף על השימוש במדיניות JavaScript להוספת קוד בהתאמה אישית זמין במאמר בנושא מדיניות JavaScript.
- Google מדיניות הזרקת הטוקנים משמשת להזרקת טוקן גישה לאימות של Google בקשות שער, באמצעות מדיניות AssignMessage. Apigee תומך בשימוש באסימוני OAuth או באסימוני OpenID Connect לצורך אימות עם שירותי Google . Google מידע נוסף על טוקנים לאימות זמין במאמר בנושא שימוש באימות של Google.
מוסיפים את המדיניות לשער:
- יוצרים קובץ חדש בשם
apigee-policies.yamlבמרחב השמותapim. - מעתיקים את התוכן של הקובץ הבא לקובץ החדש שיצרתם:
# apigee-policies.yaml apiVersion: apim.googleapis.com/v1 kind: SpikeArrest metadata: name: spike-arrest namespace: apim spec: identifier: ref: request.header.name useEffectiveCount: true peakMessageRate: value: "5pm" --- apiVersion: apim.googleapis.com/v1 kind: Javascript metadata: name: js-add-headers namespace: apim spec: timeLimit: 2000 source: | var sum = 1+1; context.setVariable("request.header.first", 1); context.setVariable("request.header.second", 1); context.setVariable("request.header.sum", sum); --- apiVersion: apim.googleapis.com/v1 kind: AssignMessage metadata: name: google-token-policy namespace: apim spec: setActions: - authentication: googleAccessToken: scopes: - 'https://www.googleapis.com/auth/cloud-platform' AssignTo: createNew: false type: request --- apiVersion: apim.googleapis.com/v1 kind: KVM metadata: name: kvm-1 namespace: apim spec: delete: - keys: - value: mykey exclusiveCache: true expiryTimeInSecs: 3600 get: - assignTo: response.header.mykvm keys: - value: mykey initialEntries: - keys: - key1 values: - val1 - keys: - mykey values: - initvalue isEncrypted: false put: - keys: - value: mykey values: - value: request.header.mykvm scope: environment --- apiVersion: apim.googleapis.com/v1 kind: OASValidation metadata: name: oas-validation-1 namespace: apim spec: openApiSpec: | openapi: 3.0.4 info: title: Sample API description: Optional multi/single line description. version: 0.1.9 servers: - url: http://apigee-apim-operator-test.apigee.net description: Optional server description, our main host in httproute paths: /get: get: summary: just for test description: Optional extended description in CommonMark or HTML. parameters: - name: X-Request-Type in: header description: Must be 'internal' or 'external'. required: true schema: type: string enum: - internal - external responses: '200': # status code description: A JSON object content: application/json: schema: type: object properties: headers: type: object source: request --- apiVersion: apim.googleapis.com/v1 kind: ServiceCallout metadata: name: service-callout-1 namespace: apim spec: request: clearPayload: true variable: myRequest ignoreUnresolvedVariables: true removeActions: - payload: true - queryParams: - name: rq-param1 - name: rq-param2 copyActions: - version: true - verb: true addActions: - headers: - name: X-header1 value: value1 - name: X-header2 value: value2 - queryParams: - name: q-param1 value: value1 - name: q-param2 value: value2 setActions: - verb: PUT - formParams: - name: f-param1 value: value1 - name: f-param2 value: value2 response: calloutResponse timeout: 30000 httpTargetConnection: URL: https://httpbin.org/put properties: - name: success.codes value: 1xx,2xx,3xx,400 - name: supports.http11 value: "true"
- מחילים את הקובץ
yamlעל שער באמצעות הפקודה הבאה:kubectl -n apim apply -f apigee-policies.yaml
יצירת TemplateRule כתבנית SharedFlow
בשלב הזה תיצרו TemplateRule כדי לאכוף את כללי המדיניות שהוספתם ל-Gateway.
כלל תבנית הוא כלל ל-SharedFlows שנוצר על ידי אדמינים בארגון כדי לוודא שמפתחי שירותים מחילים על התנועה בשער רק מדיניות מאושרת. כלל תבנית
מבטיח שהמפתחים יבינו אילו כללי מדיניות זמינים להם, אילו כללי מדיניות נדרשים לתרחישי שימוש ספציפיים,
ואילו כללי מדיניות לא יכולים לשמש מפתחי שירותים.
יצירת כלל של תבנית
יוצרים כלל תבנית כדי לאכוף את השימוש במדיניות AssignMessage:
- יוצרים קובץ
yamlחדש בשםtemplate-rule.yamlבמרחב השמותapim. - מעתיקים את התוכן של הקובץ הבא לקובץ החדש שיצרתם:
# template-rule.yaml apiVersion: apim.googleapis.com/v1 kind: ApimTemplateRule metadata: name: template-rule namespace: apim spec: allowList: [SpikeArrest, Javascript, GenerateJWT, KVM, OASValidation, OAuthv2, ServiceCallout] requiredList: [AssignMessage] denyList: []
בדוגמה הזו, כלל התבנית מציין למפתחים שנדרשת מדיניות AssignMessage שמתארת את Google מדיניות הזרקת האסימונים. בנוסף, הוא מציין למפתחים שהם יכולים להשתמש במדיניות SpikeArrest, JavaScript, GenerateJWT, KVM, OASValidation, OAuthv2 ו-ServiceCallout בניהול ה-API שלהם. לא צוינו כללים ברשימת הדחייה.
החלת כלל התבנית
מחילים את כלל התבנית באמצעות הפקודה הבאה:
kubectl apply -f template-rule.yaml
יצירת תבנית Apigee לשימוש בכלל התבנית
יוצרים תבנית Apigee כדי לכלול את כלל התבנית שיצרתם בקטע הקודם:
- יוצרים קובץ
yamlחדש בשםnew-admin-template.yamlבמרחב השמותapim. - מעתיקים את התוכן של הקובץ הבא לקובץ החדש שיצרתם:
# new-admin-template.yaml apiVersion: apim.googleapis.com/v1 kind: ApimTemplate metadata: name: new-admin-template namespace: apim spec: apimTemplateRule: group: apim.googleapis.com kind: ApimTemplateRule name: template-rule namespace: apim templates: - mode: REQUEST flows: - name: preflow policies: - group: apim.googleapis.com kind: OASValidation name: oas-validation-1 namespace: apim - group: apim.googleapis.com kind: SpikeArrest name: spike-arrest namespace: apim - name: ConditionalGetFlow policies: - group: apim.googleapis.com kind: Javascript name: js-add-headers namespace: apim condition: request.verb="GET" - name: postflow policies: - group: apim.googleapis.com kind: AssignMessage name: google-token-policy namespace: apim - group: apim.googleapis.com kind: ServiceCallout name: service-callout-1 namespace: apim - mode: RESPONSE flows: - name: postflow policies: - group: apim.googleapis.com kind: KVM name: kvm-1 namespace: apim
- מחילים את התבנית החדשה באמצעות הפקודה הבאה:
kubectl apply -f new-admin-template.yaml
פריסת מדיניות Apigee Gateway
בשלב הזה, תחיל קובץ חדש על שער התשלומים שלך, שיכלול את המפרטים של ApigeeGatewayPolicy.
המדיניות הזו משמשת לפריסת תבנית Apigee בשער.
פורסים את מדיניות Apigee Gateway:
- יוצרים קובץ
yamlחדש בשםapigee-gateway-policy-withSA.yamlבמרחב השמותapim. - מעתיקים את התוכן של הקובץ הבא לקובץ החדש שיצרתם:
# apigee-gateway-policy-withSA.yaml apiVersion: apim.googleapis.com/v1 kind: ApigeeGatewayPolicy metadata: name: apim-template-injection namespace: apim spec: serviceAccount: apigee-apim-gsa@PROJECT_ID.iam.gserviceaccount.com ref: group: apim.googleapis.com kind: ApimTemplate name: new-admin-template namespace: apim targetRef: group: apim.googleapis.com kind: APIMExtensionPolicy name: APIMEXTENSION_POLICY_NAME namespace: apim
מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud .
מחליפים את APIMEXTENSION_POLICY_NAME בשם של APIMExtensionPolicy שרוצים להשתמש בו כדי לאכוף את המדיניות של Apigee Gateway. אם יצרתם APIMExtensionPolicy כדי ליצור תוסף תנועה, צריך להשתמש בשם המדיניות שיצרתם. אם השתמשתם ב-ApigeeBackendService כדי ליצור תוסף תעבורה, צריך להשתמש בשם של ApigeeBackendService. כשיוצרים ApigeeBackendService, Apigee Operator for Kubernetes יוצר APIMExtensionPolicy עם אותו שם ומרחב שמות כמו BackendService.
- החלת המדיניות:
kubectl apply -f apigee-gateway-policy-withSA.yaml
- מאמתים את סטטוס הפריסה של מדיניות השער החדשה:
kubectl -n apim get ApigeeGatewayPolicy
אחרי הפריסה, המדיניות
STATUSצריכה להציג את הערךCREATED.
אחרי שפורסים את מדיניות השער החדשה, צריך לחכות שתי דקות לפני ששולחים בקשה לשער כדי לאפשר למדיניות להתפשט לאשכול.
אימות אכיפת המדיניות
כדי לוודא שמדיניות Apigee Gateway פועלת כמצופה, שולחים בקשות ל-Gateway כמו שמתואר בקטעים הבאים.
אכיפת המדיניות של AssignMessage
כדי לוודא שאסימון {company_name} מוזרק לבקשה באמצעות מדיניות AssignMessage, שולחים בקשה אל שער הכניסה באמצעות הפקודה הבאה:
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער. אפשר לאחזר את כתובת ה-IP של השער באמצעות הפקודה הבאה:kubectl get gateway GATEWAY_NAME
-
HOST_NAMEהוא שם המארח. -
API_KEYהוא הערך של מפתח ה-API.
תגובה תקינה צריכה לכלול כותרת Authorization עם טוקן ה-Bearer שנוצר, בדומה לזה:
{ "args": {}, "headers": { "Accept": "*/*", "Authorization": "Bearer ya29.c.c0ASRK0Gbw03y9cfvxL11DxaRYBQUU18SmUP4Vu63OckHI5cX7wJ4DmGMG2vbDDS69HXJHqMj-lak4tcqOsJGmE65crn2gNuJLanXidwM8", "First": "1.0", "Host": "apigee-apim-operator-test.apigee.net", "Second": "1.0", "Sum": "2", "User-Agent": "curl/8.7.1", "X-Api-Key": "McYcHGR3PTSGLXExvKADwQ1JJeCjgPDUvAakCl0rJKCFaX0Y", "X-Cloud-Trace-Context": "0fd3dadc2a3c328fa968d5f5f1434c29/18300783092696918345" }, "origin": "34.54.108.129", "url": "apigee-apim-operator-test.apigee.net/get" }
אכיפת המדיניות של SpikeArrest
כדי לבדוק את האכיפה של מדיניות SpikeArrest, אפשר לשלוח בקשה ל-Gateway עשר פעמים בטווח של דקה אחת.
אפשר להריץ את הסקריפט הבא כדי ליצור את הבקשות:
#!/bin/sh for i in $(seq 1 11); do curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" sleep 1 done
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער. אפשר לאחזר את כתובת ה-IP של השער באמצעות הפקודה הבאה, שבהGATEWAY_NAMEהוא שם השער:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
-
HOST_NAMEהוא שם המארח שמוגדר ב-HTTPRouteשל שער. -
API_KEYהוא הערך של מפתח ה-API שהתקבל בהגדרת הבדיקה.
התגובה תיראה כך:
"fault":{"faultstring":"Spike arrest violation. Allowed rate : MessageRate{capacity=5, period=Minutes}","detail":{"errorcode":"policies.ratelimit.SpikeArrestViolation"}}}
אכיפת מדיניות JavaScript
כדי לוודא שמדיניות JavaScript פועלת כמצופה, שולחים בקשה ל-Gateway באמצעות הפקודה הבאה:
curl http://GATEWAY_IP_ADDRESS/get \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" -i
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער. אפשר לאחזר את כתובת ה-IP של השער באמצעות הפקודה הבאה, שבהGATEWAY_NAMEהוא שם השער:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
-
HOST_NAMEהוא שם המארח שמוגדר ב-HTTPRouteשל שער. -
API_KEYהוא הערך של מפתח ה-API שהתקבל בהגדרת הבדיקה.
מדיניות JavaScript מגדירה שלוש כותרות בקשה: First, Second ו-Sum, כפי שניתן לראות בתגובה:
HTTP/1.1 200 OK ... { "args": {}, "headers": { ... "First": "1.0", ... "Second": "1.0", "Sum": "2", ... }, ... }
אכיפת מדיניות של OASValidation
כדי לוודא שמדיניות ה-OASValidation פועלת כמצופה, שולחים בקשה ל-Gateway באמצעות הפקודה הבאה:
curl "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: badvalue"
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער. אפשר לאחזר את כתובת ה-IP של השער באמצעות הפקודה הבאה, שבהGATEWAY_NAMEהוא שם השער:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
-
HOST_NAMEהוא שם המארח שמוגדר ב-HTTPRouteשל שער. -
API_KEYהוא הערך של מפתח ה-API שהתקבל בהגדרת הבדיקה.
הפקודה כוללת ערך לא חוקי בכותרת X-Request-Type. הבקשה תיכשל
עם תגובה שדומה לתגובה הבאה:
{"fault":{"faultstring":"OASValidation oas-validation-1 with resource \"oas:\/\/oas-validation-1.yaml\": failed with reason: \"[ERROR - Instance value (\"badvalue\") not found in enum (possible values: [\"internal\",\"external\"]): []]\"","detail":{"errorcode":"steps.oasvalidation.Failed"}}}
אם תשלחו את אותה בקשה עם ערך תקין בכותרת X-Request-Type, היא תאושר. לדוגמה:
curl "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" -i
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער. אפשר לאחזר את כתובת ה-IP של השער באמצעות הפקודה הבאה, שבהGATEWAY_NAMEהוא שם השער:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
-
HOST_NAMEהוא שם המארח שמוגדר ב-HTTPRouteשל שער. -
API_KEYהוא הערך של מפתח ה-API שהתקבל בהגדרת הבדיקה.
אכיפת המדיניות של ServiceCallout
כדי לוודא שהמדיניות ServiceCallout נאכפת, פותחים סשן ניפוי באגים ושולחים כמה בקשות תקינות לשרת ה-proxy.
כדי לפתוח סשן ניפוי באגים, מבצעים את השלבים הבאים:
- נכנסים לדף API Proxies במסוף Google Cloud .
- בוחרים את ה-proxy
global-ext-lb1-apim-policyשפרסתם בסביבה שנוצרה עבור Apigee Operator for Kubernetes. - לוחצים על הכרטיסייה ניפוי באגים.
- בחלון Debug session (סשן ניפוי באגים), לוחצים על Start Debug Session (התחלת סשן ניפוי באגים).
- בחלונית Debug session, בוחרים באפשרויות הבאות:
- סביבה: בוחרים את הסביבה שיצרתם עבור Apigee Operator for Kubernetes מתוך רשימת הסביבות הזמינות.
- מסנן: בוחרים באפשרות ללא (כל העסקאות).
- לוחצים על התחלה.
אחרי שמתחילים את הסשן, אפשר לשלוח בקשות תקינות לשרת ה-proxy:
curl "GATEWAY_IP_ADDRESSget" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" -i
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער. אפשר לאחזר את כתובת ה-IP של השער באמצעות הפקודה הבאה, שבהGATEWAY_NAMEהוא שם השער:kubectl get gateway GATEWAY_NAME
-
HOST_NAMEהוא שם המארח שמוגדר ב-HTTPRouteשל שער. -
API_KEYהוא הערך של מפתח ה-API שהתקבל בהגדרת הבדיקה.
העסקאות של הבקשה והתשובה מוצגות בחלונית Transactions. בוחרים מהרשימה טרנזקציה שהושלמה בהצלחה כדי להציג את התהליך. אמור להופיע אישור שServiceCallout המדיניות בוצעה בהצלחה.
אכיפת מדיניות KVM
כשהמדיניות של KVM מופעלת בהצלחה, היא מאתחלת את KVM עם ערך התחלתי למפתח mykey.
כשמתקבלת תגובה לעסקה, מדיניות ה-KVM מאחזרת את הערך של mykey ומאחסנת אותו בכותרת התגובה mykvm.
כשמדיניות ה-KVM מופעלת שוב, היא מוסיפה את הערך החדש של mykey שהתקבל מכותרת הבקשה mykvm.
אפשר לבדוק את הכותרות של כל עסקה כדי לוודא שהמדיניות מאחסנת ערך ב-KVM בעסקה אחת ומאחזרת את אותו ערך בעסקה הבאה, כמו שמוצג בדוגמה הבאה.
בודקים את מדיניות ה-KVM:
- שליחת בקשה ל-Gateway:
curl -i "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" \ -H "KVM_NAME: next-value1" -i
כאשר:
-
GATEWAY_IP_ADDRESSהיא כתובת ה-IP של השער. אפשר לאחזר את כתובת ה-IP של השער באמצעות הפקודה הבאה, שבהGATEWAY_NAMEהוא שם השער:kubectl get gateway GATEWAY_NAME
-
HOST_NAMEהוא שם המארח שמוגדר ב-HTTPRouteשל שער. -
API_KEYהוא הערך של מפתח ה-API שהתקבל בהגדרת הבדיקה. -
KVM_NAMEהוא השם של ה-KVM.
-
- בודקים את כותרות התגובה כדי לוודא שמדיניות ה-KVM בוצעה בהצלחה ושערך ראשוני אוחסן עבור
mykvm. התגובה אמורה להיראות כך:HTTP/1.1 200 OK access-control-allow-credentials: true access-control-allow-origin: * Content-Length: 517 content-type: application/json date: ... server: gunicorn/19.9.0 mykvm: initvalue via: 1.1 google { "args": { ... "url": "http://apigee-apim-operator-test.apigee.net/get" } }
- שולחים בקשה נוספת אל שער התשלומים:
curl -i "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "mykvm: next"X-Request-Type: external" -H "mykvm: next-value2" -i
התגובה אמורה להיות דומה לזו:
HTTP/1.1 200 OK access-control-allow-credentials: true access-control-allow-origin: * Content-Length: 517 content-type: application/json date: ... server: gunicorn/19.9.0 mykvm: next-value2 via: 1.1 google { "args": { ... "url": "http://apigee-apim-operator-test.apigee.net/get?rq-param2=rq-val1&x-param1=xval1" } }
אפשר לראות שמדיניות KVM בוצעה בהצלחה כי הערך של הכותרת
mykvmעודכן לערך של כותרת הבקשהmykvm. - שליחת בקשה נוספת:
curl -i "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" -H "mykvm: next-value3" -i
התגובה אמורה להיות דומה לזו:
HTTP/1.1 200 OK access-control-allow-credentials: true access-control-allow-origin: * Content-Length: 517 content-type: application/json date: ... server: gunicorn/19.9.0 mykvm: next-value2 via: 1.1 google { "args": { ... "url": "http://apigee-apim-operator-test.apigee.net/get?rq-param2=rq-val1&x-param1=xval1" } }
הערך של הכותרת
mykvmמתעדכן שוב, ומוצג שהערך שמוצג בתגובה הוא הערכים שמאוחסנים בעסקה הקודמת.
פתרון בעיות
אם נתקלתם בבעיות בהוספת מדיניות ל-GKE Gateway, תוכלו לעיין במאמר פתרון בעיות ב-Apigee Operator for Kubernetes כדי למצוא פתרונות לשגיאות נפוצות.