APISIX Ingress Controller Terintegrasi dengan Service Discovery

Jintao Zhang

Jintao Zhang

January 13, 2023

Products

Apakah Service Discovery Diperlukan dalam Aplikasi Cloud-Native?

Latar Belakang

Arsitektur microservice adalah salah satu arsitektur aplikasi yang paling populer saat ini. Dengan meningkatnya ukuran aplikasi, manajemen aplikasi menjadi lebih sulit. Arsitektur microservice mencoba menyelesaikan masalah ini dengan membagi aplikasi menjadi beberapa komponen layanan yang lebih kecil, yang bekerja sama untuk menyelesaikan logika bisnis dan fungsi tertentu.

Komponen-komponen ini harus berkomunikasi secara dinamis untuk bekerja dengan baik bersama-sama. Biasanya diperlukan untuk memperkenalkan alat service discovery. Kami telah menulis artikel yang memperkenalkan service discovery dalam microservices sebelumnya: Apa Itu Service Discovery dalam Microservices - API7.ai.

Dengan memperkenalkan service discovery, komponen dapat diperoleh secara dinamis. Mereka hanya perlu memperhatikan nama komponen lain tanpa perlu memperhatikan informasi lain seperti lokasi penyebaran atau IP penyebaran.

Service Discovery di Kubernetes

Di lingkungan Kubernetes, pod adalah unit penyebaran terkecil.

Dan di Kubernetes, komponen lebih sulit untuk berkomunikasi satu sama lain karena IP Pod tidak persisten dan sering berubah.

Oleh karena itu, lebih penting lagi untuk menyesuaikan diri dengan lingkungan dinamis ini saat menyebarkan aplikasi di Kubernetes.

Kubernetes mempertimbangkan kebutuhan ini dan menyediakan mekanisme service discovery berbasis DNS sendiri.

Kubernetes menyediakan konsep yang disebut Service, mirip dengan proxy terbalik. Klien hanya perlu menggunakan Service, dan tidak perlu tahu pod yang dibungkus di belakangnya.

Setiap Service akan diberikan ClusterIP yang persisten. Jadi, ketika IP pod berubah, komponen lain masih dapat berkolaborasi melalui ClusterIP tetap dari Service.

Pada saat yang sama, service di Kubernetes akan secara otomatis memperbarui catatan A/AAAA ke DNS di dalam kluster.

Catatan tersebut terlihat seperti:

my-svc.my-namespace.svc.cluster-domain.example

Klien dapat melakukan parsing lintas namespace atau dalam namespace yang sama, sangat memudahkan service discovery antar komponen.

Namun, untuk arsitektur microservice tradisional yang tidak berada di Kubernetes, kami biasanya menggunakan alat service discovery untuk mencapai kolaborasi antar layanan. Untuk sepenuhnya menyesuaikan diri dengan mekanisme service discovery berbasis DNS di lingkungan Kubernetes, diperlukan biaya transformasi/migrasi tertentu.

Oleh karena itu, Anda harus mempertahankan mekanisme service discovery asli jika ingin biaya transformasi yang lebih rendah.

Dengan premis ini, apa cara terbaik untuk mengekspos layanan yang baru dimigrasikan ke Kubernetes?

Bagaimana APISIX Ingress Bekerja dengan Service Discovery?

APISIX Ingress adalah implementasi dari controller Ingress di Kubernetes. Ini menggunakan Apache APISIX sebagai data plane dan mendukung konfigurasi aturan proxy melalui Ingress, CRD kustom, dan Gateway API. Pada saat yang sama, ini juga menyediakan integrasi dengan alat service discovery, yang memudahkan untuk memproksi layanan yang terdaftar dan mengeksposnya ke klien.

Kami akan menjelaskannya secara detail di bagian ini.

Dukungan APISIX untuk Service Discovery

APISIX adalah API gateway cloud-native berkinerja tinggi yang sepenuhnya dinamis, menyediakan 80+ plugin siap pakai, mencakup sebagian besar skenario penggunaan.

Salah satu kemampuan yang luar biasa adalah integrasi dengan alat service discovery.

APISIX dapat diintegrasikan dengan alat service discovery berikut:

  • Consul
  • DNS
  • Eureka
  • Nacos

Cukup tambahkan konfigurasi berikut ke file konfigurasi APISIX (ambil DNS sebagai contoh):

discovery: dns: servers: - "127.0.0.1:8600" # gunakan alamat nyata dari server DNS Anda

Dengan cara ini, saat mengonfigurasi upstream, APISIX dapat secara dinamis mengurai informasi alamat upstream yang sebenarnya melalui service discovery dan memproksi permintaan.

Bagaimana APISIX Ingress Melakukannya?

APISIX Ingress menggunakan APISIX sebagai komponen proxy data plane. Saat pertama kali mengintegrasikan service discovery, kami mempertimbangkan dua opsi.

  • Integrasi control plane: mengonfigurasi service discovery di controller Ingress, mengurai dan menganalisis konfigurasi, dan mengirim hasilnya ke APISIX untuk diproksi.
  • Integrasi data plane: mengonfigurasi service discovery pada data plane APISIX, dan data plane melakukan penguraian konfigurasi dan proxying.

Kedua solusi ini memiliki keunggulan masing-masing, tetapi mempertimbangkan pembaruan konfigurasi secara real-time dan kematangan solusi, kami memilih solusi integrasi data plane.

Dengan menggunakan solusi ini, pengguna dapat mengintegrasikannya dengan biaya yang lebih rendah, dan solusi ini cukup matang yang telah melalui banyak verifikasi produksi.

Bagaimana cara menggunakan APISIX Ingress?

Pertama, pastikan bahwa konfigurasi service discovery yang benar telah dimasukkan dalam konfigurasi APISIX. Berikut menggunakan DNS sebagai contoh:

discovery: dns: servers: - "10.96.0.10:53"

Buat sumber daya ApisixUpstream, dan modifikasi konfigurasinya yang terkait dengan discovery sesuai dengan skenario penggunaan. Misalnya, type: dns dan serviceName yang akan diproksi diatur di sini:

# httpbin-upstream.yaml apiVersion: apisix.apache.org/v2 kind: ApisixUpstream metadata: name: httpbin-upstream spec: discovery: type: dns serviceName: httpbin.default.svc.cluster.local

Terakhir, buat sumber daya ApisixRoute yang upstreams-nya merujuk ke sumber daya ApisixUpstream yang baru saja dibuat:

# httpbin-route.yaml apiVersion: apisix.apache.org/v2 kind: ApisixRoute metadata: name: httpbin-route spec: http: - name: rule1 match: hosts: - local.httpbin.org paths: - /* upstreams: - name: httpbin-upstream

Setelah sumber daya di atas dibuat dengan benar, Anda dapat mengakses httpbin.default.svc.cluster.local yang terdaftar di DNS melalui local.httpbin.org.

how client make requests

Manfaat dan Pandangan

Melalui integrasi ini, sangat mudah untuk mengekspos layanan ke klien melalui APISIX Ingress untuk aplikasi yang sudah menggunakan alat service discovery. Fitur APISIX Ingress ini sangat khas karena sebagian besar controller Ingress tidak menyediakan solusi integrasi ini.

Terima kasih telah membaca. Kami masih dalam perjalanan untuk membangun APISIX Ingress untuk memberikan pengalaman pengguna terbaik!

Untuk informasi lebih lanjut tentang API gateway, silakan kunjungi blog kami atau hubungi kami.

Tags: