Koneksi Apigee

Bagian ini menjelaskan penggunaan Apigee Connect untuk komunikasi antara bidang pengelolaan hybrid dan layanan MART di bidang runtime.

Pengantar

Dengan Apigee Connect, bidang pengelolaan hybrid Apigee dapat terhubung dengan aman ke layanan MART di bidang runtime tanpa mengharuskan Anda mengekspos endpoint MART di internet. Jika menggunakan Apigee Connect, Anda tidak perlu mengonfigurasi gateway masuk MART dengan alias host dan sertifikat DNS yang diotorisasi.

Layanan utama yang dijalankan di bidang runtime hybrid yang menampilkan Apigee Connect

Prasyarat

Apigee Hybrid 1.2.0. atau yang lebih baru.

Menambahkan Apigee Connect ke runtime hybrid

Apigee Connect diaktifkan secara default untuk penginstalan baru Apigee Hybrid versi 1.3.0 dan yang lebih baru. Oleh karena itu, kemungkinan besar Anda memerlukan langkah-langkah ini jika melakukan upgrade dari versi lama.

Jika Apigee Connect dikonfigurasi dan diaktifkan, traffic masuk MART akan diabaikan: bidang pengelolaan hanya terhubung ke MART menggunakan Apigee Connect. Semua traffic MART di antara bidang runtime hybrid akan melewati koneksi Apigee Connect yang aman.

Ikuti langkah-langkah berikut untuk mengaktifkan dan menggunakan Apigee Connect dengan Apigee Hybrid:

  1. Aktifkan Apigee Connect API di Library Google Cloud API. Anda dapat mengaktifkan API di Konsol Google Cloud atau dengan gcloud. Untuk mengetahui petunjuk cara mengaktifkan API di Konsol Google Cloud, lihat Langkah 3: Mengaktifkan API. Untuk menggunakan gcloud guna mengaktifkan API:
    1. Tetapkan project saat ini di gcloud ke project Google Cloud yang sama dengan Apigee yang diaktifkan dan organisasi Apigee Anda telah disediakan.
      $ gcloud config set project YOUR_GCP_PROJECT_ID

      Dengan YOUR_GCP_PROJECT_ID sebagai project ID.

    2. Periksa apakah Apigee Connect API sudah diaktifkan:
      gcloud services list
      NAME                                 TITLE
      apigee.googleapis.com                Apigee API
      apigeeconnect.googleapis.com         Apigee Connect API
      bigquery.googleapis.com              BigQuery API
      
      ...
    3. Jika hasilnya tidak menyertakan apigeeconnect.googleapis.com, aktifkan API:
      $ gcloud services enable apigeeconnect.googleapis.com
  2. Tambahkan peran Agen Apigee Connect ke akun layanan MART yang Anda buat pada langkah Buat akun layanan dalam petunjuk penginstalan hybrid Apigee:
    1. Jika perlu, dapatkan alamat email akun layanan MART Anda:
      gcloud iam service-accounts list
      NAME                          EMAIL                                                 DISABLED
      apigee-mart                   apigee-mart@hybrid-example.iam.gserviceaccount.com       False
      
      ...
    2. Periksa apakah akun layanan MART sudah memiliki peran yang ditetapkan:
      gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
      ...
      
      - members:
        - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com
        role: roles/apigeeconnect.Agent
      
      ...
    3. Jika hasilnya tidak menyertakan role: roles/apigeeconnect.Agent, tetapkan peran:
      gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \
      --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent

      Dengan YOUR_GCP_PROJECT_ID sebagai ID project Google Cloud Anda, dan YOUR_MART_SERVICE_ACCOUNT_EMAIL adalah alamat email akun layanan MART.

    Peran Apigee Connect Agent sudah ditetapkan sebelumnya dan memiliki izin berikut yang ditetapkan ke peran tersebut:

    Izin Deskripsi
    apigeeconnect.endpoints.connect Ini adalah izin yang diperlukan untuk menyiapkan Agen Apigee Connect.

    Untuk mengetahui detail tentang cara menetapkan izin akses melalui Konsol Google Cloud atau API, lihat:

  3. Pastikan file kunci akun layanan MART ada di direktori hybrid_files/service_accounts, seperti yang dijelaskan dalam Membuat akun layanan.
  4. Buka file penggantian. Jika properti connectAgent:enabled tidak ditetapkan ke true, atau tidak ada, tambahkan atau perbarui stanza berikut.

    Stanza Apigee Connect harus langsung diikuti di stanza k8sCluster.

    Konfigurasi ini mengharuskan Anda menyediakan jalur ke kunci akun layanan yang didownload. Kunci harus ditujukan untuk akun layanan dengan peran Agen Apigee Connect .

    # Apigee Connect Agent
    connectAgent:
      enabled: true
      serviceAccountPath: ./service-accounts/MART_SA_KEYFILE.json
    # Apigee Connect Agent
    connectAgent:
      enabled: true
      replicaCountMin: 1
      serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
  5. mart:
        serviceAccountPath: ./service-accounts/example-project-apigee-mart.json
      
  6. Aktifkan fitur Apigee Connect untuk organisasi Anda. Nama fiturnya adalah features.mart.connect.enabled.
    1. Temukan kunci akun layanan dengan peran Apigee Organization Admin yang Anda gunakan saat pertama kali menginstal Apigee Hybrid seperti yang dijelaskan di bagian Mengaktifkan akses sinkronisasi. Ini adalah akun layanan apigee-org-admin. Anda akan memerlukan kunci ini untuk membuat token yang diperlukan untuk melakukan panggilan API seperti yang dijelaskan di bawah.
    2. Jalankan dua perintah ini untuk mendapatkan token:
      export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file
      $ export TOKEN=$(gcloud auth application-default print-access-token)

      Dengan org-admin-service-account-file adalah jalur di sistem Anda ke kunci akun layanan dengan peran Apigee Organization Admin.

    3. Periksa apakah Apigee Connect sudah diaktifkan:
      curl  https://apigee.googleapis.com/v1/organizations/your_org_name \
        -H "Authorization: Bearer $TOKEN"

      Lihat di hasil untuk menemukan:

        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
    4. Jika hasilnya tidak menyertakan features..mart.connect.enabled yang ditetapkan ke true, panggil Apigee API berikut untuk mengaktifkan Apigee Connect untuk organisasi Anda:
      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"
          } ]
        }
      }'

  7. Mulai Agen Apigee Connect di cluster.

    Jika Anda telah melakukan perubahan pada salah satu langkah di atas, gunakan perintah berikut untuk memulai Agen Apigee Connect:

    Helm

    helm upgrade ORG_NAME apigee-org/ \
      --namespace apigee \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

    apigeectl

    $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.yaml --org
  8. Periksa log Agen Apigee Connect. Jika tidak ada error yang dilaporkan, upgrade berhasil:
    kubectl logs -n namespace apigee-connect-agent-pod-name

    Agen Apigee Connect melaporkan kategori log berikut:
    Kategori log audit Operasi
    DATA_READ ConnectionService.ListConnections
    DATA_WRITE Tether.Egress
    Untuk mendapatkan bantuan tentang cara melihat log audit di Apigee Hybrid, lihat Informasi logging audit.
  9. Dengan upgrade ini, bidang runtime hybrid berkomunikasi dengan bidang pengelolaan melalui Apigee Connect.

  10. Uji penginstalan.

