הגדרה של ניתוב נתיב בסיסי

בנושא הזה נדון בניווט בנתיב בסיסי. ניתוב נתיב בסיסי מאפשר לכם להגדיר ולנהל את האופן שבו Apigee Hybrid מנתב קריאות לשרתי proxy של API לסביבה הנכונה.

שימוש בניתוב נתיב בסיסי לניהול פריסות של שרתי proxy

מכיוון שאפשר למפות מארח וירטואלי יחיד לכמה סביבות בהיברידי, צריך דרך לציין איזה נתיב בסיס של שרת proxy ממופה לאיזו סביבה.

לדוגמה, נניח שרוצים למפות שתי סביבות לאותו כינוי של מארח: apitest.mydomain.net. בקובץ ההגדרות שמוגדרות מחדש, אפשר ליצור את ההגדרה הבאה שבה הסביבות dev1 ו-dev2 ממופות למארח הזה. לדוגמה:

envs:
  - name: dev1
    hostAlias: "apitest.mydomain.net"
    ...
  - name: dev2
    hostAlias: "apitest.mydomain.net"
    ...

נניח שאתם פורסים שרתי proxy בסביבות האלה. אתם פורסים:

  • שרת proxy‏ foo1 עם נתיב בסיס ‎/foo1 אל dev1
  • שרת proxy‏ foo2 עם נתיב בסיס ‎/foo2 אל dev2

נניח שלקוח קורא ל-API הזה: https://apitest.mydomain.net/foo1. שימו לב שאין בנתיב הזה (או בכותרת המארח שנוצרת לבקשה) שום דבר שמציין ל-Hybrid לאיזו סביבה להפנות את השיחה. האם שרת ה-proxy‏ foo1 נפרס ב-dev1 או ב-dev2? אי אפשר לדעת רק על סמך כתובת ה-URL של הבקשה. צריך למפות באופן מפורש כל אחד מנתיבי הבסיס האלה לסביבה אחת או יותר.

כדי לציין לאיזו סביבה צריך לנתב קריאה ל-Proxy, מוסיפים את המאפיין paths.uri.prefixes למאפיין envs בקובץ ההגדרות, כמו בדוגמה הבאה:

gcpProjectID: example
k8sClusterName: apigee-hybrid

# Apigee org name.
org: my-org

envs:
    # Apigee environment name.
  - name: dev1
    hostAlias: "apitest.mydomain.net"
    sslCertPath: ./certs/keystore.pem
    sslKeyPath: ./certs/keystore.key
    serviceAccountPaths:
      synchronizer: ./service-accounts/example-apigee-synchronizer.json
      udca: ./service-accounts/example-apigee-udca.json
    paths:
      uri:
        prefixes:
          - /foo1
  - name: dev2
    hostAlias: "apitest.mydomain.net"
    sslCertPath: ./certs/keystore.pem
    sslKeyPath: ./certs/keystore.key
    serviceAccountPaths:
      synchronizer: ./service-accounts/example-apigee-synchronizer.json
      udca: ./service-accounts/example-apigee-udca.json
    paths:
      uri:
        prefixes:
          - /foo2
    ...

עכשיו, כשמתקבלת קריאה ל-API כמו: https://apitest.mydomain.net/foo1, נתב הכניסה יודע לאן לשלוח אותה. המערכת יודעת ששרת ה-proxy‏ /foo1 נפרס בסביבת dev1, והשיחה מנותבת למעבד ההודעות של dev1.

אם תשלח את השיחה הזו, https://apitest.mydomain.net/foo2, היא תנותב באופן דומה אל MP של סביבת dev2 וכן הלאה.

לסיכום, הגדרת paths.uri.prefixes מאפשרת לכם לנהל פריסות של שרת proxy בכמה סביבות שמשתפות את אותו שם מארח.

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

הוספת סביבה חדשה לאותו דומיין

בקטע הזה מוסבר איך להוסיף סביבה חדשה לדומיין.

בתרחיש הזה, נניח שכבר פרסתם סביבה dev1 באשכול. בדוגמה הזו, מותרים רק שרתי proxy עם קידומת של נתיב בסיס /foo1:

gcpProjectID: example
k8sClusterName: apigee-hybrid

# Apigee org name.
org: my-org

