Membangun Apache APISIX Ingress Controller yang Lebih Kuat dengan Litmus Chaos
May 4, 2023
Ikhtisar
Chaos Engineering memainkan peran penting dalam menilai dan meningkatkan ketahanan serta keandalan sistem perangkat lunak. Dengan mensimulasikan peristiwa disruptif, organisasi dapat mengidentifikasi kerentanan dan meningkatkan desain serta arsitektur sistem. Dalam artikel ini, kita akan membahas pentingnya Chaos Engineering dan penerapannya secara khusus dalam merancang eksperimen Chaos untuk Ingress Controller.
Mengapa Kita Membutuhkan Chaos Engineering?
Chaos Engineering adalah proses mengevaluasi sistem perangkat lunak dengan mensimulasikan peristiwa destruktif, seperti gangguan jaringan server atau pembatasan API. Dengan memperkenalkan chaos atau kesalahan dalam sistem, kita dapat menguji ketahanan dan keandalan sistem dalam kondisi yang tidak stabil dan tidak terduga.
Chaos Engineering membantu tim mengidentifikasi risiko tersembunyi, memantau kerentanan, dan mengidentifikasi hambatan kinerja dalam sistem terdistribusi dengan mensimulasikan skenario dunia nyata dalam lingkungan kontrol yang aman. Pendekatan ini secara efektif mencegah downtime sistem atau gangguan produksi.
Pendekatan Netflix dalam menangani sistem menginspirasi kita untuk mengadopsi pendekatan yang lebih ilmiah, yang mendorong kelahiran dan perkembangan Chaos Engineering.
1. Pengenalan Peristiwa Disruptif
Chaos Engineering melibatkan pengenalan peristiwa disruptif, seperti partisi jaringan, degradasi layanan, dan pembatasan sumber daya, untuk mensimulasikan skenario dunia nyata dan menguji kemampuan sistem dalam menangani kondisi yang tidak terduga. Tujuannya adalah untuk mengidentifikasi kerentanan atau kelemahan dan meningkatkan desain serta arsitektur sistem agar lebih kuat dan tangguh.
2. Menguji Ketahanan Sistem
Dalam lanskap teknologi yang terus berkembang dan cepat berubah saat ini, menguji ketahanan sistem sangat penting untuk memastikan bahwa sistem tersebut kuat, skalabel, dan mampu menangani tantangan serta kondisi yang tidak terduga. Chaos Engineering adalah cara yang efektif untuk mencapai ini dengan memperkenalkan peristiwa disruptif untuk mengamati respons sistem dan mengukur kemampuannya dalam menangani kondisi yang tidak terduga.
Organisasi dapat memantau log sistem, metrik kinerja, dan pengalaman pengguna untuk mengukur dampak peristiwa disruptif terhadap ketahanan sistem. Melacak metrik ini memberikan pemahaman yang lebih baik tentang perilaku sistem, memungkinkan organisasi untuk mengidentifikasi area yang perlu ditingkatkan.
3. Menemukan Masalah Tersembunyi
Sistem terdistribusi rentan terhadap masalah tersembunyi, seperti kehilangan data, hambatan kinerja, dan kesalahan komunikasi, yang mungkin sulit dideteksi karena hanya muncul ketika sistem berada di bawah tekanan. Chaos Engineering dapat membantu mengungkap masalah tersembunyi ini dengan memperkenalkan peristiwa disruptif. Informasi ini kemudian dapat digunakan untuk meningkatkan desain dan arsitektur sistem, membuatnya lebih tangguh dan andal.
Mengidentifikasi dan menyelesaikan masalah ini secara proaktif meningkatkan keandalan dan kinerja sistem, mencegah downtime, mengurangi risiko kehilangan data, dan memastikan sistem berjalan dengan lancar.
4. Apa Nilainya dan Mengapa Kita Membutuhkannya?
Sistem terdistribusi kompleks dan secara inheren kacau, yang dapat menyebabkan kegagalan. Penggunaan arsitektur cloud dan microservices memberikan banyak keuntungan tetapi juga datang dengan kompleksitas dan chaos. Insinyur bertanggung jawab untuk membuat sistem seandal mungkin.
Tanpa pengujian, tidak ada kepercayaan untuk menggunakan proyek dalam lingkungan produksi. Selain pengujian unit konvensional dan pengujian end-to-end, memperkenalkan pengujian chaos membuat sistem lebih kuat.
Ketika kesalahan terjadi, memperbaikinya membutuhkan waktu dan dapat menyebabkan kerugian yang tidak terukur, dengan efek jangka panjang di masa depan. Selama proses perbaikan, berbagai faktor perlu dipertimbangkan, termasuk kompleksitas sistem, jenis kesalahan, dan kemungkinan masalah baru, untuk memastikan perbaikan akhir yang efektif.
Selain itu, ketika proyek open-source membawa kesalahan serius kepada pengguna dalam lingkungan produksi, banyak pengguna mungkin beralih ke produk lain.
Bagaimana Merancang Eksperimen Chaos untuk Ingress Controller?
1. Apa Itu Ingress?
Ingress adalah objek sumber daya Kubernetes yang berisi aturan tentang bagaimana klien eksternal dapat mengakses layanan dalam kluster. Aturan ini menentukan klien mana yang dapat mengakses layanan mana, bagaimana permintaan klien diarahkan ke layanan yang sesuai, dan bagaimana permintaan klien ditangani.
2. Apa Itu Ingress Controller?
Sumber daya Ingress memerlukan Ingress Controller untuk memprosesnya. Controller menerjemahkan aturan Ingress ke dalam konfigurasi pada proxy, memungkinkan klien eksternal mengakses layanan dalam kluster. Dalam lingkungan produksi, Ingress Controller perlu memiliki kemampuan kompleks, seperti membatasi sumber akses dan metode permintaan, autentikasi, dan otorisasi. Sebagian besar Ingress Controller memperluas semantik Ingress melalui anotasi dalam sumber daya Ingress.
3. Apa Itu Apache APISIX Ingress Controller?
Apache APISIX Ingress Controller adalah jenis load balancer khusus yang membantu administrator mengelola dan mengontrol lalu lintas Ingress. Ini menggunakan APISIX sebagai data plane untuk menyediakan pengguna dengan routing dinamis, load balancing, penskalaan elastis, kebijakan keamanan, dan fitur lainnya untuk meningkatkan kontrol jaringan dan memastikan ketersediaan dan keamanan yang lebih tinggi untuk bisnis mereka. APISIX Ingress Controller mendukung tiga mode konfigurasi: Kubernetes Ingress, sumber daya kustom, dan Gateway API.

