משימות שילוב של Kubernetes

אתם צופים במסמכי העזרה של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

הוספת פלאגין מותאם אישית

אפשר להוסיף תכונות ויכולות חדשות ל-microgateway על ידי כתיבת יישומי פלאגין מותאמים אישית. באמצעות יישומי פלאגין מותאמים אישית אפשר לבצע אינטראקציה פרוגרמטית עם הבקשות והתשובות שעוברות דרך המיקרו-שער.

בקטע הזה מוסבר איך לארוז ולפרוס פלאגינים למכונה של Edge Microgateway שפועלת באשכול Kubernetes.

בהמשך הקטע הזה נניח שאתם יודעים לכתוב ולהגדיר יישומי פלאגין להגדרה רגילה של Edge Microgateway. אם לא, אפשר לעיין במאמר פיתוח יישומי פלאגין בהתאמה אישית.

אריזה של יישומי הפלאגין

כדי לארוז יישומי פלאגין מותאמים אישית:

  1. כותבים את הפלאגין ובודקים אותו לפי ההוראות במאמר כתיבה של פלאגין פשוט.

  2. מניחים את קוד הפלאגין במבנה התיקיות המתאים. ספריות הפלאגינים חייבות לפעול לפי מבנה מוגדר. בדוגמה הבאה מוצג המבנה שצריך לפעול לפיו, כאשר response-uppercase ו-request-headers הם שמות של תיקיות שמכילות קוד של פלאגין בהתאמה אישית (השמות האלה הם דוגמאות בלבד, שמות התיקיות שלכם עשויים להיות שונים):

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. cd לתיקייה plugin.

  4. בתיקייה plugin, יוצרים קובץ zip של כל התיקייה plugins:

    zip -r plugins.zip plugins/

יצירת קובץ אימג' של Docker

  1. באותה ספרייה שבה נמצא קובץ ה-zip, יוצרים קובץ חדש בשם Dockerfile.
  2. מוסיפים את הקוד הבא לקובץ Dockerfile ושומרים אותו:

    FROM gcr.io/apigee-microgateway/edgemicro:latest
    RUN apt-get install unzip
    COPY plugins.zip /opt/apigee/
    RUN chown apigee:apigee /opt/apigee/plugins.zip
    RUN su - apigee -c "unzip /opt/apigee/plugins.zip -d /opt/apigee"
    EXPOSE 8000
    EXPOSE 8443
    ENTRYPOINT ["entrypoint"]
    
  3. יוצרים קובץ אימג' חדש של Docker ל-Edge Microgateway עם הפלאגינים שלכם ומעבירים את הקובץ למרשם של Docker. אפשר להשתמש במרשם הרצוי, למשל docker.io או gcr.io:

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins container-registry/your-project/edgemicroplugins
    docker push container-registry/your-project/edgemicroplugins
    

    לדוגמה:

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins gcr.io/my-project/edgemicroplugins
    docker push   gcr.io/my-project/edgemicroplugins
    

עדכון ההגדרה של Edge Microgateway

  1. מוסיפים את הפלאגינים לקובץ התצורה של Edge Microgateway. קובץ התצורה נמצא כאן:

    $HOME/.edgemicro/org-env-config.yaml
    

    לדוגמה:

    $HOME/.edgemicro/myorg-test-config.yaml

בהגדרה לדוגמה הבאה, נוספה הפלאגין בהתאמה אישית response-uppercase. הפלאגין oauth כבר היה שם כברירת מחדל.

  edgemicro:
    ...
    plugins:
      sequence:
        - oauth
        - response-uppercase

עדכון של אשכול Kubernetes

השלב האחרון הוא החלת שינוי התצורה על אשכול Kubernetes. Kubernetes ימשוך את התמונה החדשה עם קוד הפלאגין ששלחתם למרשם הקונטיינרים, וישתמש בה בכל מודולים חדשים שייווצרו.

אם פרסתם את Edge Microgateway כשירות

