Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat dokumentasi Apigee Edge.
Contoh ini menunjukkan cara menggunakan Adaptor Apigee untuk Envoy dengan deployment campuran 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 dengan tempat Apigee Hybrid di-deploy. Kemudian, Anda akan mengonfigurasi Adaptor Apigee untuk Envoy guna mengelola panggilan API ke layanan ini dengan Apigee.
Gambar berikut menunjukkan arsitektur dasar untuk integrasi hybrid Apigee:
Proxy Envoy di-deploy dengan layanan HTTP target sebagai sidecar Istio di mesh layanan Istio. File bantuan menangani traffic API ke dan dari layanan target, serta berkomunikasi dengan Layanan Jarak Jauh. Layanan Jarak Jauh juga berkomunikasi dengan platform pengelolaan hybrid untuk mengambil informasi proxy dan produk API.
Memeriksa konfigurasi gcloud Anda
- Pastikan konfigurasi
gcloud
Anda ditetapkan ke project Google Cloud yang terkait dengan organisasi hibrida Anda.Untuk mencantumkan setelan saat ini:
gcloud config list
Jika perlu, tetapkan project ID Google Cloud yang benar dengan perintah ini:
gcloud config set project project-id
- 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 hybrid dengan proxy API remote-service
. Perintah penyediaan juga menyiapkan sertifikat di
Apigee, dan membuat kredensial yang akan digunakan layanan jarak jauh untuk terhubung kembali ke Apigee dengan aman.
- Buka direktori
$CLI_HOME
:cd $CLI_HOME
- Jika Anda bukan pemilik project Google Cloud yang terkait dengan organisasi campuran Apigee, pastikan akun pengguna Google Cloud Anda menyertakan peran Apigee Organization Admin, atau peran API Creator dan Deployer.
- Eksekusi perintah ini untuk mendapatkan token akses:
TOKEN=$(gcloud auth print-access-token);echo $TOKEN
- (Opsional) Secara default, adaptor 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 mereferensikan kuncinya dalam perintah penyediaan. Akun layanan harus memiliki peran
apigee.analyticsAgent
. Untuk mengetahui petunjuknya, lihat Membuat dan mengelola akun layanan. - 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
## OptionalDengan keterangan:
Variabel Deskripsi organization_name Nama organisasi Apigee untuk penginstalan Apigee hybrid Anda. environment_name Nama lingkungan di organisasi Apigee Hybrid Anda. host_alias_url URL yang menyertakan hostAlias
untuk host virtual yang ditentukan dalam konfigurasi campuran Anda. URL harus diawali denganhttps://
. 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 terperinci parameter ini, lihat Perintah penyediaan. - 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 flag
--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
- Periksa konten file
config.yaml
. Ini akan terlihat seperti berikut:# 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
- Terapkan konfigurasi layanan (output file oleh perintah penyediaan) ke cluster:
kubectl apply -f $CLI_HOME/config.yaml
- 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 membuat
contoh file konfigurasi.
Untuk contoh ini, Anda memerlukan file yang dihasilkan berikut:
httpbin.yaml
- Konfigurasi deployment untuk layanan HTTP.apigee-envoy-adapter.yaml
- Konfigurasi deployment untuk Layanan Jarak Jauh untuk Envoy.envoyfilter-sidecar.yaml
- Konfigurasi yang menginstal EnvoyFilter. ke namespace default.
Untuk membuat sampel:
- Buka direktori
$CLI_HOME
. 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 informasi selengkapnya, lihat Perintah sampel.
Men-deploy layanan pengujian ke cluster
Pada langkah ini, Anda akan men-deploy layanan pengujian permintaan/respons HTTP sederhana ke cluster yang sama dengan tempat Apigee hybrid di-deploy.
- Aktifkan injeksi Istio di namespace
default
cluster. Pada langkah berikutnya, Anda akan men-deploy sidecar Envoy ke cluster yang sama ini. Mengaktifkan injeksi Istio memungkinkan deployment sidecar. Contoh ini menggunakan namespacedefault
, dan semua petunjuk berikutnya mengasumsikan hal ini.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
- Terapkan layanan
httpbin
sederhana ke cluster di namespace default:kubectl apply -f $CLI_HOME/samples/httpbin.yaml
- Sekarang, uji layanan. Mulai layanan
curl
yang berjalan di cluster dan buka terminal:kubectl run -it curl --image=curlimages/curl --restart=Never -- sh
- Uji layanan dengan memanggilnya dari dalam cluster:
curl -i httpbin.default.svc.cluster.local/headers
Jika berhasil, Anda akan melihat status 200, dan layanan akan 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 Layanan Jarak Jauh untuk klien Envoy. Layanan ini menyediakan endpoint ke sidecar Istio yang
diinstal di layanan target. Anda juga akan menginstal sidecar
dengan layanan httpbin
.
- Terapkan Layanan Jarak Jauh Apigee ke mesh layanan:
kubectl apply -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
- Terapkan
EnvoyFilter
ke sidecar Istio di namespace default.EnvoyFilter
memungkinkan sidecarhttpbin
berkomunikasi dengan Layanan Jarak Jauh Apigee.kubectl apply -f $CLI_HOME/samples/envoyfilter-sidecar.yaml
Menguji penginstalan
- Sekarang, kembali ke shell curl yang Anda buka di langkah
Deploy layanan pengujian ke cluster dan panggil layanan
httpbin
:curl -i httpbin.default.svc.cluster.local/headers
Layanan kini dikelola oleh Apigee, dan karena Anda tidak memberikan 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
- Konfigurasikan produk API dan dapatkan kunci API seperti yang dijelaskan dalam Cara mendapatkan kunci API.
- 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 Apigee Analytics 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:
- Di mana pun Anda memilih untuk menjalankan adaptor envoy (secara native atau di Docker), hapus adaptor tersebut.
- Hapus proxy remote-service dan remote-token dari lingkungan Apigee Anda. Lihat Menghapus proxy API.
- Hapus produk API atau operasi yang tidak digunakan 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