Apigee Connect

בקטע הזה מוסבר איך להשתמש ב-Apigee Connect לתקשורת בין מישור הניהול ההיברידי לבין שירות MART במישור זמן הריצה.

מבוא

‫Apigee Connect מאפשר למישור הניהול של Apigee Hybrid להתחבר בצורה מאובטחת לשירות MART במישור זמן הריצה, בלי שתצטרכו לחשוף את נקודת הקצה של MART באינטרנט. אם אתם משתמשים ב-Apigee Connect, אתם לא צריכים להגדיר את שער הכניסה של MART עם כינוי מארח ואישור DNS מאושר.

שירותים עיקריים שפועלים במישור זמן הריצה ההיברידי, כולל Apigee Connect

דרישות מוקדמות

‫Apigee Hybrid 1.2.0 ואילך.

הוספת Apigee Connect לסביבת זמן הריצה ההיברידית

‫Apigee Connect מופעל כברירת מחדל בהתקנות חדשות של Apigee Hybrid מגרסה 1.3.0 ואילך. לכן, סביר להניח שתצטרכו לבצע את השלבים האלה אם אתם משדרגים מגרסה ישנה יותר.

כש-Apigee Connect מוגדר ומופעל, המערכת מתעלמת מ-MART ingress: מישור הניהול מתחבר ל-MART רק באמצעות Apigee Connect. כל התנועה ב-MART בין מישור זמן הריצה ההיברידי עוברת דרך החיבור המאובטח של Apigee Connect.