envs:
    # Apigee environment name.
  - name: dev1
    hostAlias: "apitest.mydomain.net"
    sslCertPath: ./certs/keystore.pem
    sslKeyPath: ./certs/keystore.key
    serviceAccountPaths:
      synchronizer: ./service-accounts/example-apigee-synchronizer.json
      udca: ./service-accounts/example-apigee-udca.json
    paths:
      uri:
        prefixes:
          - /foo1

mart:
  hostAlias: "mart.apigee-hybrid-docs.net"
  serviceAccountPath: ./service-accounts/example-apigee-mart.json
  sslCertPath: ./certs/fullchain.pem
  sslKeyPath: ./certs/privkey.key

metrics:
  serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json

כדי להוסיף עוד סביבה שמשתפת את אותו דומיין, פועלים לפי השלבים הבאים:

  1. יוצרים קובץ החלפות חדש עם הגדרת הסביבה החדשה. לדוגמה, ההגדרה הזו יוצרת סביבה בשם dev2. בסביבה הזו, מותרים רק פרוקסי עם סיומת הנתיב /foo2:
    gcpProjectID: example
    k8sClusterName: apigee-hybrid
    
    # Apigee org name.
    org: my-org
    
    envs:
        # Apigee environment name.
      - name: dev2
        hostAlias: "apitest.mydomain.net"
        sslCertPath: ./certs/keystore.pem
        sslKeyPath: ./certs/keystore.key
        serviceAccountPaths:
          synchronizer: ./service-accounts/example-apigee-synchronizer.json
          udca: ./service-accounts/example-apigee-udca.json
        paths:
          uri:
            prefixes:
              - /foo2
    
    mart:
      hostAlias: "mart.apigee-hybrid-docs.net"
      serviceAccountPath: ./service-accounts/example-apigee-mart.json
      sslCertPath: ./certs/fullchain.pem
      sslKeyPath: ./certs/privkey.key
    
    metrics:
      serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json
    
  2. מריצים את הפקודות הבאות בכל סדר:
    1. apigeectl apply -f overrides/overrides-dev2.yaml -c udca
    2. apigeectl apply -f overrides/overrides-dev2.yaml -c synchronizer
    3. apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
  3. פורסים את שרת ה-Proxy‏ foo2 בסביבה dev2.
  4. מתקשרים לשרת ה-proxy כדי לבדוק את ההגדרה.
    curl https://apitest.mydomain.net/foo2

הוספת נתיב בסיס חדש לשרת proxy לסביבה קיימת

כדי להוסיף נתיב בסיס חדש לסביבה קיימת, פשוט מוסיפים רשומה של prefixes לכל נתיב בסיס חדש. לדוגמה, אם יוצרים שרת proxy חדש עם נתיב בסיס ‎/foo4 ורוצים לפרוס אותו בסביבה שנקראת dev2, צריך לבצע את השלבים הבאים:

  1. פותחים את קובץ השינויים שכולל את ההגדרה של סביבת dev2.
  2. מוסיפים את נתיב הבסיס /foo4 לרכיב paths.uri.prefixes:
    gcpProjectID: example
    k8sClusterName: apigee-hybrid
    
    # Apigee org name.
    org: my-org
    
    envs:
        # Apigee environment name.
      - name: dev2
        hostAlias: "apitest.mydomain.net"
        sslCertPath: ./certs/keystore.pem
        sslKeyPath: ./certs/keystore.key
        serviceAccountPaths:
          synchronizer: ./service-accounts/example-apigee-synchronizer.json
          udca: ./service-accounts/example-apigee-udca.json
        paths:
          uri:
            prefixes:
              - /foo2
              - /foo4
    
    mart:
      hostAlias: "mart.apigee-hybrid-docs.net"
      serviceAccountPath: ./service-accounts/example-apigee-mart.json
      sslCertPath: ./certs/fullchain.pem
      sslKeyPath: ./certs/privkey.key
    
    metrics:
      serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json
    
  3. מחילים את הרכיב runtime על האשכול:
    apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
  4. מתקשרים לשרת ה-proxy כדי לבדוק את ההגדרה.
    curl https://apitest.mydomain.net/foo4

    אם מתקבלת קריאה ל-API של https://apitest.mydomain.net/foo4, המערכת ההיברידית יודעת להפנות אותה לסביבה dev2.