הוספת מדיניות לשער GKE

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

בדף הזה מוסבר איך להוסיף מדיניות של זמן ריצה של Apigee ו Google מדיניות להוספת טוקנים לשער Google Kubernetes Engine ‏ (GKE) באמצעות Apigee Operator for Kubernetes. הוספה של קבוצת מדיניות זמינה ל-Gateway מאפשרת להרחיב את הפונקציונליות של ה-Gateway מעבר לאכיפה של מוצר API, כך שתכלול אבטחה נוספת וכללים עסקיים.

אפשר להשתמש ב-Apigee Operator for Kubernetes כדי להוסיף את המדיניות הבאה ל-Gateway:

סקירה כללית

בקטעים הבאים מוסבר איך:

לפני שמתחילים

כדי לשנות את GKE Gateway באמצעות קבוצת המדיניות המלאה שמשמשת כדוגמה במדריך הזה, צריך חשבון שירות עם התפקידים הנדרשים ליצירת טוקנים ב-Apigee ולפריסת פרוקסי ותוספים. אם בחרתם לא ליצור אסימונים של Google , אתם לא צריכים להוסיף את התפקידים הנוספים לחשבון השירות, ואתם יכולים לדלג לקטע הבא.

כדי ליצור חשבון שירות עם ההרשאות הנדרשות:

  1. אם יצרתם חשבון שירות בשם apigee-apim-gsa במדריך ההתקנה של Apigee Operator for Kubernetes , אתם יכולים לדלג על השלב הזה ולעבור לשלב הבא. אם לא, יוצרים את חשבון השירות:
    gcloud iam service-accounts create apigee-apim-gsa --project=$PROJECT_ID
  2. מקצים לחשבון השירות את התפקיד שנדרש ליצירת אסימונים:
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/iam.serviceAccountTokenCreator"
  3. מקצים לחשבון השירות 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.

מוסיפים את המדיניות לשער:

  1. יוצרים קובץ חדש בשם apigee-policies.yaml במרחב השמות apim.
  2. מעתיקים את התוכן של הקובץ הבא לקובץ החדש שיצרתם:
    # 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"
  3. מחילים את הקובץ yaml על שער באמצעות הפקודה הבאה:
    kubectl -n apim apply -f apigee-policies.yaml

יצירת TemplateRule כתבנית SharedFlow

בשלב הזה תיצרו TemplateRule כדי לאכוף את כללי המדיניות שהוספתם ל-Gateway. כלל תבנית הוא כלל ל-SharedFlows שנוצר על ידי אדמינים בארגון כדי לוודא שמפתחי שירותים מחילים על התנועה בשער רק מדיניות מאושרת. כלל תבנית מבטיח שהמפתחים יבינו אילו כללי מדיניות זמינים להם, אילו כללי מדיניות נדרשים לתרחישי שימוש ספציפיים, ואילו כללי מדיניות לא יכולים לשמש מפתחי שירותים.

יצירת כלל של תבנית

יוצרים כלל תבנית כדי לאכוף את השימוש במדיניות AssignMessage:

  1. יוצרים קובץ yaml חדש בשם template-rule.yaml במרחב השמות apim.
  2. מעתיקים את התוכן של הקובץ הבא לקובץ החדש שיצרתם:
    # 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 כדי לכלול את כלל התבנית שיצרתם בקטע הקודם:

  1. יוצרים קובץ yaml חדש בשם new-admin-template.yaml במרחב השמות apim.
  2. מעתיקים את התוכן של הקובץ הבא לקובץ החדש שיצרתם:
    # 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
  3. מחילים את התבנית החדשה באמצעות הפקודה הבאה:
    kubectl apply -f new-admin-template.yaml

פריסת מדיניות Apigee Gateway

בשלב הזה, תחיל קובץ חדש על שער התשלומים שלך, שיכלול את המפרטים של ApigeeGatewayPolicy. המדיניות הזו משמשת לפריסת תבנית Apigee בשער.

פורסים את מדיניות Apigee Gateway:

  1. יוצרים קובץ yaml חדש בשם apigee-gateway-policy-withSA.yaml במרחב השמות apim.
  2. מעתיקים את התוכן של הקובץ הבא לקובץ החדש שיצרתם:
    # 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.

  3. החלת המדיניות:
    kubectl apply -f apigee-gateway-policy-withSA.yaml
  4. מאמתים את סטטוס הפריסה של מדיניות השער החדשה:
    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.

כדי לפתוח סשן ניפוי באגים, מבצעים את השלבים הבאים:

  1. נכנסים לדף API Proxies במסוף Google Cloud .

    מעבר אל API Proxies

  2. בוחרים את ה-proxy global-ext-lb1-apim-policy שפרסתם בסביבה שנוצרה עבור Apigee Operator for Kubernetes.
  3. לוחצים על הכרטיסייה ניפוי באגים.
  4. בחלון Debug session (סשן ניפוי באגים), לוחצים על Start Debug Session (התחלת סשן ניפוי באגים).
  5. בחלונית Debug session, בוחרים באפשרויות הבאות:
    • סביבה: בוחרים את הסביבה שיצרתם עבור Apigee Operator for Kubernetes מתוך רשימת הסביבות הזמינות.
    • מסנן: בוחרים באפשרות ללא (כל העסקאות).
  6. לוחצים על התחלה.

אחרי שמתחילים את הסשן, אפשר לשלוח בקשות תקינות לשרת ה-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:

  1. שליחת בקשה ל-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.

  2. בודקים את כותרות התגובה כדי לוודא שמדיניות ה-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"
      }
    }
  3. שולחים בקשה נוספת אל שער התשלומים:
    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.

  4. שליחת בקשה נוספת:
    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 כדי למצוא פתרונות לשגיאות נפוצות.

המאמרים הבאים