Dalam Kubernetes, Layanan adalah abstraksi yang membantu mengekspos sekelompok pod melalui jaringan. Layanan menyediakan nama domain untuk pod-pod yang diekspos serta mengimplementasikan load balancing di antara pod tersebut. Topik ini menjelaskan cara kerja Layanan, tindakan pencegahan dalam mengonfigurasi Layanan LoadBalancer, serta cara memilih jenis Layanan yang sesuai untuk mengekspos aplikasi.
Istilah
Tipe Layanan
Fitur | Deskripsi | Skenario | Tagihan |
Tipe Layanan default. Layanan ClusterIP menggunakan alamat IP virtual intra-cluster. | Cocok untuk skenario di mana Anda hanya perlu mengekspos aplikasi di dalam cluster. Contohnya, jika sebuah pod aplikasi frontend perlu mengakses database backend di cluster yang sama, Anda dapat menggunakan Layanan ClusterIP untuk mengekspos database di dalam cluster. | Gratis. | |
Layanan NodePort mengekspos port node. Anda dapat mengakses Layanan NodePort dengan mengirim permintaan ke | Cocok untuk skenario di mana Anda perlu sementara mengekspos aplikasi ke Internet atau aplikasi Anda perlu menerima sejumlah kecil trafik eksternal pada port tertentu. Contohnya, jika Anda ingin menerapkan aplikasi web di lingkungan pengujian, Anda dapat menggunakan Layanan NodePort untuk mengekspos aplikasi. Dibandingkan dengan Layanan LoadBalancer, Layanan NodePort tidak mengimplementasikan load balancing di antara node. Jika Anda mengakses aplikasi menggunakan Layanan NodePort, trafik hanya diteruskan ke node tempat Anda mengirim permintaan. Dalam hal ini, kemacetan sumber daya dapat dengan mudah terjadi pada node tersebut. | Gratis. Jika Anda ingin mengaktifkan akses Internet, asosiasikan alamat IP elastis (EIP) dengan node. Untuk informasi lebih lanjut tentang tagihan EIP, lihat Ikhtisar Tagihan. | |
Layanan LoadBalancer mirip dengan Layanan NodePort yang dikonfigurasikan dengan load balancer. Tipe Layanan ini dapat mendistribusikan trafik secara merata ke beberapa pod. Layanan LoadBalancer secara otomatis menyediakan alamat IP publik untuk mengekspos pod backend ke akses eksternal. Layanan LoadBalancer dapat memproses permintaan TCP dan UDP di Lapisan 4 dan mengelola permintaan HTTP dan HTTPS di Lapisan 7. | Cocok untuk skenario di mana Anda ingin menyediakan ingress yang stabil dan mudah dikelola untuk aplikasi yang diterapkan di cloud. Contohnya, Anda dapat menggunakan Layanan LoadBalancer untuk mengekspos layanan publik yang diterapkan di lingkungan produksi, seperti aplikasi web dan layanan API, ke Internet. Ini memastikan ketersediaan tinggi layanan dan memungkinkan mereka menahan lonjakan trafik. | Server Load Balancer (SLB) mengenakan biaya untuk instance SLB yang digunakan oleh Layanan LoadBalancer. Untuk informasi lebih lanjut, lihat | |
Layanan Headless | Layanan headless tidak memiliki alamat IP virtual tetap. Ketika Anda mengakses pod backend dari Layanan headless, Layanan melakukan pencarian DNS dan mengembalikan daftar alamat IP. Kemudian, Anda dapat langsung terhubung ke alamat IP apa pun dalam daftar sesuai kebutuhan Anda. | Cocok untuk skenario di mana Anda perlu langsung mengakses pod backend individu menggunakan catatan DNS daripada proxy atau load balancer. Contohnya, Anda dapat menggunakan Layanan headless untuk mengekspos aplikasi ClickHouse yang diterapkan sebagai StatefulSet. Dengan cara ini, Anda dapat mengakses setiap pod dari aplikasi ClickHouse. Ini memungkinkan Anda menyeimbangkan pembacaan dan penulisan di antara pod dan meningkatkan efisiensi pemrosesan data. | Gratis. |
ExternalName | Layanan ExternalName digunakan untuk memetakan Layanan ke nama domain eksternal. Ini memungkinkan pod di cluster mengakses nama domain eksternal menggunakan Layanan. | Cocok untuk skenario di mana cluster Anda perlu mengakses nama domain publik. Contohnya, jika aplikasi Anda perlu mengakses nama domain database eksternal, Anda dapat memetakan nama domain tersebut ke Layanan ExternalName. Dengan cara ini, pod aplikasi dapat mengakses nama domain menggunakan Layanan ExternalName dari dalam cluster. | Gratis. |
Cara Kerja Layanan
ClusterIP
Pembuatan dan alokasi
Ketika Anda membuat Layanan ClusterIP di kluster Container Service for Kubernetes (ACK), bidang kontrol kluster mengalokasikan alamat IP virtual ke Layanan. Alamat IP ini hanya dapat diakses dari dalam kluster.
Penerusan trafik
Ketika Anda mengakses Layanan ClusterIP, permintaan ditangkap oleh kube-proxy. Kemudian, kube-proxy meneruskan permintaan ke pod backend menggunakan algoritma penjadwalan round-robin.
Penemuan layanan
Ketika Layanan ClusterIP dibuat, CoreDNS mendaftarkan catatan DNS yang memungkinkan Layanan diselesaikan dan diakses melalui namanya. Untuk mengakses Layanan ClusterIP, kirim permintaan ke endpoint dalam format
Service.Namespace.svc.cluster.local:port. Contoh:nginx.default.svc.cluster.local:80.Label pod dan pelacakan titik akhir
Setiap Layanan memiliki serangkaian pemilih label yang digunakan untuk memilih pod backend.
Bidang kontrol kluster memantau perubahan pod di kluster secara real-time. Ketika pod baru sesuai dengan pemilih label Layanan atau pod yang ada yang sesuai dengan pemilih label diperbarui atau dihapus, bidang kontrol kluster memperbarui titik akhir Layanan.
NodePort
Pembuatan dan alokasi
Ketika Anda membuat Layanan NodePort, kluster membuka port pada node untuk Layanan, memungkinkan akses eksternal.
Penerusan trafik
kube-proxy mendengarkan port yang diekspos untuk Layanan NodePort. Port ini dialokasikan secara otomatis dari rentang port tertentu (30000 hingga 32767 secara default). Ketika permintaan eksternal mencapai port pada node, kube-proxy merutekan permintaan ke Layanan ClusterIP, lalu meneruskannya ke pod backend.
Akses Eksternal
Anda dapat mengakses Layanan NodePort dengan mengirim permintaan ke endpoint eksternalnya dalam format
<NodeIP>:<NodePort>.
LoadBalancer
Pembuatan dan alokasi
Ketika Anda membuat Layanan
LoadBalancer, bidang kontrol kluster secara otomatis membuat instance SLB untuk Layanan. Untuk informasi lebih lanjut, lihat Gunakan instance SLB yang ada untuk mengekspos aplikasi dan Gunakan instance SLB yang dibuat secara otomatis untuk mengekspos aplikasi.Penerusan trafik
Ketika permintaan eksternal mencapai alamat IP eksternal instance SLB, instance SLB merutekan permintaan ke port pada node. Kemudian, kube-proxy meneruskan permintaan ke pod backend.
Konfigurasi pengaturan routing dan pemeriksaan kesehatan
Instance SLB secara otomatis menggunakan port pendengaran dan melakukan pemeriksaan kesehatan, memastikan bahwa permintaan hanya dirutekan ke pod yang sehat.
Kebijakan trafik eksternal: Lokal dan Kluster
Anda dapat mengonfigurasi kebijakan trafik eksternal Layanan LoadBalancer atau NodePort dengan menentukan parameter externalTrafficPolicy. Kebijakan trafik eksternal menentukan bagaimana permintaan eksternal dirutekan ke pod backend. Dua kebijakan trafik eksternal didukung: Lokal dan Kluster. Fitur kebijakan trafik eksternal bervariasi berdasarkan plug-in jaringan yang digunakan oleh kluster. Bagian berikut menjelaskan fitur kebijakan trafik eksternal ketika Terway-Eniip atau Flannel digunakan sebagai plug-in jaringan.
Masuk ke Konsol ACK. Pada halaman Clusters, klik nama kluster Anda. Pada tab Basic Information, Anda dapat melihat plug-in jaringan kluster di bagian Cluster Information.
Flannel
Dalam plug-in jaringan Flannel:
Lokal: Trafik hanya dirutekan ke pod pada node tempat permintaan dikirim.
Kluster: Trafik dapat dirutekan ke pod pada node lain di kluster.
Tabel berikut menjelaskan perbedaan antara kebijakan Lokal dan kebijakan Kluster.
Item | Lokal | Kluster |
Server backend | Hanya node tempat pod backend diterapkan yang ditambahkan ke instance SLB sebagai server backend. | Semua node di kluster ditambahkan ke instance SLB sebagai server backend. |
Kuota sumber daya SLB | Kebijakan ini mengonsumsi sedikit sumber daya SLB dan tidak memerlukan kuota sumber daya SLB yang tinggi. Untuk informasi lebih lanjut tentang kuota sumber daya SLB, lihat Kuota. | Kebijakan ini memerlukan kuota sumber daya SLB yang tinggi karena semua node di kluster ditambahkan ke instance SLB sebagai server backend. Untuk informasi lebih lanjut tentang kuota sumber daya SLB, lihat Kuota. |
Akses ke alamat IP instance SLB | Hanya node tempat pod backend diterapkan yang dapat mengakses alamat IP instance SLB. | Semua node di kluster dapat mengakses alamat IP instance SLB. |
Load balancing di antara pod | Secara default, load balancing di antara pod dinonaktifkan. Untuk mengaktifkan load balancing di antara pod, atur algoritma penjadwalan ke weighted round-robin (WRR) dengan menambahkan anotasi | Secara default, load balancing di antara pod diaktifkan. |
Preservasi alamat IP sumber | Didukung | Tidak didukung |
Persistensi sesi | Didukung | Tidak didukung |
Skema penggunaan | Aplikasi yang perlu melestarikan alamat IP klien, seperti aplikasi yang perlu mencatat alamat IP klien dalam log. | Aplikasi yang memerlukan ketersediaan tinggi tetapi tidak perlu melestarikan alamat IP klien, seperti kluster aplikasi web besar. |
Terway-Eniip
Jika klustermenggunakan plug-in jaringan Terway-Eniip, trafik langsung diteruskan ke pod backend, terlepas dari kebijakan trafik eksternal yang digunakan.
Tabel berikut menjelaskan perbedaan antara kebijakan Lokal dan kebijakan Kluster.
Item | Lokal | Kluster |
Server backend | Pod dapat ditambahkan ke instance SLB sebagai server backend. | |
Kuota sumber daya SLB | Hanya pod bisnis yang ditambahkan ke instance SLB. Kedua kebijakan mengonsumsi sedikit sumber daya SLB dan tidak memerlukan kuota sumber daya SLB yang tinggi. Untuk informasi lebih lanjut tentang kuota sumber daya SLB, lihat Kuota. | |
Akses ke alamat IP instance SLB | Hanya node tempat pod backend diterapkan yang dapat mengakses alamat IP instance SLB. | Semua node di kluster dapat mengakses alamat IP instance SLB. |
Load balancing di antara pod | Secara default, load balancing di antara pod diaktifkan. | |
Preservasi alamat IP sumber | Didukung | |
Persistensi sesi | Didukung | |
Pertimbangan
Sebelum mengonfigurasi Layanan LoadBalancer, kami sarankan Anda membaca dan memahami pertimbangan terkait. Untuk informasi lebih lanjut, lihat Pertimbangan untuk mengonfigurasi Layanan LoadBalancer.