Dalam Kubernetes, Service adalah abstraksi yang mengekspos aplikasi yang berjalan pada sekelompok Pod sebagai layanan jaringan. Service menyediakan nama DNS yang stabil dan load balancing untuk Pod tersebut. Topik ini menjelaskan cara kerja Service Kubernetes, menguraikan pertimbangan penting, serta memberikan rekomendasi untuk memilih tipe Service.
Konsep utama
Jenis layanan
Jika versi Cloud Controller Manager adalah v2.5.0 atau lebih baru, penggunaan instans CLB untuk membuat Service di Konsol menjadi fitur daftar putih yang hanya mendukung penagihan bayar sesuai penggunaan. Untuk membuat Service tipe CLB di Konsol, ajukan permintaan di halaman Quota Center.
Nama | Deskripsi | Kasus Penggunaan | Penagihan |
Tipe Service default. Service ClusterIP diberikan alamat IP virtual yang hanya dapat dijangkau dari dalam kluster. | Ideal untuk layanan yang hanya perlu berkomunikasi dalam kluster yang sama. Sebagai contoh, jika Pod aplikasi frontend perlu mengakses database backend dalam kluster yang sama, Anda dapat mengekspos database tersebut sebagai Service ClusterIP. | Gratis. | |
Service NodePort membuka port tertentu pada setiap node di kluster. Anda dapat mengakses Service dari luar kluster menggunakan | Cocok untuk mengekspos layanan ke internet untuk pengembangan, pengujian, atau aplikasi berlalu lintas rendah lainnya. Sebagai contoh, Anda dapat menggunakan Service NodePort untuk men-deploy dan men-debug aplikasi web di lingkungan pengujian. Berbeda dengan Service LoadBalancer, Service ini tidak menyediakan load balancing lintas node. Lalu lintas dikirim hanya ke satu node, yang dapat dengan mudah menjadi bottleneck sumber daya. | Gratis. Untuk mengaktifkan akses internet publik, Anda harus mengaitkan EIP ke node tersebut. Untuk informasi lebih lanjut mengenai penagihan EIP, lihat Ikhtisar penagihan. | |
Service LoadBalancer memperluas tipe NodePort dengan menyediakan load balancer eksternal yang mendistribusikan lalu lintas ke Pod dalam kluster. Service secara otomatis menyediakan alamat IP eksternal yang dapat digunakan klien untuk mengaksesnya. Service ini mendukung manajemen lalu lintas baik Lapisan 4 (TCP/UDP) maupun Lapisan 7 (HTTP/HTTPS). | Ideal untuk aplikasi yang berjalan di cloud publik yang memerlukan titik masuk eksternal yang stabil dan mudah dikelola. Sebagai contoh, layanan publik di lingkungan produksi yang perlu diakses dari internet dan harus menangani volume besar lalu lintas eksternal dengan ketersediaan tinggi, seperti aplikasi web atau layanan API. Penting Untuk komunikasi intra-kluster, selalu gunakan Service Sebaliknya, mengakses Service tipe
Oleh karena itu, mengakses IP LoadBalancer dari dalam kluster dapat sangat bervariasi atau bahkan gagal di berbagai lingkungan dan versi Kubernetes. Contoh skenario: Flannel + IPVS + externalTrafficPolicy=Local | Untuk informasi mengenai biaya instans load balancing, lihat | |
Headless Service | Headless Service tidak memiliki alamat IP virtual. Kueri DNS untuk nama layanan mengembalikan daftar alamat IP Pod, bukan satu alamat IP layanan. Hal ini memungkinkan Anda menemukan dan terhubung langsung ke Pod tertentu. | Ideal untuk aplikasi yang perlu berkomunikasi langsung dengan Pod backend tertentu, bukan melalui proxy atau load balancer. Sebagai contoh, jika Anda men-deploy aplikasi berstatus seperti layanan database ClickHouse, Anda dapat menggunakan Headless Service. Hal ini memungkinkan Pod aplikasi mengakses langsung setiap Pod ClickHouse, menyeimbangkan pembacaan data atau melakukan penulisan terarah untuk meningkatkan efisiensi pemrosesan data. | Gratis. |
ExternalName | Service ExternalName memetakan nama layanan internal ke nama domain eksternal. Hal ini memungkinkan Pod di dalam kluster mengakses domain eksternal menggunakan nama layanan internal. | Ideal ketika kluster perlu mengakses layanan yang diekspos di bawah nama domain publik. Sebagai contoh, jika Pod aplikasi Anda perlu mengakses domain database eksternal, Anda dapat menggunakan Service ExternalName untuk memetakan domain tersebut ke nama layanan internal, sehingga memungkinkan akses langsung dari dalam kluster. | Gratis. |
Cara kerja
ClusterIP
Pembuatan dan alokasi
Saat Anda membuat Service ClusterIP di kluster ACK, lapisan kontrol menetapkan alamat IP virtual (ClusterIP) yang hanya dapat diakses dari dalam kluster.
Pengalihan lalu lintas
Saat Anda mengakses ClusterIP, kube-proxy mencegat lalu lintas dan meneruskannya ke Pod backend menggunakan algoritma penjadwalan round-robin.
Penemuan layanan
Saat Service ClusterIP dibuat, CoreDNS mendaftarkan rekaman DNS untuknya, memungkinkan layanan diselesaikan dan diakses berdasarkan namanya. Formatnya adalah
service-name.namespace.svc.cluster.local:port, misalnya,nginx.default.svc.cluster.local:80.Label Pod dan pelacakan endpoint
Service menggunakan label selector untuk mengidentifikasi Pod backend-nya.
Lapisan kontrol terus memantau perubahan Pod. Saat Pod yang sesuai dengan label selector Service ditambahkan, diperbarui, atau dihapus, lapisan kontrol memperbarui endpoint.
NodePort
Pembuatan dan alokasi
Saat Anda membuat Service NodePort, kluster membuka port (NodePort) pada nodenya untuk memungkinkan akses eksternal.
Pengalihan lalu lintas
kube-proxy mendengarkan NodePort, yang secara otomatis dipilih dari rentang default 30000–32767. kube-proxy mengarahkan permintaan eksternal ke ClusterIP, yang kemudian meneruskannya ke Pod backend.
Akses eksternal
Anda dapat mengakses Service secara eksternal menggunakan alamat IP node dan port statis (NodePort) dalam format
<NodeIP>:<NodePort>.
LoadBalancer
Pembuatan dan alokasi
Saat Anda membuat Service LoadBalancer, lapisan kontrol secara otomatis berinteraksi dengan layanan load balancing untuk membuat instans load balancer guna menangani lalu lintas. Untuk informasi lebih lanjut, lihat Gunakan instans Server Load Balancer yang sudah ada untuk mengekspos aplikasi dan Ekspos aplikasi dengan Service LoadBalancer yang disediakan secara otomatis.
Pengalihan lalu lintas
Saat lalu lintas eksternal mencapai IP eksternal instans load balancer, lalu lintas tersebut diarahkan ke port pada node. Kemudian, kube-proxy meneruskan lalu lintas tersebut ke Pod backend.
Konfigurasi entri rute dan pemeriksaan kesehatan
Load balancer secara otomatis mengonfigurasi port pendengar dan melakukan pemeriksaan kesehatan untuk memastikan lalu lintas hanya diarahkan ke Pod yang sehat.
Kebijakan lalu lintas eksternal
Service LoadBalancer dan NodePort memiliki pengaturan externalTrafficPolicy yang mengontrol bagaimana lalu lintas eksternal diarahkan. Perilaku pengaturan ini berbeda antara kluster yang menggunakan plugin jaringan Terway-Eniip dan Flannel.
Login ke Konsol ACK. Di halaman Clusters, klik nama kluster Anda. Di tab Basic Information, Anda dapat melihat plugin jaringan CNI yang digunakan kluster Anda.
Plugin jaringan Flannel
Item | Local | Cluster |
Penyambungan server backend | Hanya node yang meng-host Pod backend yang ditambahkan sebagai server backend ke load balancer. | Semua node di kluster ditambahkan sebagai server backend ke load balancer. |
Kuota load balancer | Mengonsumsi lebih sedikit sumber daya kuota load balancer. Untuk informasi lebih lanjut, lihat Batas kuota. | Mengonsumsi banyak sumber daya kuota load balancer karena semua node kluster ditambahkan sebagai backend. Untuk informasi lebih lanjut, lihat Batas kuota. |
Akses intra-kluster ke Service | Hanya node yang meng-host Pod backend untuk Service yang dapat mengaksesnya. | Setiap node di kluster dapat mengakses Service. |
Load balancing Pod | Load balancing antar Pod dinonaktifkan secara default. Untuk mengaktifkan load balancing, atur penjadwal ke WRR dengan menambahkan anotasi | Load balancing antar Pod diaktifkan secara default. |
Pelestarian IP sumber | Didukung. | Tidak didukung. |
Persistensi sesi | Didukung. | Tidak didukung. |
Kasus penggunaan | Aplikasi yang perlu melestarikan alamat IP klien asli, seperti untuk logging berdasarkan IP sumber. | Saat ketersediaan layanan tinggi diperlukan dan pelestarian IP sumber bukan menjadi perhatian, seperti pada kluster aplikasi web skala besar. |
Plugin jaringan Terway-Eniip
Item | Local | Cluster |
Penyambungan server backend | Pod langsung ditambahkan ke load balancer sebagai server backend. | |
Kuota load balancer | Mengonsumsi lebih sedikit sumber daya kuota load balancer karena hanya Pod aplikasi yang ditambahkan. Untuk informasi lebih lanjut, lihat Batas kuota. | |
Akses intra-kluster ke Service | Saat mengakses Service dari dalam kluster, lalu lintas melewati kube-proxy pada node dan tunduk pada | Setiap node di kluster dapat mengakses Service. |
Load balancing Pod | Load balancing antar Pod diaktifkan secara default. | |
Pelestarian IP sumber | Didukung. | |
Persistensi sesi | Didukung. | |
Catatan penggunaan
Sebelum menggunakan fitur load balancing Service, tinjau pertimbangan yang relevan. Untuk informasi lebih lanjut, lihat Pertimbangan untuk mengonfigurasi load balancing Service.