Dokumen ini adalah ringkasan penemuan layanan berbasis DNS Kubernetes dan cara penggunaannya dengan Kf.
Kapan harus menggunakan penemuan layanan Kubernetes dengan Kf
Penemuan layanan Kubernetes dapat digunakan oleh aplikasi yang perlu menemukan layanan pendukung dengan cara yang konsisten, terlepas dari tempat aplikasi di-deploy. Misalnya, tim mungkin ingin menggunakan URI umum dalam konfigurasinya yang selalu mengarah ke gateway SMTP lokal untuk memisahkan kode dari lingkungan tempatnya berjalan.
Penemuan layanan membantu tim aplikasi dengan:
- Mengurangi jumlah konfigurasi per lingkungan.
- Memisahkan aplikasi klien dan server.
- Mengizinkan aplikasi menjadi portabel ke lingkungan baru.
Anda dapat menggunakan penemuan layanan Kubernetes saat:
- Aplikasi menggunakan konfigurasi DNS penampung untuk me-resolve host.
- Aplikasi di-deploy dengan layanan pendukungnya di cluster atau namespace Kubernetes yang sama.
- Layanan pendukung memiliki layanan Kubernetes yang terkait. Kf membuat ini untuk setiap aplikasi.
- NetworkPolicies Kubernetes mengizinkan traffic antara aplikasi dan layanan Kubernetes yang perlu diajak berkomunikasi. Kf membuat kebijakan ini di setiap ruang Kf.
Anda tidak boleh menggunakan penemuan layanan Kubernetes jika:
- Aplikasi perlu melakukan failover di antara beberapa cluster.
- Anda mengganti DNS resolver yang digunakan oleh aplikasi Anda.
- Aplikasi memerlukan jenis load balancing tertentu.
Cara kerja penemuan layanan Kubernetes
Penemuan layanan Kubernetes berfungsi dengan mengubah konfigurasi DNS container yang berjalan di node Kubernetes. Saat aplikasi mencari nama domain yang tidak memenuhi syarat, DNS resolver lokal akan mencoba me-resolve nama tersebut di cluster lokal terlebih dahulu.
Domain tanpa beberapa bagian akan di-resolve berdasarkan nama layanan
Kubernetes di namespace penampung. Setiap aplikasi Kf
membuat layanan Kubernetes dengan nama yang sama. Jika dua
aplikasi Kf ping
dan pong
di-deploy di ruang
Kf yang sama, ping
dapat menggunakan URL http://pong
untuk
mengirim traffic ke layanan lain.
Domain dengan satu titik akan di-resolve terhadap layanan Kubernetes di
namespace Kubernetes dengan nama yang sama dengan label setelah titik. Misalnya, jika ada database PostgreSQL dengan layanan customers
di namespace database
, aplikasi di namespace lain dapat me-resolve-nya menggunakan postgres://customers.database
.
Cara menggunakan penemuan layanan dengan Kf
Penemuan layanan berbasis DNS Kubernetes dapat digunakan di aplikasi Kf apa pun. Setiap aplikasi Kf membuat layanan Kubernetes dengan nama yang sama, dan setiap ruang Kf membuat namespace Kubernetes dengan nama yang sama.
- Lihat aplikasi Kf di ruang saat ini menggunakan
protocol://app-name
. - Lihat aplikasi Kf di ruang lain menggunakan
protocol://app-name.space-name
. - Lihat aplikasi Kf di ruang saat ini yang memproses pada
port kustom menggunakan
protocol://app-name:port
. - Lihat aplikasi Kf di ruang lain yang memproses
port kustom menggunakan
protocol://app-name.space-name:port
.
Praktik terbaik
Aplikasi yang akan menjadi target penemuan layanan berbasis DNS harus sering melakukan pemeriksaan kesehatan untuk memastikan aplikasi tersebut ditambahkan dan dihapus dengan cepat dari kumpulan host yang menerima koneksi.
Aplikasi yang menggunakan penemuan layanan berbasis DNS tidak boleh menyimpan cache alamat IP layanan yang di-resolve karena tidak dijamin stabil.
Jika layanan khusus lingkungan ada di luar cluster, layanan tersebut dapat di-resolve menggunakan DNS Kubernetes jika Anda menyiapkan layanan Kubernetes ExternalName. Layanan Kubernetes ini menyediakan kemampuan resolusi yang sama, tetapi menampilkan data CNAME untuk mengalihkan permintaan ke otoritas eksternal.
Perbandingan dengan Eureka
Eureka adalah load balancer sisi klien open source yang dibuat oleh Netflix. Layanan ini umumnya digunakan sebagai bagian dari broker layanan Spring Cloud Services. Eureka dibuat untuk menjadi load balancer regional dan mekanisme penemuan layanan untuk layanan yang berjalan di lingkungan yang sering menyebabkan gangguan pada beban kerja yang menyebabkan alamat IP tidak stabil.
Eureka dirancang sebagai model klien/server. Klien mendaftarkan diri ke server yang menunjukkan nama yang ingin dikaitkan dan mengirim heartbeat server secara berkala. Server memungkinkan semua klien yang terhubung untuk me-resolve nama.
Secara umum, Anda harus menggunakan DNS Kubernetes, bukan Eureka di Kubernetes, karena alasan berikut:
- DNS berfungsi dengan semua bahasa pemrograman dan aplikasi tanpa memerlukan library.
- Health check yang ada di aplikasi Anda akan digunakan kembali sehingga mengurangi kombinasi error.
- Kubernetes mengelola server DNS, sehingga Anda dapat mengandalkan lebih sedikit dependensi.
- DNS Kubernetes mematuhi kebijakan dan batasan RBAC yang sama dengan Kubernetes lainnya.
Ada beberapa waktu saat men-deploy server Eureka akan menguntungkan:
- Anda memerlukan penemuan layanan di seluruh aplikasi berbasis Kubernetes dan VM.
- Anda memerlukan load balancing berbasis klien.
- Anda memerlukan health check independen.
Langkah selanjutnya
- Baca selengkapnya tentang penemuan layanan di GKE.
- Pelajari Service Directory, penawaran terkelola yang mirip dengan Eureka.