Overview
Kubernetes adalah salah satu platform open source yang digunakan untuk mengelolah containerized dan services. kubernetes menyediakan pengaturan yang deklaratif, dan punya dukungan komunitas yang luas juga pustaka yang proper.
Tulisan ini akan membahas tentang “cara setup kubernetes di platform Linode”. Berikut daftar yang akan dibahas.
- Perkenalan singkat tentang kubernetes
- Syarat yang dibutuhkan untuk menjalankan kubernetes di platform Linode.
- Setup publik DNS dengan menggunakan
external-dns
- Setup ingress dengan menggunakan traefik class controller.
- Setup keamanan untuk HTTPS
- Cara deploy dengan menggukan kubernetes.
Architecture Overview
Sedikit gambaran architecture ketika kita deploy aplikasi dengan menggunakan kubernetes adalah sebagai berikut:
Akses dari luar (internet) trafic nya akan masuk melalui ingress kemudian akan di route ke service yang di tuju.
- Ingress adalah kubernetes object yang bertugas mengelolah akses dari luar ke dalam service yang ada didalam cluster.
- Service bertugas untuk expose network yang berjalan di sebuah Pod.
- Pod adalah bagian dari deployment, atau biasa dikenal sebagai kelompok dari containers.
Pre-requisites
- Install
kubectl
- Punya akun Linode
- Install helm
Getting Started
Kubernetes
Kubernetes itu sederhananya adalah sebuah orkestrator untuk mengelolah container, kubernetes cocok untuk microservices dengan skala yang cukup besar.
Kalau pernah belajar docker swarm
atau docker compose
secara konsep ini mirip tetapi lebih powerfull,
karena punya banyak fitur dan support yang banyak untuk
mengelolah ratusan bahkan ribuan container.
Sebagai developer pilihlah dengan bijak, kalau service yang dikelolah masih sedikit pakai VM (Virtual Machine) adalah pilihan yang tepat.
Namun kalau butuh skalabilitas tinggi, trafic services yang cukup besar, maka butuh kehandalan kubernetes sebagai pilihan yang tepat.
Untuk lebih detail sila baca referensi di link ini https://kubernetes.io/id/docs/home/
Setup Cluster
Di tahap awal hal yang perlu dilakukan adalah membuat cluster kubernetes di Linode.
Berikut langkah - langkah yang diperlukan:
- Pilih menu kubernetes di Linode kemudian cukup klik
create
saja dan lanjutkan. - Setup node pools dan region.
Node Pools
node pools
adalah kelompok machine yang berada didalam sebuah cluster dan saling terhubung satu dan lainnya, termasuk CPU, memory, networking dan OS.
Node Pools | vCPU’s | RAM | Price | Region | Storage |
---|---|---|---|---|---|
shared-node-1 | 1 | 2 GB | $12 | singapore | 50 GB |
shared-node-2 | 1 | 2 GB | $12 | singapore | 50 GB |
- $10/month Load Balancer
- $2/month Volumes (optional jika dibutuhkan)
Kalau di rupiahkan sekitar 552.673 per bulan dengan kurs $1 = 16.255 ribu rupiah.
Setelah selesai setup awal, lanjut untuk download file kubernetes config <cluster-name-kubeconfig.yaml>
.
Setelah download selanjutnya teman - teman cukup copy file config tersebut ke dalam direktori .kube/config.yaml
di komputer
local teman - teman.
Namun jika sebelumnya sudah ada config cluster lainnya. Teman - teman bisa menggunakan cara merge config
contohnya seperti dibawah:
Selanjutnya bisa di cek hasil config cluster nya dengan perintah seperti ini:
Untuk switch cluster direkomendasikan pakai tools ini https://github.com/ahmetb/kubectx
Cara pakainya seperti contoh dibawah:
Gunakan perintah kubectx <cluster-name>
untuk merubah ke cluster yang dituju. dengan catatan punya setup lebih dari satu cluster di komputer local teman - teman.
Jika hanya ada satu cluster harusnya tidak perlu switch cluster.
Selanjutnya untuk melihat nodes yang aktif bisa dengan perintah kubectl get nodes
.
Setup external-dns
Untuk menggunakan public DNS dibutuhkan komunikasi ke pihak luar yaitu pengelolah domain / provider DNS.
external-dns
adalah salah satu tools yang diperlukan, dengan tools ini sumber daya yang ada didalam cluster
bisa di expose ke luar dengan menggunakan nama domain.
Untuk daftar penyedia layanan DNS yang di dukung bisa di lihat di sini https://github.com/kubernetes-sigs/external-dns?tab=readme-ov-file#the-latest-release
Selanjutnya karena pihak pengelolah DNS kita berada di platform Cloudflare maka perlu untuk setup external-dns
untuk di integrasikan dengan Cloudflare.
Untuk itu teman - teman bisa merujuk ke referensi ini
Membuat API Token di Cloudflare
Login di halaman Cloudflare dan kemudian buat API Token dengan pilihan custom, dengan otoritas Zone Read
, DNS Edit
dan akses All Zones
.
Setelah token diterima selanjutnya perlu untuk membuat secret dengan perintah dibawah:
Kemudian ganti YOUR_API_TOKEN
dengan
token yang baru saja kita dapatkan.
Setelah berhasil kemudian perlu untuk membuat file atau manifest values.yaml
. dan untuk installasi kita akan pakai helm
.
Pastikan sudah switch namespace ke
external-dns
Tahap awal tambahkan repo external-dns di local kemudian update.
Setelah itu install seperti perintah yang ada dibawah.
Tunggu sampai selesai kalau sukses harusnya tampil seperti ini:
Sampai disini external-dns
sudah terinstall dengan baik, selanjutnya kita akan coba deploy service nginx dengan domain http://nginx.adiatma.tech
.
Basic Deployment with HTTP
Untuk manifest nya seperti dibawah ini:
Kemudian deploy:
Sampai di tahap ini service nya sudah ter-deploy, dan public dns nya bisa di akses di http://nginx.adiatma.tech
.
Jika kembali ke halaman Cloudflare harusnya dns record baru sudah dibuat secara otomatis oleh external-dns
.
Sampai di tahap ini sudah berhasil deploy, selanjutnya perlu untuk menambahkan ingress class baru, yaitu traefik.
Setup Traefik untuk Ingress
Traefik adalah salah satu platform open source reverse proxy dan ingress controller yang cukup familiar buat saya pribadi, jika teman - teman punya preferensi yang berbeda silahkan disesuaikan.
Langkah awal kita akan install traefik
dengan menggunakan helm charts.
Selanjutnya perlu untuk memastikan lagi, hasil instalasi traefik tersebut di namespace traefik
.
Yes harusnya traefik sudah ter install dengan baik.
Setup Cert Manager untuk HTTPS
Selanjutnya untuk meng-aktifkan HTTPS secara otomatis di url website kita perlu untuk setup cert-manager
.
Install cert-manager
dengan menggunakan helm charts.
Kemudian pastikan kembali hasil install cert-manager
di namespace cert-manager
.
Jika sukses langkah selanjutnya perlu membuat untuk membuat Issuer
/ ClusterIssuer
.
Tujuannya untuk setup certificate authorities (CAs).
Untuk config nya seperti dibawah ini.
Buat issuer.yaml
Jalankan dengan perintah ini:
Next Deployment with HTTPS
Sampai disini config issuer sudah selesai. dan sekarang kita akan coba lagi membuat deployment baru dengan image nginx.
Selanjutnya expose deployment dengan membuat service nginx.
Kemudian kita akan coba membuat ingress dengan nama nginx, dan menambahkan anotasi di ingress tersebut.
Perintah diatas adalah cara membuat ingress dengan menggunakan CLI kubectl create ingress
, untuk manifest nya akan tampil seperti dibawah ini:
Setelah berhasil tunggu saja beberapa menit biasanya butuh waktu sekitar 20 menitan.
Summary
Sampai disini teman - teman sudah berhasil membuat cluster di Linode, kemudian setup external-dns buat expose service ke public DNS, dan secure dns dengan HTTPS, juga memasang Traefik sebagai ingress controller.
Selanjutnya tambahan teman - teman perlu force setiap public route ke port :443, hal tersebut bisa dengan merubah beberapa pengaturan di traefik.
langsung saja edit traefik seperti dibawah.
Kemudian tambahkan entripoints baru di spec.containers[].args
.