Apa yang bisa kami bantu?

A. Pendahuluan

Kubernetes adalah salah satu platform container orchestration yang populer, memungkinkan kita untuk mengelola dan menskalakan aplikasi container dengan mudah. Namun, untuk mengakses aplikasi yang berjalan di dalam cluster Kubernetes dari internet, kita memerlukan konfigurasi khusus, yaitu Ingress. Ingress memungkinkan kita untuk mengatur akses HTTP dan HTTPS ke layanan dalam cluster, sehingga aplikasi dapat diakses dari publik. Dalam artikel ini, kita akan membahas cara menggunakan Ingress di NEO Kubernetes dengan bantuan Traefik sebagai Ingress controller (yang sudah terinstall), serta langkah-langkah instalasi WordPress dan MySQL dengan Persistent Volume di Kubernetes.

B. Konfigurasi & Instalasi

1. Persiapan Cluster Kubernetes

Pastikan anda telah memiliki cluster Kubernetes dan berfungsi dengan baik. Di sini kita akan menggunakan NEO Kubernetes sebagai environment cluster, dan kita anggap bahwa Anda sudah memiliki akses ke cluster ini.

 

a. Membuat Namespace WordPress

Untuk memisahkan aplikasi WordPress dan MySQL dari namespace default, buat namespace baru bernama wordpress.

kubectl create namespace wordpress

Kita akan menginstal aplikasi WordPress dan MySQL di dalam Kubernetes dengan Persistent Volume. Langkah-langkah ini akan mengikuti tutorial dasar yang bisa ditemukan di dokumentasi Kubernetes.

 

b. Konfigurasi YAML untuk MySQL

Berikut adalah konfigurasi YAML untuk MySQL, termasuk Secret untuk password, Persistent Volume Claim, Deployment, dan Service. Semua konfigurasi ini berada di namespace wordpress. Buat file baru dengan nama mysql.yaml dan isi dengan konfigurasi dibawah:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  namespace: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: Secret
metadata:
  name: mysql-pass
  namespace: wordpress
type: Opaque
data:
  password: cGFzc3dvcmQ=  # Base64 encoding of "password"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: wordpress
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: wordpress
spec:
  ports:
  - port: 3306
  selector:
    app: mysql

Setelah membuat file mysql.yaml, jalankan command berikut untuk men deploy mysql dengan presistent volume:

kubectl apply -f mysql.yaml
Gambar 1: mysql.yaml

 

c. Konfigurasi YAML untuk Wordpress

Berikut adalah konfigurasi YAML untuk WordPress, termasuk Persistent Volume Claim, Deployment, dan Service. Semua konfigurasi ini berada di namespace wordpress. Buat file baru dengan nama wordpress.yaml dan isi dengan konfigurasi dibawah:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-pv-claim
  namespace: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  namespace: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wordpress-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  namespace: wordpress
  labels:
    app: wordpress
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: wordpress

Sama seperti sebelumnya, untuk deploy wordpress dari konfigurasi diatas, jalankan command: 

kubectl apply -f wordpress.yaml
Gambar 2: wordpress.yaml

Verifikasi mysql dan wordpress dengan command berikut, pastikan hasilnya sudah running dan tidak terdapat error:

kubectl get all -n wordpress
Gambar 3: status pod, deployment, service mysql & wordpress

Note:

Pada artikel ini kita akan berfokus untuk membahas ingress, oleh karena itu kami tidak akan menjelaskan lebih detail terkait konfigurasi diatas dan kami hanya memfokuskan ke ingress saja.

 

2. Konfigurasi Ingress untuk Akses Public

Setelah WordPress dan MySQL terpasang, kita akan membuat konfigurasi Ingress untuk mengarahkan trafik ke aplikasi ini. Di sini, kita akan menggunakan Traefik(sudah terinstal secara default) sebagai Ingress controller. Pastikan konfigurasi ini juga berada di namespace wordpress. Buat file baru dengan nama ingress.yaml dan isikan konfigurasi dibawah ini:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wordpress-ingress
  namespace: wordpress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: wordpress
                port:
                  number: 80

Jangan lupa untuk merubah example.com dengan nama domain anda, kemudian apply konfigurasi ingress diatas ke cluster Kubernetes:

kubectl apply -f ingress.yaml

Verifikasi pemasangan ingress dengan command:

kubectl get ingress -n wordpress
kubectl describe ingress wordpress-ingress -n wordpress
Gambar 4: verifikasi ingress

3. Memahami Ingress pada Kubernetes

Ingress pada Kubernetes adalah sebuah resource yang memungkinkan pengelolaan akses HTTP dan HTTPS dari luar ke dalam cluster Kubernetes. Ingress bertindak sebagai "pintu masuk" bagi request HTTP, mengarahkan lalu lintas dari domain tertentu ke service di dalam cluster. Ingress sangat bermanfaat untuk mengelola aplikasi web yang harus diakses secara publik dengan domain yang terdefinisi.

Berikut adalah penjelasan rinci dari konfigurasi Ingress pada YAML file sebelumnya:

Penjelasan Setiap Bagian dari Konfigurasi Ingress

 

1. apiVersion

apiVersion: networking.k8s.io/v1

Deskripsi: apiVersion mendefinisikan versi API Kubernetes yang digunakan untuk resource ini. Dalam hal ini, networking.k8s.io/v1 adalah versi API yang direkomendasikan untuk resource Ingress sejak Kubernetes versi 1.19.

 

Fungsi: Menyatakan versi API agar Kubernetes dapat menginterpretasikan dan memproses resource dengan benar. Ini penting karena setiap versi API dapat memiliki fitur atau sintaksis yang berbeda.

 

