Mengapa APISIX Ingress Controller Lebih Baik Dibandingkan Emissary-ingress?
Xin Rong
March 17, 2023
Informasi Latar Belakang
Kubernetes Ingress adalah objek API yang digunakan untuk mendefinisikan aturan untuk merutekan lalu lintas eksternal ke layanan internal dalam sebuah kluster. Sebuah Ingress Controller biasanya digunakan untuk mengimplementasikan logika dari sumber daya Ingress dan mengelola aturan lalu lintas ini secara terpusat.

Dalam praktiknya, pengguna perusahaan biasanya membutuhkan fungsi manajemen lalu lintas seperti mTLS, percobaan ulang, pembatasan laju, dan autentikasi, yang tidak dapat dipenuhi oleh semantik sumber daya Ingress. Oleh karena itu, implementasi Ingress Controller biasanya memperluas fungsi dengan menambahkan CRD tambahan. Berikut ini akan memberikan perbandingan detail tentang perbedaan antara implementasi APISIX Ingress Controller dan Emissary-Ingress.
Apa Itu Apache APISIX Ingress Controller
Apache APISIX Ingress Controller adalah proyek sumber terbuka di bawah ASF (Apache Software Foundation). Bidang kontrolnya mengkonfigurasi dan mengirimkan sumber daya di Kubernetes, sementara APISIX menangani lalu lintas bisnis yang sebenarnya. Untuk meningkatkan keamanan, seluruh proses penyebaran menggunakan arsitektur bidang data dan bidang kontrol yang sepenuhnya terpisah, secara efektif menghindari risiko kebocoran izin kluster Kubernetes yang disebabkan oleh serangan pada bidang data.

Apa Itu Emissary-Ingress
Emissary-Ingress adalah proyek inkubasi dari CNCF (Cloud Native Computing Foundation). Sebagai bidang kontrol dari proxy Envoy, ia bertanggung jawab untuk mengurai sumber daya Kubernetes, dan semua lalu lintas langsung diproses oleh Envoy pada bidang data. Dengan mengemas bidang kontrol dan bidang data ke dalam satu kontainer, keseluruhan lebih mudah diakses dan disebarkan.