משתמשים בפקודה edgemicroctl כדי להחדיר את ההגדרות המעודכנות של Edge Microgateway:

  1. מעדכנים את הפריסה של Edge Microgateway באמצעות התמונה החדשה. לדוגמה:

    kubectl apply -f <(edgemicroctl -org=your_organization -env=your_environment -key=configuration_key -sec=configuration_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest)

    כאשר:

    • your_organization – הארגון ב-Apigee שציינתם בפקודה edgemicro configure.
    • your_environment – הסביבה שציינתם בפקודה edgemicro configure.
    • configuration_key – המפתח שהוחזר מהפקודה edgemicro configure.
    • configuration_secret – הסוד שהוחזר מהפקודה edgemicro configure.
    • config_file_path – הנתיב לקובץ התצורה של Edge Micro שהוחזר מהפקודה edgemicro configure.
    • container-registry – המרשם של Docker שאליו דחפתם את קובץ האימג'. לדוגמה, gcr.io או docker.io.
    • your_project_name – שם הפרויקט במאגר Docker שאליו דחפתם את קובץ האימג' של Docker.
    • image_name – השם של קובץ האימג' של Docker ששלחתם.

    דוגמה:

    kubectl apply -f <(edgemicroctl -org=jdoe -env=test -key=f2d2eaa52b758493d00cec656e574ac947bee1d701c5c5f3295e5eaa39a3b -sec=0c38cda3fac6c59152f15657052ba1728f8003c1a763cf08da2a -conf=/Users/jdoe/.edgemicro/apigeesearch-test-config.yaml -img=gcr.io/jdoe-project/edgemicroplugins:latest)
  2. בודקים את הפלאגין. קוראים ל-API כדי לראות אם מתקבלת ההתנהגות הצפויה. לדוגמה, בפלאגין 'תגובה באותיות רישיות', טקסט התגובה מומר לכל אות רישית, כפי שמוצג בהמשך:

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    פלט:

    HELLO WORLD
    
הזרקת ההגדרות החדשות באופן ידני

הזרקה ידנית היא גישה פשוטה, שבה מזריקים את ההגדרות החדשות משורת הפקודה.

  1. מריצים את הפקודה הבאה:

    kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest -svc=service_deployment_file)

    כאשר:

    • your_org – הארגון ב-Apigee שציינתם בפקודה edgemicro configure.
    • your_env – הסביבה שציינתם בפקודה edgemicro configure.
    • your_key – המפתח שהוחזר מהפקודה edgemicro configure.
    • your_secret – הסוד שהוחזר מהפקודה edgemicro configure.
    • config_file_path – הנתיב לקובץ התצורה של Edge Micro שהוחזר מהפקודה edgemicro configure.
    • container-registry – המרשם של Docker שאליו דחפתם את קובץ האימג'. לדוגמה, gcr.io או docker.io.
    • your_project_name – שם הפרויקט במאגר Docker שאליו דחפתם את קובץ האימג' של Docker.
    • image_name – השם של קובץ האימג' של Docker ששלחתם.
    • service_deployment_file – הנתיב לקובץ הפריסה של השירות שאליו יתווספו הפלאגינים. לדוגמה: samples/helloworld/helloworld.yaml.

    לדוגמה:

    kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -img=gcr.io/myproject/edgemicroplugins:latest -svc=samples/helloworld/helloworld.yaml)
  2. בודקים את הפלאגין. קוראים ל-API של השירות כדי לראות אם מתקבלת ההתנהגות הצפויה. לדוגמה, בפלאגין 'תגובה באותיות רישיות', הטקסט של התגובה מומר לאותיות רישיות בלבד, כפי שמוצג בהמשך:

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    פלט:

    HELLO WORLD
    

ביצוע שינויים בהגדרות של Edge Microgateway

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

  1. יוצרים קובץ תצורה secret.yaml לפי הדוגמה הבאה:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mgwsecret
    type: Opaque
    data:
      mgorg: EDGEMICRO_ORG
      mgenv: EDGEMICRO_ENV
      mgkey: EDGEMICRO_KEY
      mgsecret: EDGEMICRO_SECRET
      mgconfig: EDGEMICRO_CONFIG
    
  2. מציינים את הערך המקודד ב-base64 של EDGEMICRO_ORG, ‏ EDGEMICRO_ENV, ‏ EDGEMICRO_KEY, ‏ EDGEMICRO_SECRET:

    echo -n "your-org" | base64 | tr -d '\n'
    echo -n "your-org-env" | base64 | tr -d '\n'
    echo -n "your-mg-key" | base64 | tr -d '\n'
    echo -n "your-mg-secret" | base64 | tr -d '\n'
    
  3. מבצעים את השינויים בקובץ התצורה של Edge Microgateway לארגון ולסביבה:

    $HOME/.edgemicro/your_org-your_env-config.yaml
  4. מקודדים פעמיים את תוכן קובץ התצורה בקידוד Base64:

    cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64  | tr -d '\n'
  5. מחילים את השינויים ב-Kubernetes במרחב השמות שבו פועל השירות.

    kubectl apply -f secret.yaml -n 