2. kind

kind: Ingress

Deskripsi: kind mendefinisikan tipe resource yang akan dibuat, yaitu Ingress.

 

Fungsi: Memberitahukan kepada Kubernetes bahwa resource yang didefinisikan adalah Ingress, sehingga sistem dapat menerapkan konfigurasi yang relevan untuk mengelola lalu lintas HTTP/HTTPS.

 

3. metadata

metadata:
  name: wordpress-ingress
  namespace: wordpress

Deskripsi: metadata berisi informasi identifikasi untuk resource.

  • name: Nama dari resource Ingress, yaitu wordpress-ingress.
  • namespace: Namespace tempat Ingress akan ditempatkan, yaitu wordpress.

Fungsi:

  •  name: Memberikan nama unik untuk Ingress, yang digunakan untuk referensi dalam namespace yang sama.
  • namespace: Menentukan ruang lingkup dari resource ini agar Kubernetes hanya menerapkan Ingress pada namespace tertentu. Ini membantu dalam mengorganisir resource untuk aplikasi yang berbeda.

 

4. spec

spec:

Deskripsi: spec mendefinisikan spesifikasi atau konfigurasi utama dari Ingress, termasuk rule routing yang mengarahkan lalu lintas ke service tertentu di dalam cluster.

Fungsi: spec merupakan inti dari konfigurasi Ingress yang mengatur bagaimana lalu lintas eksternal akan diarahkan ke service di dalam Kubernetes.

 

5. rules

rules:

Deskripsi: rules adalah bagian di mana aturan-aturan / rules routing didefinisikan. Setiap rule menentukan satu atau lebih host dan path yang akan diteruskan ke backend service tertentu.

Fungsi: Memberikan aturan mengenai domain atau host yang akan di-handle oleh Ingress, serta path yang digunakan untuk memetakan URL ke service backend.

 

6. host

- host: example.com

Deskripsi: host mendefinisikan nama domain yang akan digunakan untuk mengakses aplikasi. Dalam contoh ini, domain yang didefinisikan adalah example.com.

Fungsi: Menentukan domain yang akan dihubungkan dengan Ingress. Request HTTP/HTTPS yang datang ke example.com akan diarahkan oleh Ingress berdasarkan konfigurasi ini. Domain ini harus diarahkan ke IP dari Ingress controller (seperti Traefik atau NGINX) melalui DNS.

 

7. http

http:

Deskripsi: http adalah bagian di dalam rules yang mengatur spesifik aturan untuk request HTTP.

Fungsi: Mengarahkan lalu lintas HTTP berdasarkan aturan path yang ditentukan dalam konfigurasi paths.

 

8. paths

paths:

Deskripsi: paths mendefinisikan aturan path yang akan dipetakan ke service tertentu di dalam cluster.

Fungsi: Menentukan path URL yang harus dicocokkan dengan request masuk. Berdasarkan path yang diberikan, Ingress akan mengarahkan request ke service backend yang telah ditentukan.

 

9. path

path: /

Deskripsi: path menetapkan path yang harus cocok dengan URL request. Dalam contoh ini, path "/" mengindikasikan semua request ke example.com/.

Fungsi: Memberikan pola path untuk routing request. Path ini dikombinasikan dengan pathType untuk menentukan bagaimana pola ini diterapkan pada URL.

 

10. pathType

pathType: Prefix

Deskripsi: pathType menentukan jenis pencocokan yang digunakan pada path. Di sini, Prefix berarti semua request yang diawali dengan path / akan cocok.

Fungsi: Menentukan cara pencocokan path, dengan beberapa opsi seperti:

  • Prefix: Mencocokkan semua path yang diawali dengan pola yang diberikan.
  • Exact: Mencocokkan path secara persis dengan pola yang diberikan.

Penggunaan di Contoh Ini: Prefix memungkinkan semua request dengan path yang dimulai dengan / diarahkan ke service.

 

11. backend

backend:
  service:
    name: wordpress
    port:
      number: 80

Deskripsi: backend menentukan service di dalam cluster yang akan menerima request yang cocok dengan host dan path.

  • service: Nama service yang akan diakses, yaitu wordpress.
  • port: Port pada service yang akan digunakan, dalam hal ini port 80.

Fungsi:

  • service: Mengarahkan lalu lintas ke service bernama wordpress di namespace wordpress.
  • port: Menentukan port di service wordpress yang akan diakses, di sini adalah port 80, yang biasanya digunakan untuk HTTP.

 

4. Verifikasi

Setelah memahami dan membuat ingress, saat nya melakukan verifikasi hasil dari ingress yang sudah dibuat sebelumnya. Pada saat ini pastikan anda sudah melakukan pointing domain yang ditambahkan pada ingress ke DNS / Nameserver yang anda gunakan.

Setelah melakukan pointing, silakan akses nama domain yang anda gunakan pada ingress.

Gambar 5: Instalasi wordpress
Gambar 6: Dashboard wordpress

C. Penutup

Dalam artikel ini, kita telah mempelajari cara menggunakan Ingress di NEO Kubernetes dengan konfigurasi Ingress Traefik untuk mengakses aplikasi dari publik. Dengan menggunakan Persistent Volume, data aplikasi tetap persisten meskipun pod atau container mengalami gangguan. Melalui konfigurasi ini, kita dapat dengan mudah mengelola akses publik pada aplikasi di Kubernetes dengan Ingress yang terintegrasi pada platform NEO Kubernetes.

 

Semoga artikel inidapat membantu Anda. Temukan bantuan lainnya melalui Knowledge Base Biznet Gio.Jika Anda masih memiliki kendala silahkan hubungi support@biznetgio.com atau(021) 5714567.