Kamal Proxy - mendukung deployment tanpa downtime dengan proxy HTTP minimal
Fitur
- Kamal Proxy adalah proxy HTTP yang dirancang agar dapat dengan mudah mengorkestrasi deployment tanpa downtime
- Dengan menjalankan aplikasi web di belakang Kamal Proxy, perubahan dapat dideploy tanpa mengganggu trafik yang sedang berlangsung
- Dapat bekerja tanpa kerja sama khusus dari aplikasi
- Dirancang sebagai bagian dari Kamal, tetapi juga dapat digunakan secara mandiri atau bersama alat deployment lain
Gambaran singkat
- Untuk menjalankan instance proxy, gunakan perintah
kamal-proxy run
- Tidak ada file konfigurasi, tetapi jika nilai bawaan tidak sesuai dengan aplikasi, Anda dapat menentukan opsi
- Misalnya, untuk menjalankan proxy di port selain port bawaan 80:
kamal-proxy run --http-port 8080
- Untuk melihat daftar opsi lengkap, jalankan
kamal-proxy help run
Routing trafik
- Untuk merutekan trafik ke aplikasi web melalui proxy, deploy instance aplikasi ke proxy dengan
deploy
- Saat instance dideploy, instance tersebut menjadi tersedia untuk digunakan proxy dan menggantikan instance yang sebelumnya digunakan
- Saat menentukan instance, gunakan format
hostname:port
- Contoh:
kamal-proxy deploy service1 --target web-1:3000
- Proxy akan mendaftarkan
web-1:3000 dengan nama layanan service1 dan segera memulai health check HTTP
- Jika instance tidak menjadi sehat dalam waktu tertentu, perintah
deploy akan membatalkan deployment dan mengembalikan kode keluar tidak normal
- Setiap deployment mengambil alih seluruh trafik dari instance yang sebelumnya dideploy
- Begitu instance baru sehat, seluruh trafik baru akan dirutekan ke instance tersebut
- Perintah
deploy menunggu hingga trafik pada instance sebelumnya benar-benar habis
- Karena itu, jika
deploy berhasil dikembalikan, instance lama dapat dihapus tanpa memutus request yang sedang berjalan
- Trafik tidak akan dirutekan hingga instance baru menjadi sehat, dan instance lama baru dihapus setelah trafiknya benar-benar habis, sehingga deployment tanpa downtime dimungkinkan
Routing berbasis host
- Dengan routing berbasis host, beberapa aplikasi dapat dijalankan di server yang sama
- Saat mendeploy instance, Anda dapat menentukan host yang akan dilayani trafik
- Contoh:
kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com
- Instance yang dideploy dengan cara ini hanya akan menerima trafik untuk host yang ditentukan
- Dengan mendeploy instance unik untuk tiap host, beberapa aplikasi dapat dijalankan di server yang sama tanpa konflik port
- Host tertentu hanya dapat merutekan satu layanan pada satu waktu
- Misalnya, jika setelah
kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com Anda menjalankan kamal-proxy deploy service2 --target web-2:3000 --host app1.example.com, akan terjadi error
- Jika Anda menjalankan
kamal-proxy remove service1 lalu kamal-proxy deploy service2 --target web-2:3000 --host app1.example.com, maka akan berhasil
TLS otomatis
- Kamal Proxy dapat secara otomatis memperoleh dan memperbarui sertifikat TLS untuk aplikasi
- Fitur ini dapat diaktifkan dengan menambahkan flag
--tls saat mendeploy instance
- Contoh:
kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com --tls
Menentukan opsi run dengan variabel lingkungan
- Di lingkungan seperti saat dijalankan dalam container Docker, mungkin lebih praktis menentukan opsi
run menggunakan variabel lingkungan
- Misalnya, untuk mengatur port HTTP:
kamal-proxy run --http-port 8080 atau HTTP_PORT=8080 kamal-proxy run
- Jika variabel lingkungan bentrok dengan yang lain, Anda dapat membedakannya dengan menambahkan prefiks
KAMAL_PROXY_
- Contoh:
KAMAL_PROXY_HTTP_PORT=8080 kamal-proxy run
Build
- Jika lingkungan Go sudah disiapkan, Anda dapat membangun Kamal Proxy secara lokal:
make
- Atau membangunnya dengan container Docker:
make docker
Mencobanya
- Anda dapat mencoba perintah proxy dengan melihat konfigurasi Docker Compose di folder contoh
Ringkasan GN⁺
- Kamal Proxy adalah proxy HTTP minimal yang mendukung deployment tanpa downtime dan dapat bekerja tanpa kerja sama khusus dari aplikasi
- Menyediakan routing berbasis host dan TLS otomatis sehingga beberapa aplikasi dapat dijalankan di server yang sama
- Opsi
run dapat ditentukan melalui variabel lingkungan sehingga berguna di lingkungan seperti Docker
- Untuk deployment tanpa downtime, trafik dirutekan ke instance baru dan sistem menunggu hingga trafik pada instance lama benar-benar habis
- Proyek dengan fungsi serupa antara lain NGINX dan HAProxy
1 komentar
Opini Hacker News
Penggunaan istilah 'deploy' membingungkan
Membangun seluruh sistem demi deployment tanpa downtime terasa berlebihan
Kamal Proxy ada untuk menyelesaikan masalah di Docker Swarm
Penasaran kenapa Kamal memilih Swarm
Belum pernah mencoba Kamal Proxy, tetapi skeptis karena masalah dukungan
Rasanya ini hal yang bisa dilakukan HAProxy dengan mudah
Penasaran apakah ini mengimplementasikan pola 'traffic pause'
Penasaran bagaimana deployment tanpa downtime (ZDD) bekerja
Kamal 2 akan mendukung auto-SSL, dan memudahkan menjalankan banyak aplikasi di satu server
Cara penggunaannya tidak terlalu jelas
docker compose up --build --force-recreate webmembatalkan semuanyaPenasaran apakah ada cara untuk mengatur timeout
Ini sindrom NIH (Not Invented Here)