Service Discovery

Dokumen ini berisi ringkasan tentang 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 secara konsisten di mana pun aplikasi tersebut di-deploy. Misalnya, tim mungkin ingin menggunakan URI umum dalam konfigurasi mereka yang selalu mengarah ke gateway SMTP lokal untuk memisahkan kode dari lingkungan tempat kode dijalankan.

Penemuan layanan membantu tim aplikasi untuk:

  • Mengurangi jumlah konfigurasi per lingkungan.
  • Memisahkan aplikasi klien dan server.
  • Memungkinkan aplikasi menjadi portabel di lingkungan baru.

Anda dapat menggunakan penemuan layanan Kubernetes saat:

  • Aplikasi menggunakan konfigurasi DNS container-nya untuk me-resolve host.
  • Aplikasi di-deploy dengan layanan pendukungnya di cluster atau namespace Kubernetes yang sama.
  • Layanan pendukung memiliki layanan Kubernetes terkait. Kf membuatnya untuk setiap aplikasi.
  • Kubernetes NetworkPolicy memungkinkan traffic antara aplikasi dan layanan Kubernetes yang diperlukan untuk berkomunikasi. Kf membuat kebijakan ini di setiap ruang Kf.

Anda tidak boleh menggunakan penemuan layanan Kubernetes jika:

  • Aplikasi harus 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 terlebih dahulu mencoba me-resolve nama tersebut di cluster lokal.

Domain tanpa banyak bagian akan di-resolve berdasarkan nama layanan Kubernetes di namespace container. 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 lainnya.

Domain dengan satu titik akan di-resolve terhadap layanan Kubernetes di namespace Kubernetes dengan nama yang sama dengan label setelah titik. Misalnya, jika terdapat database PostgreSQL dengan layanan customers dalam namespace database, aplikasi di namespace lain dapat menyelesaikannya 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 Kfspace membuat namespace Kubernetes dengan nama yang sama.

  • Merujuk ke aplikasi Kf di ruang saat ini menggunakan protocol://app-name.
  • Lihat aplikasi Kf di ruang lain menggunakan protocol://app-name.space-name.
  • Merujuk ke aplikasi Kf di ruang saat ini yang memproses port kustom menggunakan protocol://app-name:port.
  • Merujuk ke 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 health check untuk memastikan aplikasi tersebut ditambahkan dan dihapus dengan cepat dari kumpulan host yang menerima koneksi.

Aplikasi yang menggunakan penemuan layanan berbasis DNS tidak boleh meng-cache alamat IP layanan yang di-resolve karena tidak dijamin stabil.

Jika ada layanan khusus lingkungan di luar cluster, layanan tersebut dapat diselesaikan menggunakan DNS Kubernetes jika Anda menyiapkan layanan Kubernetes ExternalName. Layanan Kubernetes ini memberikan 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 biasanya digunakan sebagai bagian dari broker layanan Spring Cloud Services. Eureka dibangun untuk menjadi mekanisme load balancer dan penemuan layanan regional 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 aplikasi Anda yang sudah ada akan digunakan kembali untuk mengurangi kombinasi error.
  • Kubernetes mengelola server DNS, sehingga Anda dapat menggunakan lebih sedikit dependensi.
  • DNS Kubernetes mengikuti kebijakan dan batasan RBAC yang sama dengan Kubernetes lainnya.

Ada beberapa situasi ketika 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