Edit This Page

Menggunakan Port Forwarding untuk Mengakses Aplikasi di sebuah Klaster

Halaman ini menunjukkan bagaimana menggunakan kubectl port-forward untuk menghubungkan sebuah server Redis yang sedang berjalan di sebuah klaster Kubernetes. Tipe dari koneksi ini dapat berguna untuk melakukan debugging basis data.

Sebelum mulai

Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl juga harus dikonfigurasikan untuk berkomunikasi dengan klaster kamu. Jika kamu belum punya klaster, kamu dapat membuatnya dengan menggunakan Minikube, atau kamu dapat menggunakan salah satu tempat bermain Kubernetes ini:

Kubernetes servermu harus ada di versi yang sama atau lebih baru v1.10. Untuk melihat versi, tekan kubectl version.

Membuat Deployment dan Service Redis

  1. Buat sebuah Deployment yang menjalankan Redis:

    kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-deployment.yaml
    

    Keluaran dari sebuah perintah yang sukses akan memverifikasi bahwa Deployment telah terbuat:

    deployment.apps/redis-master created
    

    Lihat status Pod untuk memeriksa apakah sudah siap:

    kubectl get pods
    

    Keluaran menampilkan Pod yang telah terbuat:

    NAME                            READY     STATUS    RESTARTS   AGE
    redis-master-765d459796-258hz   1/1       Running   0          50s
    

    Lihat status Deployment:

    kubectl get deployment
    

    Keluaran menampilkan bahwa Deployment telah terbuat:

    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    redis-master 1/1     1            1           55s
    

    Deployment secara otomatis mengatur sebuah ReplicaSet. Lihat status ReplicaSet menggunakan:

    kubectl get replicaset
    

    Keluaran menampilkan bahwa ReplicaSet telah terbuat:

    NAME                      DESIRED   CURRENT   READY     AGE
    redis-master-765d459796   1         1         1         1m
    
  2. Buat sebuah Service untuk mengekspos Redis di jaringan:

    kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-service.yaml
    

    Keluaran dari perintah yang sukses akan memverifikasi bahwa Service telah terbuat:

    service/redis-master created
    

    Lihat Service yang telah terbuat menggunakan:

    kubectl get service redis-master
    

    Keluaran menampilkan service yang telah terbuat:

    NAME           TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
    redis-master   ClusterIP   10.0.0.213   <none>        6379/TCP   27s
    
  3. Periksa apakah server Redis berjalan di Pod, dan mendengarkan porta 6379:

    # Ubah redis-master-765d459796-258hz menjadi nama Pod
    kubectl get pod redis-master-765d459796-258hz --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
    

    Keluaran akan menampilkan porta dari Redis di Pod tersebut:

    6379
    

    (ini adalah porta TCP yang dialokasi untuk Redis di internet)

Meneruskan sebuah porta lokal ke sebuah porta pada Pod

  1. kubectl port-forward memungkinkan penggunaan nama sumber daya, seperti sebuah nama Pod, untuk memilih Pod yang sesuai untuk melakukan penerusan porta.

    # Ubah redis-master-765d459796-258hz menjadi nama Pod
    kubectl port-forward redis-master-765d459796-258hz 7000:6379
    

    yang sama seperti

    kubectl port-forward pods/redis-master-765d459796-258hz 7000:6379
    

    atau

    kubectl port-forward deployment/redis-master 7000:6379
    

    atau

    kubectl port-forward replicaset/redis-master 7000:6379
    

    atau

    kubectl port-forward service/redis-master 7000:6379
    

    Semua perintah di atas berfungsi. Keluarannya mirip dengan ini:

    I0710 14:43:38.274550    3655 portforward.go:225] Forwarding from 127.0.0.1:7000 -> 6379
    I0710 14:43:38.274797    3655 portforward.go:225] Forwarding from [::1]:7000 -> 6379
    
  2. Memulai antarmuka baris perintah (command line) Redis:

    redis-cli -p 7000
    
  3. Pada baris perintah di Redis, masukkan perintah ping:

    ping
    

    Sebuah permintaan ping yang sukses akan mengembalikan:

    PONG
    

Diskusi

Koneksi-koneksi yang dibuat ke porta lokal 7000 diteruskan ke porta 6379 dari Pod yang menjalankan server Redis. Dengan koneksi ini, kamu dapat menggunakan workstation lokal untuk melakukan debug basis data yang berjalan di Pod.

Catatan: kubectl port-forward hanya bisa diimplementasikan untuk porta TCP saja. Dukungan untuk protokol UDP bisa dilihat di issue 47862.

Selanjutnya

Belajar lebih tentang kubectl port-forward.