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

בנושא הזה נדון בניווט בנתיב בסיס. ניתוב נתיב בסיסי מאפשר לכם להגדיר ולנהל את האופן שבו 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 with base path /foo2 to 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, מערכת ה-Hybrid יודעת להפנות אותה לסביבה dev2.