Cara Mengintegrasikan API Gateway dan Consul?
Fei Han
February 25, 2022
Informasi Latar Belakang
Consul adalah solusi service mesh. Salah satu intinya, Consul KV, adalah basis data key-value terdistribusi yang tujuan utamanya adalah menyimpan parameter konfigurasi dan metadata, sekaligus memungkinkan pengguna untuk menyimpan objek yang diindeks.
Dalam model arsitektur mikroservis, ketika layanan upstream berubah karena perluasan kapasitas, kegagalan perangkat keras, dll., cara mempertahankan informasi layanan upstream dengan menulis konfigurasi secara manual dapat menyebabkan peningkatan biaya pemeliharaan yang signifikan. Sebagai tanggapan, Apache APISIX menyediakan registri penemuan layanan untuk secara dinamis mendapatkan informasi instansi layanan terbaru guna mengurangi biaya pemeliharaan bagi pengguna.
Saat ini, Apache APISIX mendukung registri penemuan layanan berbasis Consul KV dengan modul consul_kv yang disumbangkan oleh komunitas.
Cara Kerja
Apache APISIX memanfaatkan modul consul_kv dari kemampuan penyimpanan key-value terdistribusi Consul KV untuk memisahkan penyedia dan konsumen layanan serta mengimplementasikan dua fungsi inti dari registri penemuan layanan.
- Registrasi layanan: Penyedia layanan mendaftarkan layanan mereka ke registri.
- Penemuan layanan: Konsumen layanan menemukan informasi routing penyedia layanan melalui registri.
Dibangun di atas dasar ini, Apache APISIX akan lebih fleksibel dan dapat beradaptasi dengan arsitektur mikroservis yang ada untuk lebih memenuhi kebutuhan pengguna.

