הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
בדוגמה הזו נראה איך משתמשים ב-Apigee Adapter ל-Envoy עם פריסת Apigee Hybrid.
דרישות מוקדמות
| לפני שמתחילים: |
|---|
|
|
|
|
|
|
סקירה כללית
בדוגמה הזו מוסבר איך להשתמש ב-Apigee Adapter ל-Envoy עם Apigee Hybrid. בדוגמה הזו, תפרסו שירות HTTP פשוט באותו אשכול Kubernetes שבו נפרס Apigee hybrid. לאחר מכן, מגדירים את Apigee Adapter ל-Envoy כדי לנהל קריאות ל-API של השירות הזה באמצעות Apigee.
האיור הבא מציג את הארכיטקטורה הבסיסית של השילוב של Apigee hybrid:

Envoy proxy נפרס עם שירות ה-HTTP של היעד כ-Istio sidecar ב-Istio service mesh. ה-sidecar מטפל בתעבורת ה-API אל שירות היעד וממנו, ומתקשר עם השירות המרוחק. השירות המרוחק מתקשר גם עם מישור הניהול ההיברידי כדי לאחזר מידע על מוצרי API ועל שרתי proxy.
בדיקת ההגדרות האישיות של gcloud
- בודקים שההגדרה של
gcloudמוגדרת לפרויקט GCP שמשויך לארגון ההיברידי.כדי להציג את ההגדרות הנוכחיות:
gcloud config list
במקרה הצורך, מגדירים את מזהה הפרויקט הנכון ב-GCP באמצעות הפקודה הבאה:
gcloud config set project project-id
- צריך לעבור אימות באמצעות Google Cloud SDK (gcloud) עבור פרויקט GCP:
gcloud auth login
הקצאת משאבים ב-Apigee Hybrid
בשלב הזה, משתמשים ב-Remote Service CLI כדי להקצות שירות היברידי באמצעות remote-service API proxy. פקודת ההקצאה גם מגדירה אישור ב-Apigee ויוצרת פרטי כניסה שהשירות המרוחק ישתמש בהם כדי להתחבר בחזרה ל-Apigee בצורה מאובטחת.
- עוברים לספרייה
$CLI_HOME:cd $CLI_HOME
- אם אתם לא הבעלים של פרויקט GCP שמשויך לארגון Apigee hybrid, ודאו שחשבון המשתמש שלכם ב-GCP כולל את התפקיד
Apigee Organization Admin. מידע נוסף זמין במאמר הענקה, שינוי וביטול של גישה למשאבים. - מריצים את הפקודה הבאה כדי לקבל אסימון גישה:
TOKEN=$(gcloud auth print-access-token);echo $TOKEN
- יוצרים את משתני הסביבה הבאים. המשתנים האלה ישמשו כפרמטרים בסקריפט להקצאת הרשאות:
export ORG=organization_nameexport ENV=environment_nameexport RUNTIME=host_alias_urlexport NAMESPACE=hybrid_runtime_namespaceכאשר:
משתנה תיאור organization_name השם של הארגון ב-Apigee בהתקנת Apigee Hybrid. environment_name השם של סביבה בארגון Apigee Hybrid. host_alias_url כתובת URL שכוללת את hostAliasעבור מארח וירטואלי שהוגדר בהגדרה ההיברידית. כתובת ה-URL חייבת להתחיל ב-https://. לדוגמה:https://apitest.apigee-hybrid-docs.nethybrid_runtime_namepace מרחב השמות שבו רכיבי זמן הריצה של Hybrid נפרסים. הערה: מרחב השמות שמוגדר כברירת מחדל לפריסת Hybrid הוא apigee. - מריצים את הפקודה הבאה כדי להקצות את שרת ה-proxy של השירות המרוחק ל-Apigee Hybrid:
אם אתם לא משדרגים, משתמשים בפקודה הזו כדי להקצות את Apigee:
./apigee-remote-service-cli provision --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --token $TOKEN > config.yamlאם אתם משדרגים, משתמשים בפקודה הזו עם הדגל
--force-proxy-installכדי להקצות את Apigee:./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --token $TOKEN > config.yaml - בודקים את התוכן של הקובץ
config.yaml. הוא אמור להיראות בערך כך:# Configuration for apigee-remote-service-envoy # generated by apigee-remote-service-cli provision on 2020-07-06 18:03:58 apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.apigee-hybrid-docs.net/remote-service org_name: hybrid-docs env_name: envoy allow_unverified_ssl_cert: true analytics: collection_interval: 10s fluentd_endpoint: apigee-udca-hybrid-docs-envoy.apigee:20001 tls: ca_file: /opt/apigee/tls/ca.crt key_file: /opt/apigee/tls/tls.key cert_file: /opt/apigee/tls/tls.crt --- apiVersion: v1 kind: Secret metadata: name: hybrid-docs-envoy-policy-secret namespace: apigee type: Opaque data: remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci... remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS... remote-service.properties: a2lkPTIwMjAtMDctMDZ...
- מחילים את הגדרת השירות (הפלט של הקובץ שנוצר על ידי פקודת ההקצאה) על האשכול:
kubectl apply -f $CLI_HOME/config.yaml
- צריך לאמת את ה-proxy והאישור. הפעולות הבאות צריכות להחזיר JSON תקין:
curl -i $RUNTIME/remote-service/certs
הפלט אמור להיראות כך:
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kid": "2020-05-11T11:32:26-06:00", "kty": "RSA", "n": "0v-nbTQyAmtVZ-wZRP0ZPIbrVaX91YO9JZ9xCQPb4mOdOSS7yKfTDJGg0KM130sGVYBvR76alN8 fhrrSDEG5VXG8YYMqPXarwRC7MRJWocCQ_ECYrjDD0_Q018M2HyXZYSd8fhAogi9mVUYsEmCKqJH53Dh1 jqsHOQzBLKsX0iDO9hEZNFtjbX0UCbSxsUlmBCub7Uj2S-PahA6DEQOMhQjZM7bBMtkTMpFmaJ_RZTmow BHP57qMna17R8wHD4kUsO2u_-3HHs5PSj1NrEYoVU2dwLQw0GlkB__ZWeFgXTqot81vb-PmoM9YxwoZrm TcHdljugWy_s7xROPzTod0uw" } ] }
יצירת קובצי תצורה לדוגמה
משתמשים בפקודה apigee-remote-service-cli samples create כדי ליצור קובצי הגדרות לדוגמה.
בדוגמה הזו, צריך את הקבצים שנוצרו:
-
httpbin.yaml– הגדרת פריסה לשירות HTTP. -
apigee-envoy-adapter.yaml– הגדרת פריסה של השירות המרוחק עבור Envoy. -
envoyfilter-sidecar.yaml– הגדרה שמתקינה EnvoyFilter. למרחב השמות שמוגדר כברירת מחדל.
כדי ליצור את הדוגמאות:
- עוברים לספרייה
$CLI_HOME. מריצים את הפקודה הבאה כדי ליצור את הקבצים:
./apigee-remote-service-cli samples create -c ./config.yaml
הקבצים הבאים מופקים בספרייה
./samples:ls samples apigee-envoy-adapter.yaml envoyfilter-sidecar.yaml httpbin.yaml request-authentication.yaml
מידע נוסף זמין במאמר בנושא פקודת דוגמאות.
פריסת שירות בדיקה באשכול
בשלב הזה תפרסו שירות פשוט לבדיקת בקשות ותשובות של HTTP באותו אשכול שבו נפרס Apigee Hybrid.
- מפעילים את ההחדרה של Istio במרחב השמות
defaultשל האשכול. בשלב מאוחר יותר, תפרסו Envoy sidecar לאותו אשכול. הפעלת ההחדרה של Istio מאפשרת פריסה של sidecar. בדוגמה הזו נעשה שימוש במרחב השמותdefault, וכל ההוראות הבאות מניחות שזה המצב.kubectl label namespace default istio-injection=enabled
- החלת שירות
httpbinפשוט על האשכול במרחב השמות שמוגדר כברירת מחדל:kubectl apply -f $CLI_HOME/samples/httpbin.yaml
- עכשיו בודקים את השירות. מפעילים שירות
curlשפועל באשכול ופותחים טרמינל:kubectl run -it curl --image=curlimages/curl --restart=Never -- sh
- כדי לבדוק את השירות, מתקשרים אליו מתוך האשכול:
curl -i httpbin.default.svc.cluster.local/headers
אם הפעולה בוצעה בהצלחה, יוצג סטטוס 200 והשירות יחזיר רשימה של כותרות. לדוגמה:
HTTP/1.1 200 OK server: envoy date: Tue, 12 May 2020 17:09:01 GMT content-type: application/json content-length: 328 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 7 { "headers": { "Accept": "*/*", "Content-Length": "0", "Host": "httpbin.default.svc.cluster.local", "User-Agent": "curl/7.70.0-DEV", "X-B3-Parentspanid": "69f88bc3e322e157", "X-B3-Sampled": "0", "X-B3-Spanid": "8dd725f30e393d8b", "X-B3-Traceid": "38093cd817ad30a569f88bc3e322e157" } }
הרצת שירות מרוחק עבור Envoy
בשלב הזה מפעילים את שירות הלקוח המרוחק עבור Envoy ברשת השירותים שבה מותקן Apigee Hybrid. השירות הזה מספק את נקודות הקצה ל-sidecar של Istio שמותקנים בשירותי היעד. בנוסף, תתקינו sidecar
עם שירות httpbin.
- החלת Apigee Remote Service על רשת השירותים:
kubectl apply -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
- מחילים את
EnvoyFilterעל קבצי ה-sidecar של Istio במרחב השמות שמוגדר כברירת מחדל. EnvoyFilterמאפשר ל-httpbinsidecar לתקשר עם Apigee Remote Service.kubectl apply -f $CLI_HOME/samples/envoyfilter-sidecar.yaml
בדיקת ההטמעה
- עכשיו חוזרים אל מעטפת ה-curl שפתחתם בשלב
פריסת שירות בדיקה באשכול ומפעילים את השירות
httpbin:curl -i httpbin.default.svc.cluster.local/headers
השירות מנוהל עכשיו על ידי Apigee, ומכיוון שלא סיפקתם מפתח API, השירות מחזיר את השגיאה הבאה.
curl -i httpbin.default.svc.cluster.local/headers HTTP/1.1 403 Forbidden date: Tue, 12 May 2020 17:51:36 GMT server: envoy content-length: 0 x-envoy-upstream-service-time: 11
- מגדירים מוצר API ומקבלים מפתח API כמו שמוסבר במאמר איך מקבלים מפתח API.
- מבצעים קריאה ל-API באמצעות המפתח:
export APIKEY=YOUR_API_KEYcurl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: $APIKEY"הקריאה צריכה להצליח עם סטטוס 200 ולהחזיר רשימה של כותרות בתגובה. לדוגמה:
curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS" HTTP/1.1 200 OK server: envoy date: Tue, 12 May 2020 17:55:34 GMT content-type: application/json content-length: 828 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 301 { "headers": { "Accept": "*/*", "Content-Length": "0", "Host": "httpbin.default.svc.cluster.local", "User-Agent": "curl/7.70.0-DEV", "X-Api-Key": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS", "X-Apigee-Accesstoken": "", "X-Apigee-Api": "httpbin.default.svc.cluster.local", "X-Apigee-Apiproducts": "httpbin", "X-Apigee-Application": "httpbin", "X-Apigee-Authorized": "true", "X-Apigee-Clientid": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS", "X-Apigee-Developeremail": "jdoe@example.com", "X-Apigee-Environment": "envoy", "X-Apigee-Organization": "acme-org", "X-Apigee-Scope": "", "X-B3-Parentspanid": "1476f9a2329bbdfa", "X-B3-Sampled": "0", "X-B3-Spanid": "1ad5c19bfb4bc96f", "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa" } }
השלבים הבאים
תעבורת הנתונים של API לשירות httpbin מנוהלת עכשיו על ידי Apigee. אלה כמה תכונות שכדאי לנסות:
- אם הגדרתם את מוצר ה-API שלכם כמו שמוסבר במאמר איך מקבלים מפתח API, מכסת הבקשות הוגדרה ל-5 בקשות לדקה. כדאי לנסות להתקשר אל שירות
httpbinכמה פעמים נוספות כדי להפעיל את המכסה. כשמגיעים למכסה, מוחזרת שגיאה בסטטוס HTTP 403. - ניגשים ל-Apigee Analytics בממשק המשתמש של Apigee. עוברים אל Analyze > API Metrics > API Proxy Performance.
- יוצרים אסימוני JWT ומשתמשים בהם כדי לאמת קריאות ל-API.
- משתמשים ב-CLI כדי לנהל, ליצור אסימונים ולשלוט בהתאמות. פרטים על CLI זמינים במאמר העזר.