Perbedaan antara APISIX Ingress Controller dan Emissary-Ingress
Selain mendukung sumber daya Ingress, baik APISIX Ingress Controller maupun Emissary-Ingress dapat mendukung konfigurasi melalui CRD dan Gateway API untuk melengkapi keterbatasan semantik Ingress.
Bagian berikut akan menganalisis perbedaan dan keunggulan antara keduanya dari perspektif fungsi dasar, penemuan layanan, dan skalabilitas.
Fungsi Dasar
| Fitur | APISIX Ingress | Emissary-ingress | |
| Protokol | HTTP/HTTPS | ✓ | ✓ |
| gRPC | ✓ | ✓ | |
| TCP | ✓ | ✓ | |
| UDP | ✓ | ✕ | |
| Websockets | ✓ | ✓ | |
| Load balance | Round Robin | ✓ | ✓ |
| Ring Hash | ✓ | ✓ | |
| Least Connections | ✓ | ✓ | |
| Maglev | ✕ | ✓ | |
| Autentikasi | External Auth | ✓ | ✓ |
| Basic | ✓ | ✓ | |
| JWT | ✓ | ✕ | |
| OAuth | ✓ | ✕ | |
| OpenID | ✓ | ✕ | |
| Manajemen Lalu Lintas | Circuit Breaker | ✓ | ✓ |
| Rate Limiting | ✓ | ✓ | |
| Canary | ✓ | ✓ | |
| Fault Injection | ✓ | ✕ | |
| Health Checks | ✓ | ✓ | |
Fungsi gateway umum termasuk manajemen lalu lintas, load balancing, dan autentikasi. Namun, perlu dicatat bahwa Emissary-Ingress memiliki dukungan yang relatif terbatas untuk autentikasi, yang hanya mencakup kemampuan Basic Auth dan External Auth.
Penemuan Layanan
Dalam arsitektur mikrolayanan, aplikasi biasanya dipecah menjadi beberapa mikrolayanan yang bekerja sama untuk menyelesaikan logika bisnis tertentu. Karena jumlah instance mikrolayanan terus berubah, diperlukan mekanisme untuk membantu layanan menemukan dan melokasikan satu sama lain.
Penemuan layanan mengacu pada cara mikrolayanan dilokasikan di jaringan dengan mendapatkan informasi tentang penemuan layanan melalui nama layanan untuk menentukan instance mana yang akan dirutekan.
Untuk kerangka kerja mikrolayanan tradisional, pemilihan registri sering didasarkan pada kebutuhan bisnis tertentu. Namun, memigrasikan komponen registrasi dan penemuan layanan yang ada ke mekanisme penemuan layanan DNS berbasis Kubernetes dapat memerlukan biaya tertentu dalam hal modifikasi.
Di sisi lain, jika gateway mendukung komponen registrasi dan penemuan layanan saat ini, tidak perlu melakukan modifikasi tersebut, yang dapat menghasilkan dukungan yang lebih baik untuk kerangka kerja mikrolayanan.
Berikut adalah situasi dukungan keduanya untuk komponen penemuan layanan:
| Penemuan Layanan | Apache APISIX Ingress Controller | Emissary-Ingress |
|---|---|---|
| Kubernetes | ✓ | ✓ |
| DNS | ✓ | ✓ |
| Nacos | ✓ | ✕ |
| Eureka | ✓ | ✕ |
| Consul | ✓ | ✓ |
Mengenai ekosistem penemuan layanan, APISIX Ingress Controller memiliki dukungan yang lebih kuat, dan pengguna dapat dengan mudah mengintegrasikannya ke dalam kerangka kerja mikrolayanan yang ada melalui Ingress controller.
Skalabilitas
Ketika fungsionalitas Kubernetes Ingress controller tidak memenuhi persyaratan tertentu, pengguna dapat memperluas fungsionalitasnya melalui pengembangan kustom. Kebutuhan yang lebih personal dapat dipenuhi dengan mengembangkan plugin kustom atau memodifikasi kode yang ada. Ingress controller dengan skalabilitas yang kuat dapat membuat pengembangan dan penyesuaian fitur lebih mudah, memberikan dukungan dan solusi yang lebih baik untuk skenario tertentu.
Emissary-Ingress
Ekstensibilitas Emissary-Ingress relatif buruk, karena tidak mendukung ekstensi melalui Envoy Filter kustom. Karena bidang data dan bidang kontrol terintegrasi, diperlukan pengembangan kustom dari seluruh sistem. Kompleksitas pengembangan kustom untuk bidang data Envoy tinggi dan membebani pengembang secara signifikan.
Selain itu, jika pengguna membutuhkan Emissary-Ingress yang lebih kuat, mereka perlu mengupgrade ke produk komersial Ambassador Edge Stack. Beberapa fitur proprietary memerlukan pembayaran untuk mendapatkan dukungan.
APISIX Ingress Controller
Bidang data APISIX terutama memperluas fungsionalitasnya melalui plugin, yang menyediakan lebih dari 80 plugin siap pakai. APISIX Ingress Controller mendukung semua plugin yang disediakan oleh APISIX, yang dapat memenuhi sebagian besar kasus penggunaan sehari-hari.
Jika kustomisasi diperlukan berdasarkan skenario bisnis tertentu, APISIX menawarkan beberapa opsi ekstensi untuk dipilih dan dikombinasikan oleh pengguna sesuai dengan situasi mereka secara bebas. Metode ekstensi yang saat ini didukung adalah sebagai berikut:
- Mengembangkan plugin menggunakan bahasa Lua relatif sederhana dan hampir tanpa kehilangan performa. Selain itu, Anda dapat menggunakan plugin serverless untuk menulis kode Lua langsung, yang dapat dengan cepat memenuhi kebutuhan bisnis.
- Selain bahasa Lua asli, Anda juga dapat menggunakan
Plugin RunneratauWASMplugin untuk ekstensi, yang mendukung pengembangan plugin kustom dalam bahasa pemrograman seperti Java, Python, dan Go. Ini memungkinkan pengguna untuk memanfaatkan logika bisnis yang ada dan memilih berdasarkan tumpukan teknologi perusahaan atau preferensi pengembangan tanpa memerlukan bahasa baru.
APISIX Ingress Controller sepenuhnya mendukung metode ekstensi di atas tanpa pengembangan tambahan.
Performa
Sebagai komponen proxy lalu lintas ingress Kubernetes, ia mengelola semua lalu lintas masuk platform dan secara seragam mengelola berbagai aturan lalu lintas, menempatkan tuntutan yang lebih tinggi pada performa proxy.
Dalam artikel ini, kami akan melakukan tes performa pada APISIX Ingress Controller (APISIX: 3.1.0) dan Emissary-Ingress 3.4.0 dalam instance yang sama (4C 8G).
QPS
QPS (Queries-per-second) menunjukkan jumlah kueri yang dapat ditangani oleh layanan per detik. Semakin tinggi angkanya, semakin baik performanya.

- 5000 Ingress Resource QPS

Latensi
Latensi respons: waktu yang dibutuhkan server untuk merespons. Semakin kecil penundaan, semakin baik performanya.

Grafik menunjukkan bahwa APISIX Ingress Controller mempertahankan performa yang konsisten di berbagai skala sumber daya, menunjukkan performa yang seimbang.
Di sisi lain, Emissary-Ingress memiliki dampak signifikan pada QPS dan latensi ketika menangani skala sumber daya besar dan pencocokan rute yang berbeda, dengan performa menurun seiring dengan peningkatan jumlah sumber daya. Oleh karena itu, seiring dengan pertumbuhan volume bisnis di lingkungan produksi aktual, performa tinggi APISIX menjadi lebih menonjol.
Kesimpulan
Emissary-Ingress dicirikan oleh kesederhanaan dan kemudahan integrasi, tetapi lebih sulit untuk pengembangan kustom. Selain itu, kebutuhan fitur tambahan bergantung pada komponen terkait platform untuk dukungan.
Sebagai perbandingan, APISIX Ingress Controller memiliki keunggulan dalam skalabilitas dan integrasi penemuan layanan, dengan ekstensibilitas yang kuat dan pengembangan yang sederhana. Selain itu, APISIX Ingress Controller menunjukkan performa yang sangat baik, terutama dalam skenario di mana skala bisnis terus berkembang, menunjukkan keunggulan yang signifikan.