אלו שינויים חדשים שלא מתבצעים באופן אוטומטי ב-pods קיימים של microgateway, אבל הם יתבצעו ב-pods החדשים. אפשר למחוק את ה-pod הקיים כדי שהפריסה תיצור pod חדש שיכלול את השינוי.

דוגמה לשירות

הדוגמה הבאה ממחישה איך לעדכן פריסה של שירות באמצעות

  1. מקבלים את הפקדים.

    kubectl get pods

    פלט לדוגמה:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          19h
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    
  2. מוחקים את ה-pod‏ edge-microgateway.

    kubectl delete pod edge-microgateway-57ccc7776b-g7nrg

    פלט לדוגמה:

    pod "edge-microgateway-57ccc7776b-g7nrg" deleted
    
  3. מקבלים שוב את ה-pods. ייוצר אשכול חדש עם השינויים בהגדרות.

    kubectl get pods

    פלט לדוגמה:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-7f6tc   1/1       Running   0          5s
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    

התאמת היקף הפריסה

בקטע הזה נסביר איך משתמשים בעיקרון התאמת הקיבולת של Kubernetes כדי להתאים את היקף הפריסות.

התאמת התפוקה של פריסה של שירות

  1. בודקים את הפריסות:

    kubectl get deployments

    פלט לדוגמה:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   1         1         1            1           18h
    helloworld          1         1         1            1           1d
    

    הפלט מציין שפרוסה רפליקה אחת.

  2. אפשר להרחיב את הפריסה מ-1 ל-n עותקים כפי שרוצים. בדוגמה הזו, השירות edge-microgateway עבר התאמה לעומס.

    kubectl scale deployment edge-microgateway --replicas=2
  3. (אופציונלי) אם רוצים להשתמש בהתאמה אוטומטית לעומס, משתמשים בפקודה הבאה:

    kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
  4. בודקים את הפריסות כדי לוודא שהתכונת 'שינוי קנה המידה' מופעלת:

    kubectl get deployments

    פלט לדוגמה:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   2         2         2            2           18h
    helloworld          1         1         1            1           1d
    

    המצב השתנה כך שיכלול שתי רפליקות.

  5. בודקים את ה-pods:

    kubectl get pods

    פלט לדוגמה:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          18h
    edge-microgateway-57ccc7776b-rvfz4   1/1       Running   0          41s
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    

    בפלט מוצג ששתי הרפליקות נמצאות בסטטוס 'פעיל'.

שימוש במרחבי שמות (namespaces) למספר הגדרות של Edge Microgateway

אפשר לפרוס ולהגדיר כמה מכונות של שירותי Edge Microgateway באשכול Kubernetes. תרחיש השימוש הזה מאפשר להגדיר לכל מכונה של מיקרו-שער קבוצה משלה של יישומי פלאגין ופרמטרים. לדוגמה:

  • ב-Edge Microgateway Service A נדרש רק הפלאגין לטיפול בתנודות חדות בביקוש.
  • ב-Edge Microgateway Service B נדרשים הפלאגין של המכסה והפלאגין של OAuth, אבל לא מניעת התקפות פסגה.

כדי לטפל בתרחיש לדוגמה הזה, צריך להשתמש במרחבי שמות של Kubernetes. לדוגמה, אפשר לפרוס את Edge Microgateway Service A למרחב השמות foo ואת Edge Microgateway Service B למרחב השמות bar.

בדוגמה הבאה, Edge Microgateway שהוגדר בארגון OrgA נפרס כשירות למרחב השמות foo באמצעות האפשרות -n:

kubectl apply -f <(edgemicroctl -org=myorgA -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgA-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n foo

באופן דומה, בדוגמה הבאה, Edge Microgateway שהוגדר בארגון OrgB פורס כשירות למרחב השמות bar באמצעות האפשרות -n:

kubectl apply -f <(edgemicroctl -org=myorgB -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgB-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n bar