4. Apa Itu Litmus Chaos?
Litmus Chaos adalah framework Chaos Engineering open-source yang menyediakan framework eksperimen infrastruktur untuk memvalidasi stabilitas controller dan arsitektur microservices. Ini dapat mensimulasikan berbagai lingkungan, seperti lingkungan tingkat container dan aplikasi, bencana alam, kesalahan, dan peningkatan, untuk memahami bagaimana sistem merespons perubahan ini. Framework ini juga dapat mengeksplorasi perubahan perilaku antara controller dan aplikasi, dan bagaimana controller merespons tantangan dalam keadaan tertentu. Litmus Chaos menawarkan kemampuan integrasi observabilitas yang nyaman dan sangat dapat diperluas.
5. Bagaimana Merancang Eksperimen Chaos?
Berikut adalah prosedur umum untuk merancang eksperimen chaos dalam skenario apa pun:
- Tentukan sistem yang diuji: Identifikasi komponen spesifik sistem yang ingin Anda eksperimenkan dan kembangkan tujuan yang jelas dan terukur untuk eksperimen. Ini termasuk membuat daftar komprehensif komponen, seperti perangkat keras dan perangkat lunak, yang akan diuji, serta menentukan ruang lingkup eksperimen dan hasil yang diharapkan.

kube-apiserver: jika terjadi pengecualian, penulisan sumber daya Ingress gagal. Ingress-controller: Gangguan jaringan, Crash, Podfaults, I/O data-plane: Gangguan jaringan, Crash, Podfaults, I/O
- Pilih eksperimen yang tepat: Pilih eksperimen yang selaras dengan tujuan yang telah Anda tetapkan dan sangat mirip dengan skenario dunia nyata. Ini akan membantu memastikan bahwa eksperimen menghasilkan hasil yang bermakna dan secara akurat mencerminkan perilaku sistem.
- Buat hipotesis: Buat hipotesis tentang bagaimana sistem akan berperilaku selama eksperimen dan hasil apa yang Anda antisipasi. Ini harus didasarkan pada pengalaman atau penelitian, dan harus masuk akal serta dapat diuji.
- Jalankan eksperimen: Jalankan eksperimen dalam lingkungan yang terkontrol, seperti lingkungan staging, untuk membatasi potensi kerusakan pada sistem produksi. Kumpulkan semua data yang relevan selama eksperimen dan simpan dengan aman. Mungkin ada perbedaan pendapat tentang apakah eksperimen harus dilakukan langsung dalam lingkungan produksi. Namun, untuk sebagian besar skenario, kita perlu memastikan Service Level Objective (SLO) sistem terpenuhi.
- Evaluasi hasil: Evaluasi hasil eksperimen dan bandingkan dengan hipotesis Anda. Analisis data yang dikumpulkan dan dokumentasikan setiap pengamatan atau temuan. Ini termasuk mengidentifikasi hasil yang tidak terduga atau perbedaan dan menentukan bagaimana hal itu mungkin memengaruhi sistem. Selain itu, pertimbangkan bagaimana hasil eksperimen dapat digunakan untuk meningkatkan sistem.
Skenario Penggunaan Utama Ingress Controller
Kemampuan terpenting dari Ingress Controller adalah memproksi lalu lintas, dan semua fungsi lainnya didasarkan pada fungsi inti ini. Oleh karena itu, saat melakukan Chaos Engineering, lalu lintas proxy normal adalah metrik kunci.
Untuk menentukan sistem yang diuji untuk APISIX Ingress Controller, pengguna perlu membuat konfigurasi rute, seperti Ingress, Gateway API, atau CRD, dan menerapkannya ke kluster Kubernetes melalui Kubectl. Proses ini melewati kube-apiserver untuk autentikasi, otorisasi, admission, dan prosedur terkait lainnya, dan kemudian disimpan di etcd.
APISIX Ingress Controller secara terus-menerus memantau perubahan dalam sumber daya Kubernetes. Konfigurasi ini kemudian dikonversi ke konfigurasi pada data plane. Ketika klien meminta data plane, ia mengakses layanan upstream sesuai dengan aturan routing.
Jika kube-apiserver mengalami pengecualian, itu akan mencegah konfigurasi dibuat, atau Ingress Controller mendapatkan konfigurasi yang benar. Demikian pula, jika ada pengecualian dalam data plane, seperti gangguan jaringan atau Pod dihentikan, itu juga tidak akan dapat melakukan proxy lalu lintas normal.
Ruang lingkup eksperimen kita terutama adalah dampak pada ketersediaan sistem jika Ingress Controller mengalami pengecualian.
1. Langkah Operasi Detail
- Pilih eksperimen yang tepat: Kita dapat mencakup banyak skenario konfigurasi yang salah melalui pengujian end-to-end. Terutama melalui Chaos Engineering, kita dapat memverifikasi apakah data plane masih dapat memproksi lalu lintas secara normal ketika Ingress Controller mengalami pengecualian, seperti kesalahan DNS, gangguan jaringan, atau Pod dihentikan.
- Buat hipotesis: Untuk setiap skenario, kita dapat membuat hipotesis seperti "Ketika Pod Ingress-controller mendapatkan
X?, permintaan klien masih bisa mendapatkan respons normal." - Jalankan eksperimen: Eksperimen dan variabel telah ditentukan, jadi yang tersisa hanyalah bereksperimen.
Litmus Chaos menyediakan berbagai cara untuk melakukan eksperimen. Kita dapat melakukannya melalui Litmus Portal. Untuk melakukan ini, kita perlu membuat skenario Chaos, memilih aplikasi yang akan dieksperimenkan, dan langkah-langkah ini relatif mudah. Namun, kita harus memperhatikan fakta bahwa Litmus Chaos mencakup sumber daya Probes.
Probes adalah pemeriksaan yang dapat dipasang yang dapat didefinisikan dalam ChaosEngine untuk setiap Eksperimen Chaos. Pod eksperimen menjalankan pemeriksaan ini berdasarkan mode yang mereka definisikan dan mempertimbangkan keberhasilannya sebagai kondisi yang diperlukan dalam menentukan hasil eksperimen, selain pemeriksaan bawaan standar. Pada saat yang sama, kita juga dapat menjadwalkan eksperimen, yang merupakan fungsi yang sangat berharga.
Selain itu, Litmus Chaos juga mendukung menjalankan eksperimen dengan mengirimkan manifes YAML.

- Evaluasi hasil: Litmus Chaos memiliki laporan statistik bawaan, dan dapat diintegrasikan dengan Prometheus dan Grafana untuk menyediakan dashboard terpadu untuk integrasi.

2. Manfaat dan Masa Depan
Melalui pengujian end-to-end yang ketat dan kekuatan Chaos Engineering, kami yakin akan stabilitas dan keandalan APISIX Ingress Controller yang dikirimkan. Chaos Engineering juga membantu kami mengidentifikasi dan memperbaiki bug. Kami terus bekerja untuk meningkatkan dan mengembangkan proyek yang luar biasa ini, dan kami mengundang Anda untuk bergabung dengan komunitas kami.