הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
בדף הזה מוסבר איך להחיל מדיניות Apigee על תנועה שעוברת דרך שער Kubernetes באמצעות יצירה של APIMExtensionPolicy משאב מותאם אישית. Apigee Operator for Kubernetes עוקב אחרי משאבי APIMExtensionPolicy ומגדיר את השער בהתאם.
Apigee
אם אתם משתמשים ב-Apigee, אתם צריכים לבצע את השלבים הבאים.
לפני שמתחילים
לפני שמתחילים במשימה הזו, צריך לבצע את השלבים הבאים:
- מוודאים ש-Workload Identity מוגדר באשכול GKE. במאמר הגדרת איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE מפורטים השלבים הנדרשים.
- מוודאים ששער GKE מוגדר באשכול ופועל. פרטים נוספים מופיעים במאמר בנושא פריסת שערים.
- מתקינים את Apigee Operator ל-Kubernetes. הוראות ההתקנה מופיעות במאמר התקנת Apigee Operator ל-Kubernetes.
יצירת APIMExtensionPolicy
בשלב הזה, יוצרים את APIMExtensionPolicy ומחילים אותו על GKE
Gateway שפועל באשכול. המדיניות הזו חלה על כל התעבורה שעוברת דרך
השער וה-HTTPRoutes שמשויך אליו, והיא פועלת באופן דומה ל-flowhook ברמת הסביבה ב-Apigee כיום.
כדי ליצור את APIMExtensionPolicy:
- יוצרים קובץ בשם
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 - מחליפים את
ENV_NAMEבשם של סביבת Apigee שנוצרה בשלב ההתקנה יצירת סביבת Apigee.הערה: אם מתקינים את Apigee Operator for Kubernetes באמצעות הדגל
generateEnv=TRUE, לא צריך למלא את השדהapigeeEnv.אתם יכולים לראות את כל הסביבות שזמינות בדף Environments במסוף Google Cloud .
- החלת המדיניות:
kubectl -n apim apply -f global-ext-lb1-apim-policy.yamlאחרי שמחילים את המדיניות, Apigee Operator for Kubernetes יוצר ברקע משאבי רשת.
- בודקים את הסטטוס של
APIMExtensionPolicyבאמצעות הפקודה הבאה:kubectl -n apim get APIMExtensionPolicyהפלט אמור להיראות כך, עם
STATEשלRUNNING:NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
בדיקת המדיניות
משתמשים בפקודה הבאה כדי לשלוח בקשה ל-Gateway:
- קבלת כתובת ה-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. - שליחת בקשה לנקודת קצה שהוגדרה ב-
HTTPRoute:curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"מחליפים את
HOST_NAMEבשם המארח שהוגדר ב-HTTPRouteשל השער, לדוגמהexample.httpbin.com. - הבקשה אמורה להיכשל כי ההרשאה
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.
- מקבלים את מחרוזת האישור בקידוד Base64 מהקובץ שיצרתם במהלך ההתקנה:
cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64 - יוצרים קובץ בשם
secret-cert.yamlעם התוכן הבא:# secret-cert.yaml apiVersion: v1 kind: Secret metadata: name: apigee-conf namespace: apim data: ca.crt: BASE64_ENCODED_CERT_STRING - מחליפים את
BASE64_ENCODED_CERT_STRINGבפלט מהפקודהcatבשלב 1. - מחילים את הסוד על האשכול:
kubectl apply -f secret-cert.yaml
הגדרה והחלה של APIMExtensionPolicy
מגדירים משאב APIMExtensionPolicy ומחילים אותו על Istio Gateway שפועל באשכול. התוסף הזה של המדיניות מיירט תנועה שמנוהלת על ידי שער (Gateway)
והתוסף המשויך HTTPRoutes, ומחיל מדיניות של Apigee לפני העברת
בקשות ליעד העורפי.
- יוצרים קובץ בשם
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 - מחליפים את המשתנים הבאים:
-
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.
-
- מחילים את המדיניות על האשכול:
kubectl -n apim apply -f istio-gateway-apim-policy.yaml - אחרי שהמשאב מוחל, Apigee Operator for Kubernetes מתחיל להגדיר את משאבי הרשת של השער. בודקים את הסטטוס של
APIMExtensionPolicy:kubectl -n apim get APIMExtensionPolicy - מחכים עד ש
STATEמציגRUNNING. הפלט אמור להיראות כך:NAME STATE ERRORMESSAGE istio-gateway-apim-policy RUNNING
בדיקת המדיניות
בקובץ APIMExtensionPolicy שיצרתם בשלב הקודם, הערך של defaultSecurityEnabled הוגדר כ-true. הפעולה הזו מפעילה באופן אוטומטי מדיניות אימות של מפתחות API ואסימוני OAuth2 לתנועה שתואמת לשער הזה.
כדי לבדוק את זה, שולחים בקשה לא מאומתת לשירות לדוגמה httpbin
שהגדרתם כשאימתתם את הגדרת Istio Gateway בקטע אימות ההגדרה של Istio Gateway.
- קבלת כתובת ה-IP של השער:
export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')echo $GATEWAY_IP - שולחים בקשה לנקודת הקצה
/getשהוגדרה ב-HTTPRoute:curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v - מכיוון שנדרש אימות (למשל מפתח 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 לבקשות מאומתות: