Introduction
Kita akan membutuhkan Ingress Controller untuk mengekspose service ke luar kubernetes. Disini kita akan menggunakan traefik sebagai Ingress Controller yang akan menjadi reverse proxy jika ada sebuah domain yang dipointing ke IP Traefik, maka akan diarahkan ke service.
Reqruitment
- Kubernetes Cluster
- Helm
- MetalLB
- Storage Class (using rook-ceph)
- Subdomain (using stagging.cygnenoir.net for testing)
- IP Public (Forward to IP MetalLB used for traefik)
Installation
Installation using helm
Menambahkan repo helm
helm repo add traefik https://traefik.github.io/charts
Check versi traefik
helm search repo traefik
Jika kita ingin lihat default values dari traefik
helm show values trafik/traefik > values-traefik.yaml
Sekarang kita buat values.yaml. Ini values minimal yang kita perlukan.
service:
spec:
externalTrafficPolicy: Local
ports:
web:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
persistence:
enable: true
storageClass: ceph-block
size: 1Gi
service.spec.externalTrafficPolicy
Untuk mengontrol traffik dari luar ke arah backend pods,
Cluster(default): Trafik dari luar bakalan ke any node tapi bakalan hilang source ip. disini kita pake cillium, maka ip client yg akan kita dapat yaitu cilium. (With SRC-IP)
Local: Trafik dari luar bakalan ke spesifik node bedasarkan letak pods deployed. Kita bakalan dapat source ip client tanpa menggunakan cillium. (No SRC-IP)
ports.web.redirections.entryPoint
Berfungsi untuk secara default langsung redirect ke https
Install menggunakan values yang kita buat
helm install --create-namespace traefik traefik/traefik -n traefik --values values.yaml

Testing
Sekarang kita test untuk menggunakan domain stagging.cygnenoir.net ke arah IP Publik yang sudah di forward ke IP LoadBalancer Traefik.
Membuat file ingressroute.yaml (ini jika kita sudah mempunyai pod dan service nginx)
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: test-ingress
namespace: monitoring
spec:
entryPoints:
- websecure
routes:
- match: Host(`stagging.cygnenoir.net`)
kind: Rule
services:
- name: nginx-service
port: 80
Apply file tersebut
kubectl apply -f ingressroute.yaml
Sekarang coba kita akses ke domain tersebut menggunakan browser

Kita sudah bisa akses, tapi kena block karna kita belum mempunyai SSL yang valid
Untuk SSL kita akan menggunakan letsencryp dan menggunakan cert-manager.