כדי להפעיל את Apigee Connect ולהשתמש בו עם Apigee hybrid:

  1. מפעילים את Apigee Connect API ב Google Cloud API Library. אפשר להפעיל את ה-API ב מסוף Google Cloud‏ (GCP) או באמצעות gcloud. הוראות להפעלת ממשקי API במסוף Google Cloud זמינות במאמר בנושא שלב 3: הפעלת ממשקי API. כדי להשתמש ב-gcloud כדי להפעיל את ה-API:
    1. מגדירים את הפרויקט הנוכחי ב-gcloud לאותו פרויקט GCP שבו הופעל Apigee והוקצה הארגון שלכם ב-Apigee.
      $ gcloud config set project YOUR_GCP_PROJECT_ID

      כאשר YOUR_GCP_PROJECT_ID הוא מזהה הפרויקט.

    2. בודקים אם Apigee Connect API כבר מופעל:
      gcloud services list
      NAME                                 TITLE
      apigee.googleapis.com                Apigee API
      apigeeconnect.googleapis.com         Apigee Connect API
      bigquery.googleapis.com              BigQuery API
      
      ...
    3. אם התוצאות לא כוללות את apigeeconnect.googleapis.com, מפעילים את ה-API:
      $ gcloud services enable apigeeconnect.googleapis.com
  2. מוסיפים את התפקיד Apigee Connect Agent לחשבון השירות של MART שיצרתם בשלב Create service accounts (יצירת חשבונות שירות) בהוראות ההתקנה של Apigee hybrid:
    1. אם צריך, מקבלים את כתובת האימייל של חשבון השירות של MART:
      gcloud iam service-accounts list
      NAME                          EMAIL                                                 DISABLED
      apigee-mart                   apigee-mart@hybrid-example.iam.gserviceaccount.com       False
      
      ...
    2. בודקים אם התפקיד כבר הוקצה לחשבון השירות של MART:
      gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
      ...
      
      - members:
        - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com
        role: roles/apigeeconnect.Agent
      
      ...
    3. אם התוצאות לא כוללות את role: roles/apigeeconnect.Agent, מקצים את התפקיד:
      gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \
      --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent

      כאשר YOUR_GCP_PROJECT_ID הוא מזהה פרויקט GCP, ו-YOUR_MART_SERVICE_ACCOUNT_EMAIL הוא כתובת האימייל בחשבון השירות של MART.

    התפקיד Apigee Connect Agent מוגדר מראש ומוקצית לו ההרשאה הבאה:

    הרשאה תיאור
    apigeeconnect.endpoints.connect זו ההרשאה להגדרת סוכן Apigee Connect.

    פרטים על הקצאת הרשאות גישה דרך מסוף GCP או ממשקי API זמינים במאמרים הבאים:

  3. חשוב לוודא שקובץ המפתח של חשבון השירות של MART נמצא בספרייה hybrid_files/service_accounts, כמו שמוסבר במאמר יצירת חשבונות שירות.
  4. פותחים את קובץ השינויים. אם המאפיין connectAgent:enabled לא מוגדר כ-true או שהוא חסר, מוסיפים או מעדכנים את ה-stanza הבא.

    הפסקה של Apigee Connect צריכה להופיע מיד אחרי הפסקה של k8sCluster.

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

    # Apigee Connect Agent
    connectAgent:
      enabled: true
      serviceAccountPath: ./service-accounts/MART_SA_KEYFILE.json
    # Apigee Connect Agent
    connectAgent:
      enabled: true
      replicaCountMin: 3
      serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
  5. מפעילים את התכונה Apigee Connect בארגון. שם התכונה הוא features.mart.connect.enabled.
    1. מאתרים את המפתח של חשבון השירות עם התפקיד Apigee Organization Admin שבו השתמשתם כשביצעתם את ההתקנה המקורית של Apigee hybrid, כמו שמתואר בקטע הפעלת גישה של synchronizer. זהו חשבון השירות apigee-org-admin. תצטרכו את המפתח הזה כדי ליצור אסימון שנדרש לביצוע קריאה ל-API, כמו שמוסבר בהמשך.
    2. מריצים את שתי הפקודות הבאות כדי לקבל אסימון:
      export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file
      $ export TOKEN=$(gcloud auth application-default print-access-token)

      org-admin-service-account-file הוא הנתיב במערכת שלכם למפתח של חשבון השירות עם התפקיד אדמין של ארגון Apigee.

    3. בודקים אם Apigee Connect כבר מופעל:
      curl  https://apigee.googleapis.com/v1/organizations/your_org_name \
        -H "Authorization: Bearer $TOKEN"

      מחפשים בתוצאות את:

        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
    4. אם התוצאות לא כוללות את features..mart.connect.enabled עם הערך true, צריך להפעיל את Apigee Connect בארגון באמצעות קריאה ל-Apigee API הבא:
      curl -v -X PUT \
         https://apigee.googleapis.com/v1/organizations/your_org_name \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $TOKEN" \
        -d '{
        "name" : "your_org_name",
        "properties" : {
          "property" : [ {
            "name" : "features.hybrid.enabled",
            "value" : "true"
          }, {
            "name" : "features.mart.connect.enabled",
            "value" : "true"
          } ]
        }
      }'

  6. מפעילים את סוכן Apigee Connect באשכול.

    אם ביצעתם שינויים באחד מהשלבים שלמעלה, משתמשים בפקודה הבאה כדי להפעיל את Apigee Connect Agent:

     $APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml --org

  7. mart:
      hostAlias: "mart.apigee-hybrid-docs.net"  # ignored when Apigee Connect is enabled.
      serviceAccountPath: ./service-accounts/example-project-apigee-mart.json
      sslCertPath: ./certs/fullchain.pem  # ignored when Apigee Connect is enabled.
      sslKeyPath: ./certs/privkey.key  # ignored when Apigee Connect is enabled.
  8. בודקים את היומן של Apigee Connect Agent. אם לא מדווח על שגיאות, השדרוג הצליח:
    kubectl logs -n namespace apigee-connect-agent-pod-name

    הסוכן של Apigee Connect מדווח על קטגוריות היומן הבאות:
    קטגוריית יומני הביקורת תפעול
    DATA_READ ConnectionService.ListConnections
    DATA_WRITE Tether.Egress
    לקבלת עזרה בצפייה ביומני ביקורת ב-Apigee Hybrid, אפשר לעיין במאמר מידע על יומני ביקורת.
  9. בעקבות השדרוג הזה, מישור זמן הריצה ההיברידי מתקשר עם מישור הניהול באמצעות Apigee Connect.

  10. בדיקת ההתקנה.

מידע נוסף: הסרת Apigee Connect

