יצירת APIMExtensionPolicy

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

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

בדף הזה מוסבר איך להחיל מדיניות של Apigee על תנועה שעוברת דרך שער Kubernetes על ידי יצירת APIMExtensionPolicy משאב מותאם אישית. ‫Apigee Operator for Kubernetes עוקב אחרי משאבי APIMExtensionPolicy ומגדיר את השער בהתאם.

Apigee

אם אתם משתמשים ב-Apigee, פועלים לפי השלבים הבאים.

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

לפני שמתחילים במשימה הזו, צריך לבצע את השלבים הבאים:

יצירת APIMExtensionPolicy

בשלב הזה, יוצרים את APIMExtensionPolicy ומחילים אותו על GKE Gateway שפועל באשכול. המדיניות הזו חלה על כל התנועה שעוברת דרך Gateway ועל HTTPRoutes שמשויך אליו, באופן דומה ל-flowhook ברמת הסביבה ב-Apigee כיום.

כדי ליצור את APIMExtensionPolicy:

  1. יוצרים קובץ בשם global-ext-lb1-apim-policy.yaml עם התוכן הבא:
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1
        kind: Gateway
        namespace: default
        
  2. מחליפים את ENV_NAME בשם של סביבת Apigee שנוצרה בשלב ההתקנה יצירת סביבת Apigee.

    הערה: אם מתקינים את Apigee Operator for Kubernetes באמצעות הדגל generateEnv=TRUE, לא צריך למלא את השדה apigeeEnv.

    אתם יכולים לראות את כל הסביבות שזמינות בדף Environments במסוף Google Cloud .

  3. החלת המדיניות:
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
        

    אחרי שמחילים את המדיניות, Apigee Operator for Kubernetes יוצר ברקע משאבי רשת.

  4. כדי לבדוק את הסטטוס של APIMExtensionPolicy, מריצים את הפקודה הבאה:
    kubectl -n apim get APIMExtensionPolicy
        

    הפלט אמור להיראות כך, עם STATE של RUNNING:

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING
        

בדיקת המדיניות

משתמשים בפקודה הבאה כדי לשלוח בקשה ל-Gateway:

  1. קבלת כתובת ה-IP של השער:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    מחליפים את GATEWAY_NAME בשם של שער, לדוגמה global-ext-lb1.

  2. שליחת בקשה לנקודת קצה שהוגדרה ב-HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    מחליפים את HOST_NAME בשם המארח שהוגדר ב-HTTPRoute של שער, לדוגמה example.httpbin.com.

  3. הבקשה אמורה להיכשל כי הערך defaultSecurityEnabled: true הוגדר במשאב APIMExtensionPolicy, שמאפשר אימות של מפתח API ושל אסימון גישה. אמורה להתקבל תגובה שדומה לתגובה הבאה:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    המשמעות היא שמדיניות התוסף Apigee פעילה, ושהאכיפה של מפתח ה-API ואימות אסימון הגישה פעילים.

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

Apigee Hybrid

אם אתם משתמשים ב-Apigee hybrid, אתם צריכים לפעול לפי השלבים הבאים.

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

ההליך הזה מניח שהתקנתם את Apigee Operator for Kubernetes על ידי ביצוע השלבים במאמר התקנת Apigee Operator for Kubernetes עבור Apigee hybrid.

יצירת סוד של אישור TLS

ב-APIMExtensionPolicy צריך להזין את האישור הציבורי בקידוד Base64 שמשויך לשם המארח של קבוצת הסביבות. יצרתם את האישור הזה במאמר התקנת סביבת Apigee Hybrid באמצעות Helm. צריך ליצור סוד של Kubernetes במרחב השמות apim כדי לספק את האישור הזה לאופרטור.

  1. מקבלים את מחרוזת האישור בקידוד Base64 מהקובץ שיצרתם במהלך ההתקנה:
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. יוצרים קובץ בשם secret-cert.yaml עם התוכן הבא:
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. מחליפים את BASE64_ENCODED_CERT_STRING בפלט מהפקודה cat בשלב 1.
  4. מחילים את הסוד על האשכול:
    kubectl apply -f secret-cert.yaml
        

הגדרה והחלה של APIMExtensionPolicy

מגדירים משאב APIMExtensionPolicy ומחילים אותו על Istio Gateway שפועל באשכול. התוסף הזה של המדיניות מיירט תנועה שמנוהלת על ידי שער (Gateway) והתוסף המשויך HTTPRoutes, ומחיל מדיניות של Apigee לפני העברת בקשות ליעד בקצה העורפי.

  1. יוצרים קובץ בשם istio-gateway-apim-policy.yaml עם התוכן הבא:
    # istio-gateway-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: istio-gateway-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME
      ingressCertSecret: apigee-conf
      apigeeAuthority: HOST_NAME
      apigeeIngressIP: INGRESS_IP_ADDRESS
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        group: gateway.networking.k8s.io
        kind: Gateway
        name: istio-gateway
        namespace: default
        
  2. מחליפים את המשתנים הבאים:
    • ENV_NAME: השם של סביבת Apigee Hybrid שיצרתם עם הפעלת תוספי שירות, לדוגמה my-hybrid-env.
    • HOST_NAME: שם הדומיין שמשמש לקבוצת הסביבות, לדוגמה my-proxies.example.com.
    • INGRESS_IP_ADDRESS: כתובת ה-IP של תעבורת הנתונים הנכנסת (ingress) של זמן הריצה של Apigee Hybrid. פרטים על אחזור כתובת ה-IP הזו מופיעים במאמר בנושא חשיפת תעבורת נתונים נכנסת (ingress) ב-Apigee.
  3. מחילים את המדיניות על האשכול:
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. אחרי שהמשאב מוחל, Apigee Operator for Kubernetes מתחיל להגדיר את משאבי הרשת של השער. בודקים את הסטטוס של APIMExtensionPolicy:
    kubectl -n apim get APIMExtensionPolicy
        
  5. מחכים עד שSTATE מציג RUNNING. הפלט אמור להיראות כך:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

בדיקת המדיניות

ב-APIMExtensionPolicy שנוצר בשלב הקודם, הערך של defaultSecurityEnabled הוגדר ל-true. כך מופעלות באופן אוטומטי מדיניות אימות של מפתח API ושל טוקן OAuth2 לתנועה שתואמת לשער הזה. כדי לבדוק את זה, שולחים בקשה לא מאומתת לשירות לדוגמה httpbin שהגדרתם כשאימתתם את הגדרת Istio Gateway ב-Verify the Istio Gateway setup (אימות ההגדרה של Istio Gateway).

  1. קבלת כתובת ה-IP של השער:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. שליחת בקשה לנקודת הקצה /get שהוגדרה ב-HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. מכיוון שנדרש אימות ל-defaultSecurityEnabled: true (למשל, מפתח API תקין), מערכת Apigee צריכה לדחות את הבקשה עם שגיאת אימות. התשובה צריכה להיות דומה לתשובה הבאה:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    הפלט הזה מאשר ש-APIMExtensionPolicy פעיל ושמדיניות Apigee נאכפת על ידי Istio Gateway.

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

כאן מוסבר איך ליצור מוצרי API, מפתחים ואפליקציות כדי לקבל מפתחות API לבקשות מאומתות: