Belajar Kubernetes (Penggunaan Service dengan Tipe LoadBalancer)
Di dalam Kubernetes, menggunakan sebuah Service dengan tipe LoadBalancer merupakan cara untuk mengkespos aplikasi yang berjalan dikubernetes ke jaringan luar (internet).
Ketika anda membuat sebuah service dengan tipe LoadBalancer, Kubernetes akan secara otomatis menyediakan sebuah load balancer untuk anda, yang akan menerima distribusi trafik menuju pods yang menjadi bagian dari service. Load balancer sendiri bisa berupa hardware atau software yang berada didepan kubernetes cluster dan langsung menuju pods berdasarkan alamat ip dan nomor port.
Contoh diagram sebagai berikut:
Terlihat bahwa setiap aplikasi dapat diakses langsung oleh user menggunakan IP atau domain dari load balancer baik itu software (AWS, GCP, dll) maupun hardware.
Berikut cara membuat file yaml service dengan tipe LoadBalancer:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 8080
File YAML tersebut mendefinisikan sebuah service dengan nama my-service
dengan tipe LoadBalancer. Service tersebut memilih pods dengan label app=my-app
dan mengekspos port 80 ke jaringan luar diluar kubernetes, yang akan melakukan forwarding traffic ke port 8080 pada pods.
Jika file tersebut dijalankan dengan perintah kubectl apply -f my-service.yaml
, maka service tersebut dapat dilihat seperti ini:
$ kubectl get service my-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service LoadBalancer 10.96.172.142 192.168.0.100 80:31920/TCP 30s
Dengan menggunakan service tersebut maka aplikasi dapat diakses dari jaringan luar menuju pods, akan tetapi ada kekurangan dari model seperti ini. Bisa di lihat bahwa setiap service memiliki satu load balancer yang terhubung, dengan semakin banyaknya service maka akan semakin banyak juga Load Balancer yang akan di buat dan tentu saja menambah biaya operasional sehingga menjadi tidak efisien. Untuk mengatasi hal tersebut, Kubernetes sendiri memiliki fitur yang bernama ingress yang dapat digunakan sebagai pintu yang akan menghubungkan jaringan luar (internet) dengan pods aplikasi.