Cara Mengaktifkan Consul di Apache APISIX
Lingkungan pengujian dalam artikel ini dibangun di Docker menggunakan docker-compose.
-
Unduh Apache APISIX.
# Tarik repositori Git dari apisix-docker git clone https://github.com/apache/apisix-docker.git -
Buat folder dan file konfigurasi Consul.
# Buat folder Consul mkdir -p ~/docker-things/consul/ && cd $_ # Buat file konfigurasi touch docker-compose.yml server1.json -
Edit file
docker-compose.yml.version: '3.8' services: consul-server1: image: consul:1.9.3 container_name: consul-server1 restart: always volumes: - ./server1.json:/consul/config/server1.json:ro networks: - apisix ports: - '8500:8500' command: 'agent -bootstrap-expect=1' networks: apisix: external: true name: example_apisix -
Edit file
server1.json.{ node_name: consul-server1, server: true, addresses: { http: 0.0.0.0 } } -
Tambahkan informasi konfigurasi terkait Consul ke file konfigurasi Apache APISIX
apisix_conf/config.yaml.# config.yml # ...konfigurasi lain discovery: consul_kv: servers: - http://consul-server1:8500 prefix: upstreams -
Mulai Apache APISIX dan Consul.
# Masuk ke folder contoh, konsul, mulai APISIX dan Consul docker-compose up -d -
Daftarkan layanan pengujian ke Consul. Contoh ini berisi dua layanan web yang dapat Anda gunakan langsung untuk pengujian.
# Periksa docker-compose.yml dari contoh # Anda dapat melihat dua layanan Web $ cat docker-compose.yml | grep web # Output web1: - ./upstream/web1.conf:/etc/nginx/nginx.conf web2: - ./upstream/web2.conf:/etc/nginx/nginx.conf -
Konfirmasi alamat IP dari layanan Web ini.
$ sudo docker inspect -f='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(sudo docker ps -aq) | grep web # Output /example-web1-1 - 172.26.0.7 /example-web2-1 - 172.26.0.2 -
Buat permintaan ke API HTTP Consul di terminal untuk mendaftarkan layanan pengujian.
# Daftarkan dengan IP yang sesuai curl \ -X PUT \ -d ' {weight: 1, max_fails: 2, fail_timeout: 1}' \ http://127.0.0.1:8500/v1/kv/upstreams/webpages/172.26.0.7:80 curl \ -X PUT \ -d ' {weight: 1, max_fails: 2, fail_timeout: 1}' \ http://127.0.0.1:8500/v1/kv/upstreams/webpages/172.26.0.2:80Path setelah
/v1/kv/mengikuti format{Prefix}/{Nama Layanan}/{IP}:{Port}.{Prefix}adalah prefiks yang ditulis saat mengonfigurasi Consul di APISIX, sedangkan{Nama Layanan}dan{IP}:{Port}perlu ditentukan oleh pengguna sesuai dengan layanan upstream.Format data adalah
{"weight": , "max_fails": , "fail_timeout": }. -
Periksa apakah layanan pengujian berhasil didaftarkan.
curl http://127.0.0.1:8500/v1/kv/upstreams/webpages?keysPesan kembalian berikut menunjukkan pendaftaran berhasil.
[upstreams/webpages/172.26.0.2:80,upstreams/webpages/172.26.0.7:80]%
Buat Rute dan Aktifkan Consul
Tambahkan Consul ke rute menggunakan Admin API yang disediakan oleh Apache APISIX.
X-API-KEY dan upstream.service_name perlu ditentukan sebelum menambahkannya.
X-API-KEY: Untuk token akses Admin API, dalam contoh ini, kami menggunakan defaultedd1c9f034335f136f87ad84b625c8f1.upstream.service_name: Nama layanan upstream, yang menentukan layanan dalam registri yang akan diikat ke rute, harus diatur ke URL yang digunakan untuk mendaftarkan layanan pengujian saat menggunakan Consul, dan bagian{IP}:{Port}harus dihapus di akhir. Kami juga dapat menggunakan Memory Dump API yang disediakan oleh Apache APISIX untuk mendapatkan URL layanan dan memastikan apakah layanan upstream ditemukan dengan benar.
$ curl http://127.0.0.1:9092/v1/discovery/consul_kv/dump | jq # Output { "services": { # Kunci ini adalah URL yang diperlukan "http://consul-server1:8500/v1/kv/upstreams/webpages/": [ { "port": 80, "host": "172.26.0.7", "weight": 1 }, { "port": 80, "host": "172.26.0.2", "weight": 1 } ] }, "config": { # ...konfigurasi } }
Tambahkan Rute
Di sini permintaan dengan URL /consul/* diarahkan ke http://consul-server1:8500/v1/kv/upstreams/webpages/. Selain itu, discovery_type harus diatur ke consul_kv untuk memulai modul yang sesuai.
curl http://127.0.0.1:9080/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X POST -d ' { "uri": "/consul/*", "upstream": { "service_name": "http://consul-server1:8500/v1/kv/upstreams/webpages/", "type": "roundrobin", "discovery_type": "consul_kv" } }'
Uji dan Verifikasi Hasil
Hasil permintaan menunjukkan bahwa rute baru di Apache APISIX telah dapat menemukan alamat layanan yang benar melalui Consul dan memintanya ke kedua node berdasarkan kebijakan load balancing.
# permintaan pertama curl -s http://127.0.0.1:9080/consul/ # Output hello web1% # permintaan kedua curl -s http://127.0.0.1:9080/consul/ # Output hello web2% # Catatan: Ada kemungkinan kedua permintaan akan mengembalikan # hasil yang sama seperti web1 atau web2. # Ini disebabkan oleh sifat load balancing dan # Anda dapat mencoba membuat lebih banyak permintaan.
Ringkasan
Bagian pertama artikel ini menjelaskan bagaimana Apache APISIX bekerja dengan Consul untuk mengimplementasikan registri penemuan layanan berbasis Consul KV guna menyelesaikan masalah manajemen dan pemeliharaan informasi layanan. Bagian kedua artikel ini berfokus pada cara menggunakan Apache APISIX di Docker dengan Consul. Tentu saja, aplikasi dalam skenario aktual perlu dianalisis sesuai dengan skenario bisnis dan arsitektur sistem yang ada.
Instruksi lebih lanjut tentang penggunaan registri Consul di Apache APISIX dapat ditemukan di dokumentasi resmi.
Apache APISIX saat ini juga sedang mengerjakan plugin tambahan untuk mendukung integrasi layanan tambahan, jadi jika Anda tertarik, jangan ragu untuk memulai diskusi di GitHub Discussion, atau melalui mailing list untuk berkomunikasi.