Contoh hybrid Apigee dengan Kubernetes

Halaman ini berlaku untuk Apigee dan Apigee Hybrid.

Baca dokumentasi Apigee Edge.

Contoh ini menunjukkan cara menggunakan Adaptor Apigee untuk Envoy dengan deployment hybrid Apigee.

Prasyarat

Sebelum memulai:

Ringkasan

Contoh ini menjelaskan cara menggunakan Adaptor Apigee untuk Envoy dengan Apigee hybrid. Dalam contoh ini, Anda akan men-deploy layanan HTTP sederhana di cluster Kubernetes yang sama tempat Apigee Hybrid di-deploy. Kemudian, Anda akan mengonfigurasi Apigee Adapter untuk Envoy agar dapat mengelola panggilan API ke layanan ini dengan Apigee.

Gambar berikut menunjukkan arsitektur dasar untuk integrasi hybrid Apigee:

Tampilan tingkat tinggi Envoy Adapter yang terintegrasi ke dalam lingkungan hybrid Apigee, termasuk bidang pengelolaan, bidang runtime, dan layanan Google Cloud

Proxy Envoy di-deploy dengan layanan HTTP target sebagai file bantuan Istio di mesh layanan Istio. Sidecar menangani traffic API ke dan dari layanan target, serta berkomunikasi dengan Remote Service. Layanan Jarak Jauh juga berkomunikasi dengan bidang pengelolaan hybrid untuk mengambil informasi produk API dan proxy.

Memeriksa konfigurasi gcloud

  1. Pastikan konfigurasi gcloud Anda disetel ke project Google Cloud yang dikaitkan dengan organisasi hybrid Anda.

    Untuk menampilkan daftar setelan saat ini:

    gcloud config list

    Jika perlu, tetapkan ID project Google Cloud yang benar dengan perintah ini:

    gcloud config set project project-id
  2. Anda harus diautentikasi dengan Google Cloud SDK (gcloud) untuk project Google Cloud Anda:
    gcloud auth login

Menyediakan Apigee Hybrid

Pada langkah ini, Anda akan menggunakan CLI Layanan Jarak Jauh untuk menyediakan secara hybrid dengan proxy API remote-service. Perintah penyediaan juga menyiapkan sertifikat di Apigee, dan menghasilkan kredensial yang akan digunakan layanan jarak jauh untuk terhubung kembali dengan aman ke Apigee.

  1. Buka direktori $CLI_HOME:
    cd $CLI_HOME
  2. Jika Anda bukan pemilik project Google Cloud yang terkait dengan organisasi hybrid Apigee, pastikan akun pengguna Google Cloud Anda menyertakan peran Apigee Organization Admin, atau peran API Creator dan Deployer.

    Lihat Memberikan, mengubah, dan mencabut akses ke resource.

  3. Jalankan perintah ini untuk mendapatkan token akses:
    TOKEN=$(gcloud auth print-access-token);echo $TOKEN
  4. (Opsional) Secara default, adaptor akan mencari kredensial akun layanan default di project Google Cloud Anda untuk mendapatkan izin mengirim data analisis ke Apigee. Jika tidak ingin menggunakan kredensial akun layanan default, Anda dapat membuat akun layanan dan merujuk kuncinya dalam perintah penyediaan. Akun layanan harus memiliki peran apigee.analyticsAgent. Untuk mengetahui petunjuknya, lihat Membuat dan mengelola akun layanan.
  5. Buat variabel lingkungan berikut. Variabel ini akan digunakan sebagai parameter untuk skrip penyediaan:
    export ORG=organization_name
    export ENV=environment_name
    export RUNTIME=host_alias_url
    export NAMESPACE=hybrid_runtime_namespace
    export AX_SERVICE_ACCOUNT=analytics_service_account  ## Optional

    Dengan keterangan:

    Variabel Deskripsi
    organization_name Nama organisasi Apigee untuk penginstalan hybrid Apigee.
    environment_name Nama lingkungan di organisasi hybrid Apigee Anda.
    host_alias_url URL yang menyertakan hostAlias untuk host virtual yang ditentukan dalam konfigurasi hybrid Anda. URL harus diawali dengan https://. Contoh: https://apitest.apigee-hybrid-docs.net
    hybrid_runtime_namepace Namespace tempat komponen runtime Hybrid di-deploy. Catatan: Namespace default untuk deployment hybrid adalah apigee.
    analytics_service_account (Opsional) Jalur ke file JSON kunci akun layanan Google Cloud yang memiliki peran Apigee Analytics Agent. Untuk deskripsi mendetail tentang parameter ini, lihat Perintah penyediaan.
  6. Jalankan perintah berikut untuk menyediakan proxy layanan jarak jauh ke Apigee Hybrid:

    Jika Anda tidak mengupgrade, gunakan perintah ini untuk menyediakan Apigee:

    ./apigee-remote-service-cli provision --organization $ORG --environment $ENV \
         --runtime $RUNTIME --namespace $NAMESPACE --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml

    Jika Anda mengupgrade, gunakan perintah ini dengan tanda --force-proxy-install untuk menyediakan Apigee:

    ./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \
         --runtime $RUNTIME --namespace $NAMESPACE --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
  7. Periksa konten file config.yaml. Konfigurasinya akan terlihat seperti ini:
    # Configuration for apigee-remote-service-envoy (platform: Google Cloud)
    # generated by apigee-remote-service-cli provision on 2020-11-20 02:49:28
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          remote_service_api: https://apitest.example.com/remote-service
          org_name: hybrid-gke
          env_name: test
        analytics:
          collection_interval: 10s
        auth:
          jwt_provider_key: https://apitest.example.com/remote-token/token
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: hybrid-gke-new-test-policy-secret
      namespace: apigee
    type: Opaque
    data:
      remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci...
      remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS...
      remote-service.properties: a2lkPTIwMjAtMDctMDZ...
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: hybrid-gke-new-test-analytics-secret
      namespace: apigee
    type: Opaque
    data:
      client_secret.json: ewogICJ0eXBlIjogInNlcnZ...
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
  8. Terapkan konfigurasi layanan (output file oleh perintah penyediaan) ke cluster:
    kubectl apply -f $CLI_HOME/config.yaml
  9. Verifikasi proxy dan sertifikat Anda. Berikut ini akan menampilkan JSON yang valid:
    curl -i $RUNTIME/remote-token/certs

    Outputnya akan terlihat seperti ini:

    {
        "keys": [
            {
                "alg": "RS256",
                "e": "AQAB",
                "kid": "2020-05-11T11:32:26-06:00",
                "kty": "RSA",
                "n": "0v-nbTQyAmtVZ-wZRP0ZPIbrVaX91YO9JZ9xCQPb4mOdOSS7yKfTDJGg0KM130sGVYBvR76alN8
                fhrrSDEG5VXG8YYMqPXarwRC7MRJWocCQ_ECYrjDD0_Q018M2HyXZYSd8fhAogi9mVUYsEmCKqJH53Dh1
                jqsHOQzBLKsX0iDO9hEZNFtjbX0UCbSxsUlmBCub7Uj2S-PahA6DEQOMhQjZM7bBMtkTMpFmaJ_RZTmow
                BHP57qMna17R8wHD4kUsO2u_-3HHs5PSj1NrEYoVU2dwLQw0GlkB__ZWeFgXTqot81vb-PmoM9YxwoZrm
                TcHdljugWy_s7xROPzTod0uw"
            }
        ]
    }

