יצירת APIMExtensionPolicy

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

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

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

Apigee

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

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

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

יצירת APIMExtensionPolicy

בשלב הזה, יוצרים את APIMExtensionPolicy ומחילים אותו על GKE 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 שיצרתם עם הפעלת Service Extensions, לדוגמה 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 בקטע אימות ההגדרה של 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. מכיוון שנדרש אימות (למשל מפתח API תקין) כדי לגשת אל defaultSecurityEnabled: true, מערכת Apigee צריכה לדחות את הבקשה עם שגיאת אימות. התגובה אמורה להיות דומה לזו:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

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

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

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