1 - Mengekspos Alamat IP Eksternal untuk Mengakses Aplikasi di dalam Klaster
Dokumen ini menjelaskan bagaimana cara membuat objek Service Kubernetes yang mengekspos alamat IP eksternal.
Sebelum kamu memulai
-
Instal kubectl.
-
Gunakan sebuah penyedia layanan cloud seperti Google Kubernetes Engine atau Amazon Web Services untuk membuat sebuah klaster Kubernetes. Tutorial ini membuat sebuah load balancer eksternal, yang membutuhkan sebuah penyedia layanan cloud.
-
Konfigurasi
kubectl
agar dapat berkomunikasi dengan Kubernetes API Server kamu. Untuk informasi lebih lanjut, kamu dapat merujuk pada dokumentasi penyedia layanan cloud yang kamu gunakan.
Tujuan
- Jalankan lima buah instans dari aplikasi Hello World.
- Buatlah sebuah objek Service yang mengekspos sebuah alamat IP eksternal.
- Gunakan sebuah objek Service untuk mengakses aplikasi yang sedang dijalankan.
Membuat sebuah objek Service untuk sebuah aplikasi yang dijalankan pada lima buah Pod
- Jalankan sebuah aplikasi Hello World pada klaster kamu:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: load-balancer-example
name: hello-world
spec:
replicas: 5
selector:
matchLabels:
app.kubernetes.io/name: load-balancer-example
template:
metadata:
labels:
app.kubernetes.io/name: load-balancer-example
spec:
containers:
- image: gcr.io/google-samples/node-hello:1.0
name: hello-world
ports:
- containerPort: 8080
kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml
Perintah di atas akan membuat sebuah objek Deployment dan sebuah objek ReplicaSet yang diasosiasikan dengan Deployment yang dibuat. ReplicaSet memiliki lima buah Pod, yang masing-masing dari Pod tersebut menjalankan aplikasi Hello World.
-
Tampilkan informasi mengenai Deployment:
kubectl get deployments hello-world kubectl describe deployments hello-world
-
Tampilkan informasi mengenai objek ReplicaSet:
kubectl get replicasets kubectl describe replicasets
-
Buatlah sebuah objek Service yang mengekspos deployment:
kubectl expose deployment hello-world --type=LoadBalancer --name=my-service
-
Tampilkan informasi mengenai Service:
kubectl get services my-service
Keluaran dari perintah di atas akan menyerupai tampilan berikut:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service LoadBalancer 10.3.245.137 104.198.205.71 8080/TCP 54s
Catatan:
Service dengan `type=LoadBalancer` didukung oleh penyedia layanan cloud eksternal, yang tidak tercakup dalam contoh ini, silahkan merujuk pada [laman berikut](/id/docs/concepts/services-networking/service/#loadbalancer) untuk informasi lebih lanjut.
Catatan:
Jika sebuah alamat IP eksternal yang ditunjukkan dalam status \<pending\>, tunggulah hingga satu menit kemudian masukkan perintah yang sama lagi.
-
Tampilkan informasi detail mengenai Service:
kubectl describe services my-service
Perintah di atas akan menampilkan keluaran sebagai berikut:
Name: my-service Namespace: default Labels: app.kubernetes.io/name=load-balancer-example Annotations: <none> Selector: app.kubernetes.io/name=load-balancer-example Type: LoadBalancer IP: 10.3.245.137 LoadBalancer Ingress: 104.198.205.71 Port: <unset> 8080/TCP NodePort: <unset> 32377/TCP Endpoints: 10.0.0.6:8080,10.0.1.6:8080,10.0.1.7:8080 + 2 more... Session Affinity: None Events: <none>
Pastikan nilai dari alamat IP eksternal (
LoadBalancer Ingress
) diekspos pada Service yang kamu buat. Pada contoh ini, alamat IP eksternal yang diberikan adalah 104.198.205.71. Kemudian pastikan nilai dariPort
danNodePort
. Pada contoh ini,Port
yang digunakan adalah 8080 danNodePort
adalah 32377. -
Pada keluaran perintah sebelumnya, kamu dapat melihat beberapa Service dengan beberapa endpoint: 10.0.0.6:8080,10.0.1.6:8080,10.0.1.7:8080 + 2 lainnya. Berikut ini merupakan alamat IP dari Pod dimana aplikasi tersebut dijalankan. Untuk melakukan verifikasi alamat-alamat IP yang digunakan oleh Pod, masukkan perintah berikut:
kubectl get pods --output=wide
Keluaran yang diberikan akan menyerupai:
NAME ... IP NODE hello-world-2895499144-1jaz9 ... 10.0.1.6 gke-cluster-1-default-pool-e0b8d269-1afc hello-world-2895499144-2e5uh ... 10.0.1.8 gke-cluster-1-default-pool-e0b8d269-1afc hello-world-2895499144-9m4h1 ... 10.0.0.6 gke-cluster-1-default-pool-e0b8d269-5v7a hello-world-2895499144-o4z13 ... 10.0.1.7 gke-cluster-1-default-pool-e0b8d269-1afc hello-world-2895499144-segjf ... 10.0.2.5 gke-cluster-1-default-pool-e0b8d269-cpuc
-
Gunakan alamat IP eksternal (
LoadBalancer Ingress
) untuk mengakses aplikasi Hello World:curl http://<external-ip>:<port>
dimana
<external-ip>
adalah alamat IP eksternal (LoadBalancer Ingress
) dari Service kamu, dan<port>
adalah nilai dariPort
dari deskripsi Service kamu. Jika kamu menggunakan minikube, menuliskan perintahminikube service my-service
akan secara otomatis membuka aplikasi Hello World pada browser.Respons yang diberikan apabila permintaan ini berhasil adalah sebuah pesan sapaan:
Hello Kubernetes!
Bersihkan
Untuk menghapus Service, kamu dapat menggunakan perintah ini:
kubectl delete services my-service
Untuk menghapus Deployment, ReplicaSet, dan Pod-Pod yang digunakan untuk menjalankan aplikasi Hello World, kamu dapat memasukkan perintah berikut:
kubectl delete deployment hello-world
Selanjutnya
Pelajari lebih lanjut cara untuk menghubungkan aplikasi dengan berbagai Service.