Lihat juga: Menghapus Apigee Connect.

Menguji penginstalan

  1. Buka Apigee Hybrid UI.
  2. Pastikan aplikasi Developer dan Developer yang Anda buat sebelumnya ada di UI. Karena entity ini dikueri dari server MART, entity ini hanya akan ada jika komunikasi antara bidang pengelolaan dan runtime dikonfigurasi dengan benar.
  3. Untuk memastikan permintaan melalui Apigee Connect dan tidak melalui ingress MART, periksa log server MART. Anda akan melihat entri untuk agen Apigee Connect bernama apigee-connect-agent-1.0:
    kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl --org | grep connect

    Contoh:

    "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. Refresh token otorisasi Anda:
    export TOKEN=$(gcloud auth application-default print-access-token)
  5. Panggil Apigee API untuk melihat aliran data yang tersedia dan terhubung dengan endpoint 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. Periksa log Agen Apigee Connect:
    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>

    Log berikut menunjukkan bahwa Agen Apigee Connect telah dimulai dan berkomunikasi dengan benar:

    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. Pada UI campuran, buat produk API, developer, dan aplikasi developer. Kemudian, buat beberapa panggilan API ke proxy.

    Log Connect Agent yang dibuat saat memproses permintaan akan sangat membantu untuk melihat kondisi atau error:

    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

    Log disebabkan oleh kegagalan Agen Hubungkan karena error penolakan izin IAM, yang menyebabkan agen error:

    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.

Menghapus Apigee Connect

Jika Anda menghapus deployment Apigee Connect, status pod dapat tetap dalam status "Penghentian" hingga tujuh menit. Jumlah waktu ini adalah hal normal. Agen Apigee Connect akan menunggu hingga masa berlaku koneksi yang ada habis, bukan menghentikannya secara tiba-tiba. Penundaan ini memastikan bahwa permintaan yang sedang berlangsung tidak hilang.