Service Discovery

Dokumen ini berisi 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