בדיקת ההטמעה

  1. פותחים את ממשק המשתמש של Apigee Hybrid.
  2. מוודאים שכל המפתחים והאפליקציות למפתחים שיצרתם בעבר מופיעים בממשק המשתמש. הישויות האלה נשלפות משרת ה-MART, ולכן הן יופיעו רק אם התקשורת בין מישורי הניהול והזמן הריצה מוגדרת בצורה נכונה.
  3. כדי לוודא שהבקשות עוברות דרך Apigee Connect ולא דרך MART ingress, צריך לבדוק את יומן הרישום של שרת MART. אמורים להופיע בו רשומות של סוכן Apigee Connect בשם apigee-connect-agent-1.0:
    kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl --org | grep connect

    לדוגמה:

    "2020-07-31 04:59:52,321 org: env: target: action: context-id: mode: pool-1-thread-1 INFO.
    gserviceaccount.com 1576040392317 /v1/organizations/apigee-connect-hybrid-prod/developers/
    count=100&expand=true&startKey=4ee9e8f7-12b2-4cde-bf10-32d991469876 200 GET apigee-connect
    -hybrid-prod 10.40.11.3 10.40.0.5 apigee-connect-agent-1.0 null"
  4. מרעננים את טוקן ההרשאה:
    export TOKEN=$(gcloud auth application-default print-access-token)
  5. קוראים ל-Apigee API כדי לראות את הסטרימינג הזמין שמתחבר לנקודת הקצה apigee-mart:
    curl -s https://apigeeconnect.googleapis.com/v1/projects/YOUR_GCP_PROJECT_ID/endpoints/apigee_mart/connections \
      -H "Authorization: Bearer $TOKEN"
    {
      "connections": [
        {
          "endpoint": "projects/865098068308/endpoints/apigee_mart",
          "cluster": {
            "name": "apigee-connect-test-cluster2",
            "region": "australia-southeast1"
          },
          "streamCount": 4
        },
        {
          "endpoint": "projects/865098068308/endpoints/apigee_mart",
          "cluster": {
            "name": "apigee-connect-test-cluster",
            "region": "us-central1"
          },
          "streamCount": 2
        }
      ]
    }
  6. בודקים את היומנים של סוכן Apigee Connect:
    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>

    היומנים הבאים מציינים שהסוכן של Apigee Connect הופעל ושהוא מתקשר בצורה תקינה:

    I0719 11.66:10.765526 2314949 main.go:47] Agent's flag values below
    I0719 11.66:10.765928 2314949 main.go:50] "alsologtostderr" : false
    I0719 11.66:10.765940 2314949 main.go:50] "cluster_name" : testABC
    I0719 11.66:10.765947 2314949 main.go:50] "cluster_region" : us-west2
    I0719 11.66:10.765953 2314949 main.go:50] "cpu_profile_enabled" : false
    I0719 11.66:10.765959 2314949 main.go:50] "http_client_timeout" : 2m0s
    I0719 11.66:10.765966 2314949 main.go:50] "http_port" : 7070
    I0719 11.66:10.765972 2314949 main.go:50] "http_server" : false
    I0719 11.66:10.765978 2314949 main.go:50] "insecure_ssl" : false
    I0719 11.66:10.765984 2314949 main.go:50] "local_cert" :
    I0719 11.66:10.765990 2314949 main.go:50] "log_backtrace_at" : :0
    I0719 11.66:10.766001 2314949 main.go:50] "log_dir" :
    I0719 11.66:10.766007 2314949 main.go:50] "logtostderr" : true
    I0719 11.66:10.766012 2314949 main.go:50] "mem_profile_enabled" : false
    I0719 11.66:10.766018 2314949 main.go:50] "project" : projects/apigee-connect-hybrid-prod
    I0719 11.66:10.766025 2314949 main.go:50] "resource_id" :
    I0719 11.66:10.766031 2314949 main.go:50] "server_addr" : apigeeconnect.googleapis.com:443
    I0719 11.66:10.766036 2314949 main.go:50] "server_cert" : ./server.crt
    I0719 11.66:10.766042 2314949 main.go:50] "server_key" : ./server.key
    I0719 11.66:10.766047 2314949 main.go:50] "stderrthreshold" : 2
    I0719 11.66:10.766054 2314949 main.go:50] "target_server" : http://127.0.0.1/
    I0719 11.66:10.766059 2314949 main.go:50] "tether_endpoint" : APIGEE_MART
    I0719 11.66:10.766065 2314949 main.go:50] "v" : 0
    I0719 11.66:10.766072 2314949 main.go:50] "vmodule" :
    I0719 11.66:10.845441 2314949 agent.go:400] successfully initiated http client
    I0719 11.66:10.845772 2314949 agent.go:728] starting metrics http server at ":7070"
    I0719 11.66:11.231.69 2314949 agent.go:245] listening on tether 6407043920806543360
    I0719 11.68:11.346544 2314949 agent.go:245] listening on tether 2101602677040349184
    I0719 12:00:11.461084 2314949 agent.go:245] listening on tether 9109203697228840960
    I0719 12:02:11.683743 2314949 agent.go:245] listening on tether 8978599308035096576
    I0719 12:02:40.325633 2314949 agent.go:255] tether id 6407043920806543360 is closed
    
    ...
  7. בממשק המשתמש ההיברידי, יוצרים מוצר API, מפתח ואפליקציה למפתחים. לאחר מכן מבצעים כמה קריאות ל-API לשרת proxy.

    יומני Connect Agent שנוצרו במהלך עיבוד הבקשות יעזרו לכם לראות את מצב התקינות או השגיאות:

    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>
    INFO: 2020/04/13 03:29:08 "961ff385-600a-427a-8864-ba066ff42330": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:08 Attempting to send response 961ff385-600a-427a-8864-ba066ff42330 on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:09 "e2fc0492-6e78-4c58-972b-7de8258b9e86": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:09 Attempting to send response e2fc0492-6e78-4c58-972b-7de8258b9e86 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:10 "1ab3023b-b763-4b91-bf4f-ca8c02f62e50": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:10 Attempting to send response 1ab3023b-b763-4b91-bf4f-ca8c02f62e50 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:12 "1fa3e3c3-a36e-4ff1-b2d3-5cf14f2f8fdd": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:12 Attempting to send response 1fa3e3c3-a36e-4ff1-b2d3-5cf14f2f8fdd on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:13 "09b7ef9d-f53d-466a-a174-e88fc7e5286d": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:13 Attempting to send response 09b7ef9d-f53d-466a-a174-e88fc7e5286d on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:14 "c2ce8b73-8faf-4a05-88d9-24fb2bf45552": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:14 Attempting to send response c2ce8b73-8faf-4a05-88d9-24fb2bf45552 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:15 "fdc3bac5-2b83-4b57-a28d-d8b455dae71e": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:15 Attempting to send response fdc3bac5-2b83-4b57-a28d-d8b455dae71e on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:16 "260026a9-f578-4447-a1d2-d8e49cf181d8": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:16 Attempting to send response 260026a9-f578-4447-a1d2-d8e49cf181d8 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:17 "bf3d74a1-94ae-4041-892f-56f1ed9c9cff": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:17 Attempting to send response bf3d74a1-94ae-4041-892f-56f1ed9c9cff on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:18 "6d017278-3b7a-40fb-9c63-7c34320e7df1": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200

    יומנים שנוצרו בגלל כשל ב-Connect Agent עקב שגיאה שקשורה להרשאת IAM שנדחתה, שגרמה לקריסת הסוכן:

    F0719 12:34:33.128565 2326128 tether.go:29] failed to register stream with Apigee Connect, got
    'PermissionDenied': rpc error: code = PermissionDenied desc = Permission denied on resource '//
    apigeeconnect.googleapis.com/projects/apigee-connect-hybrid-prod/endpoints/APIGEE_MART' (or it
    may not exist).
    F0719 12:34:33.128565 2326128 tether.go:29] failed to register stream with Apigee Connect, got
    'PermissionDenied': rpc error: code = PermissionDenied desc = Permission denied on resource pro
    ject apigee-connect-hybrid-prod.

הסרת Apigee Connect

אם מוחקים את הפריסה של Apigee Connect, הסטטוס של ה-pod יכול להישאר במצב 'סיום' למשך עד שבע דקות. זה הזמן הצפוי. סוכני Apigee Connect מחכים שהחיבורים הקיימים יפוגו במקום להפסיק אותם באופן פתאומי. ההשהיה מבטיחה שבקשות שנמצאות בתהליך לא יאבדו.