Membuat contoh file konfigurasi

Gunakan perintah apigee-remote-service-cli samples create untuk menghasilkan contoh file konfigurasi.

Untuk contoh ini, Anda memerlukan file yang dihasilkan ini:

  • httpbin.yaml - Konfigurasi deployment untuk layanan HTTP.
  • apigee-envoy-adapter.yaml - Konfigurasi deployment untuk Remote Service untuk Envoy.
  • envoyfilter-sidecar.yaml - Konfigurasi yang menginstal EnvoyFilter. ke namespace default.

Untuk membuat sampel:

  1. Buka direktori $CLI_HOME.
  2. Jalankan perintah ini untuk membuat file:

    ./apigee-remote-service-cli samples create -c ./config.yaml --template istio-1.12

    File berikut adalah output direktori ./samples:

    ls samples
    apigee-envoy-adapter.yaml envoyfilter-sidecar.yaml httpbin.yaml request-authentication.yaml
    

Untuk mengetahui informasi selengkapnya, lihat Perintah Sample.

Men-deploy layanan pengujian ke cluster

Pada langkah ini, Anda akan men-deploy layanan pengujian permintaan/respons HTTP sederhana ke cluster yang sama tempat Apigee Hybrid di-deploy.

  1. Aktifkan injeksi Istio di namespace default cluster. Pada langkah selanjutnya, Anda akan men-deploy file bantuan Envoy ke cluster yang sama ini. Dengan mengaktifkan injeksi Istio, deployment file bantuan dapat dilakukan. Contoh ini menggunakan namespace default, dan semua petunjuk berikutnya mengasumsikan demikian.

    Jika Anda menggunakan Istio open source:

    kubectl label namespace default istio-injection=enabled --overwrite

    Jika Anda menggunakan ASM:

    kubectl label namespace default istio-injection=enabled istio.io/rev=REVISION --overwrite
  2. Terapkan layanan httpbin sederhana ke cluster di namespace default:
    kubectl apply -f $CLI_HOME/samples/httpbin.yaml
  3. Sekarang, uji layanan tersebut. Mulai layanan curl yang berjalan di cluster dan buka terminal:
    kubectl run -it curl --image=curlimages/curl --restart=Never -- sh
  4. Uji layanan dengan memanggilnya dari dalam cluster:
    curl -i httpbin.default.svc.cluster.local/headers

    Setelah berhasil, Anda akan melihat status 200, dan layanan menampilkan daftar header. Contoh:

    HTTP/1.1 200 OK
    server: envoy
    date: Tue, 12 May 2020 17:09:01 GMT
    content-type: application/json
    content-length: 328
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 7
    
    {
      "headers": {
        "Accept": "*/*",
        "Content-Length": "0",
        "Host": "httpbin.default.svc.cluster.local",
        "User-Agent": "curl/7.70.0-DEV",
        "X-B3-Parentspanid": "69f88bc3e322e157",
        "X-B3-Sampled": "0",
        "X-B3-Spanid": "8dd725f30e393d8b",
        "X-B3-Traceid": "38093cd817ad30a569f88bc3e322e157"
      }
    }

