Penggunaan Ingress di NEO Kubernetes
0 people liked this article
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
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
Verifikasi mysql dan wordpress dengan command berikut, pastikan hasilnya sudah running dan tidak terdapat error:
kubectl get all -n 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
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, yaituwordpress-ingress
.namespace:
Namespace tempat Ingress akan ditempatkan, yaituwordpress
.
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, yaituwordpress
.port
: Port pada service yang akan digunakan, dalam hal ini port80
.
Fungsi:
service
: Mengarahkan lalu lintas ke service bernamawordpress
di namespacewordpress
.port
: Menentukan port di servicewordpress
yang akan diakses, di sini adalah port80
, 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
.
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.
Popular Articles
-
Cara Install & Konfigurasi Monitoring Cacti Serta Mengetahui Fungsi Fitur Pada Cacti
10 people say this guide was helpful
-
Cara Mengaktifkan Telnet pada Windows 7, 8 dan 10
3 people say this guide was helpful
-
Instalasi DNS Server Menggunakan Service Bind di CentOS 7
4 people say this guide was helpful
-
Install dan Konfigurasi Samba Server pada Ubuntu
2 people say this guide was helpful