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

  1. 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.

  1. Tampilkan informasi mengenai Deployment:

     kubectl get deployments hello-world
     kubectl describe deployments hello-world
    
  2. Tampilkan informasi mengenai objek ReplicaSet:

     kubectl get replicasets
     kubectl describe replicasets
    
  3. Buatlah sebuah objek Service yang mengekspos deployment:

     kubectl expose deployment hello-world --type=LoadBalancer --name=my-service
    
  4. 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
    
  5. 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 dari Port dan NodePort. Pada contoh ini, Port yang digunakan adalah 8080 dan NodePort adalah 32377.

  6. 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
    
  7. 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 dari Port dari deskripsi Service kamu. Jika kamu menggunakan minikube, menuliskan perintah minikube 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.