Kubernetes Cluster: Exposing Services
Sementara komponen aplikasi Anda dapat berkomunikasi satu sama lain melalui service names menggunakan jaringan internal, koneksi eksternal memerlukan konfigurasi tambahan.
Kubernetes mendukung tiga jenis layanan untuk membangun koneksi internal dan eksternal ke aplikasi:
ClusterIP
Layanan ClusterIP adalah layanan K8s default. Ini membuat aplikasi dapat diakses oleh aplikasi lain di dalam cluster K8s. Tidak ada akses eksternal yang disediakan.
Contoh layanan ClusterIP sederhana:
kind: Service
apiVersion: v1
metadata:
name: nginx1
namespace: test
spec:
type: ClusterIP
selector:
app: nginx
ports:
- port: 80
NodePort
Cara paling dasar untuk membangun koneksi eksternal ke layanan adalah mengeksposnya langsung melalui NodePort. Seperti namanya, jenis layanan ini membuka port tertentu pada node, lalu lintas yang dikirim ke port ini diteruskan ke layanan Anda. Secara default, nodePort untuk layanan Anda dipilih secara acak dari rentang 30000-32767.
Metode ini memiliki beberapa kelemahan yang harus dipertimbangkan saat mengonfigurasi Kubernetes Cluster (satu layanan per port, rentang port yang terbatas, dll.). Akibatnya, tipe layanan NodePort dapat digunakan untuk demo atau aplikasi sementara lainnya. Namun, solusi produksi biasanya memerlukan konfigurasi yang lebih kompleks dengan opsi layanan ingresses dan LoadBalancer. Ikuti panduan kami untuk membuat konfigurasi terverifikasi untuk aplikasi Anda dan memasukannya ke produksi: Ingresses Menggunakan Public IP di Layanan Kubernetes.
Berikut adalah contoh konfigurasi layanan tipe NodePort:
kind: Service
apiVersion: v1
metadata:
name: nginx1
namespace: test
labels:
run: nginx
spec:
type: NodePort
selector:
run: nginx
ports:
- port: 80
targetPort: 80
Jika diperlukan, nodePort tertentu dapat dipilih untuk layanan Anda. Misalnya, kode berikut dapat digunakan untuk mengonfigurasi pengalihan dari port 30984:
ports:
- port: 80
targetPort: 80
nodePort: 30984
nilai nodePort yang disediakan secara manual harus dari rentang yang diizinkan (30000-32767) dan unik (untuk mencegah bentrok dengan layanan lain).
Dalam hal public IP terhubung ke node pekerja Kubernetes, tidak diperlukan tindakan tambahan.
Sebaliknya, port yang diperoleh harus diekspos dari sisi platform. Navigasikan ke lingkungan Kubernetes Settings > Endpoints dan klik Add. Di kerangka yang terbuka, sediakan data berikut:
- Node - pilih node pekerja dari daftar
- Name - atur nama endpoint yang diinginkan
- Private Port - sediakan nodePort dari langkah sebelumnya
- Protocol - pilih opsi TCP
Klik Add untuk konfirmasi. Mungkin diperlukan beberapa menit agar platform mengekspos port dan mengalihkan permintaan ke layanan NodePort.
LoadBalancer
Jenis layanan LoadBalancer adalah cara yang umum digunakan untuk menyediakan layanan di Internet. Ini memerlukan public IP yang terhubung ke node pekerja.
Perlu diingat bahwa dengan tipe LoadBalancer semua lalu lintas langsung diteruskan ke layanan tanpa penyaringan, perutean, dll. Parameter port adalah port yang masuk di Internet yang dipetakan layanan ke targetPort pada sisi aplikasi.
Misalnya:
kind: Service
apiVersion: v1
metadata:
name: nginx1
namespace: test
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
targetPort: 8080