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 sebuahload balancer eksternal,yang membutuhkan sebuah penyedia layanan cloud.
-
Konfigurasi
kubectlagar 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 objekReplicaSet yang diasosiasikan dengan Deployment yang dibuat. ReplicaSet memiliki lima buahPod,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-serviceKeluaran 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 54sCatatan:
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-servicePerintah 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 dariPortdanNodePort. Pada contoh ini,Portyang digunakan adalah 8080 danNodePortadalah 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=wideKeluaran 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 dariPortdari deskripsi Service kamu.Jika kamu menggunakan minikube, menuliskan perintahminikube service my-serviceakan 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 untukmenghubungkan aplikasi dengan berbagai Service.