Menjalankan Layanan Jarak Jauh untuk Envoy

Pada langkah ini, Anda akan memulai klien Remote Service untuk Envoy. Layanan ini menyediakan endpoint ke sidecar Istio yang diinstal pada layanan target. Anda juga akan menginstal file bantuan dengan layanan httpbin.

  1. Terapkan Apigee Remote Service ke mesh layanan:
    kubectl apply -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
  2. Terapkan EnvoyFilter ke file bantuan Istio di namespace default. EnvoyFilter memungkinkan file bantuan httpbin untuk berkomunikasi dengan Apigee Remote Service.
    kubectl apply -f $CLI_HOME/samples/envoyfilter-sidecar.yaml

Menguji penginstalan

  1. Sekarang, kembali ke shell curl yang Anda buka pada langkah Deploy layanan pengujian ke cluster dan panggil layanan httpbin:
    curl -i httpbin.default.svc.cluster.local/headers
    

    Sekarang layanan dikelola oleh Apigee, dan karena Anda tidak menyediakan kunci API, server akan menampilkan error berikut.

    curl -i httpbin.default.svc.cluster.local/headers
    HTTP/1.1 403 Forbidden
    date: Tue, 12 May 2020 17:51:36 GMT
    server: envoy
    content-length: 0
    x-envoy-upstream-service-time: 11
  2. Konfigurasikan produk API dan dapatkan kunci API seperti yang dijelaskan dalam Cara mendapatkan kunci API.
  3. Lakukan panggilan API menggunakan kunci:
    export APIKEY=YOUR_API_KEY
    curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: $APIKEY"

    Panggilan akan berhasil dengan status 200 dan menampilkan daftar header dalam respons. Contoh:

    curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS"
    HTTP/1.1 200 OK
    server: envoy
    date: Tue, 12 May 2020 17:55:34 GMT
    content-type: application/json
    content-length: 828
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 301
    
    {
      "headers": {
        "Accept": "*/*",
        "Content-Length": "0",
        "Host": "httpbin.default.svc.cluster.local",
        "User-Agent": "curl/7.70.0-DEV",
        "X-Api-Key": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS",
        "X-Apigee-Accesstoken": "",
        "X-Apigee-Api": "httpbin.default.svc.cluster.local",
        "X-Apigee-Apiproducts": "httpbin",
        "X-Apigee-Application": "httpbin",
        "X-Apigee-Authorized": "true",
        "X-Apigee-Clientid": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS",
        "X-Apigee-Developeremail": "jdoe@example.com",
        "X-Apigee-Environment": "envoy",
        "X-Apigee-Organization": "acme-org",
        "X-Apigee-Scope": "",
        "X-B3-Parentspanid": "1476f9a2329bbdfa",
        "X-B3-Sampled": "0",
        "X-B3-Spanid": "1ad5c19bfb4bc96f",
        "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa"
      }
    }

Langkah berikutnya

Traffic API ke layanan httpbin kini dikelola oleh Apigee. Berikut beberapa fitur yang dapat Anda jelajahi dan coba:

  • Akses Analisis Apigee di UI Edge. Buka Analyze > API Metrics > API Proxy Performance.
  • Gunakan CLI untuk mengelola, membuat token, dan mengontrol binding. Untuk mengetahui detail CLI, lihat Referensi.

Meng-uninstal Adaptor Apigee untuk Envoy

Untuk menghapus penginstalan adaptor Apigee Envoy:

  1. Di mana pun Anda memilih untuk menjalankan adaptor envoy (secara native atau di Docker), hapus adaptor tersebut.
  2. Hapus proxy jarak jauh dan token jarak jauh dari lingkungan Apigee Anda. Lihat Menghapus proxy API.
  3. Hapus semua produk atau operations API yang tidak terpakai yang digunakan oleh kasus penggunaan adaptor Envoy. Lihat Menghapus produk API.

Selain itu, Anda dapat menjalankan perintah berikut:

kubectl delete -f $CLI_HOME/samples/envoyfilter-sidecar.yaml
  kubectl delete -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
  kubectl delete -f $CLI_HOME/samples/httpbin.yaml
  kubectl delete -f $CLI_HOME/config.yaml