Cài đặt Traefik làm Ingress Controller trên Kubernetes bằng Helm chart
Traefik là một reverse proxy và load balancer hiện đại, được thiết kế đặc biệt cho các hệ thống microservices và môi trường container hóa (như Docker, Kubernetes, etc.). Nó tự động quản lý cấu hình khi các dịch vụ được triển khai hoặc thay đổi, giúp việc định tuyến lưu lượng mạng trở nên linh hoạt và dễ dàng hơn.
Trong bài viết này mình chia sẻ với mọi người cài đặt Traefik làm Ingress Controller trên Kubernetes bằng Helm chart.

1. Chuẩn bị
Kubernetes Cluster: Đã có một cluster Kubernetes đang hoạt động (có thể là Minikube, Kind, hoặc một cluster thực tế như EKS, GKE, AKS).
Helm: Đã cài đặt Helm trên máy local (phiên bản 3.x trở lên). Bạn có thể kiểm tra bằng lệnh:
helm version
kubectl: Đã cấu hình để giao tiếp với cluster Kubernetes của bạn. Kiểm tra bằng:
kubectl cluster-info
2. Các bước cài đặt Traefik bằng Helm
2. 1 Thêm Helm Repository của Traefik
Traefik được duy trì trong một Helm repository chính thức. Thêm repository này vào Helm của bạn:
helm repo add traefik https://traefik.github.io/charts
helm repo update
Kiểm tra xem repo đã được thêm chưa:
helm search repo traefik
Bạn sẽ thấy danh sách các chart liên quan đến Traefik, ví dụ: traefik/traefik
2.2 Tạo Namespace (tùy chọn)
Để tổ chức tốt hơn, bạn có thể cài đặt Traefik vào một namespace riêng, ví dụ traefik. Tạo namespace
kubectl create namespace traefik
2.3 Tùy chỉnh cấu hình (values.yaml)
Helm cho phép bạn tùy chỉnh cài đặt Traefik thông qua file values.yaml. Tạo một file custom-values.yaml với nội dung cơ bản như sau:
# custom-values.yaml
deployment:
replicas: 2 # Số lượng pod Traefik
ports:
web:
port: 80 # HTTP
websecure:
port: 443 # HTTPS
traefik:
port: 9000 # Dashboard (tùy chọn)
ingressRoute:
dashboard:
enabled: true # Bật dashboard
entryPoints:
- web
match: Host(`traefik.local`) && PathPrefix(`/dashboard`) # URL truy cập dashboard
service:
type: LoadBalancer # Dùng LoadBalancer để expose Traefik ra ngoài
logs:
general:
level: INFO # Cấp độ log
Trong đó:
replicas: Số lượng pod Traefik để đảm bảo tính HA (High Availability).
ports: Cấu hình các cổng mà Traefik sẽ lắng nghe.
ingressRoute.dashboard: Bật dashboard của Traefik (truy cập qua traefik.local/dashboard).
service.type: Đặt thành LoadBalancer nếu bạn muốn Traefik nhận IP public (phù hợp với cloud provider). Nếu dùng local (Minikube), có thể để ClusterIP và dùng port-forward.
2.4 Cài đặt Traefik bằng Helm
Chạy lệnh Helm để cài đặt Traefik vào cluster:
helm install traefik traefik/traefik \
--namespace traefik \
--values custom-values.yaml
- traefik: Tên release của Helm.
- traefik/traefik: Chart từ repository.
- –namespace: Namespace nơi Traefik được cài.
- –values: File cấu hình tùy chỉnh.
Kiểm tra xem Traefik đã được cài chưa:
kubectl get pods -n traefik
Bạn sẽ thấy các pod Traefik đang chạy (ví dụ: traefik-xyz-abc).
2.5 Xác nhận Traefik hoạt động
Kiểm tra Service: Nếu dùng LoadBalancer, lấy external IP
kubectl get svc -n traefik
Bạn sẽ thấy cột EXTERNAL-IP (trên cloud). Với Minikube, dùng:
minikube service traefik -n traefik
Truy cập Dashboard: Nếu bật dashboard, forward cổng để truy cập local
kubectl port-forward svc/traefik 9000:9000 -n traefik
Mở trình duyệt tại http://localhost:9000/dashboard/ (thêm dấu / ở cuối).
2. 6 Cấu hình Ingress với Traefik
Tạo một Ingress resource để kiểm tra Traefik. Ví dụ, triển khai một ứng dụng đơn giản với Whoami App
Tạo file whoami.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: whoami
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami
image: traefik/whoami
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: default
spec:
selector:
app: whoami
ports:
- protocol: TCP
port: 80
targetPort: 80
kubectl apply -f whoami.yaml
Tạo Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: whoami-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
ingressClassName: traefik
rules:
- host: whoami.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: whoami
port:
number: 80
kubectl apply -f ingress.yaml
2.7 Kiểm tra
Kiểm tra bằng câu lệnh
kubectl get ingress -n default
output
NAME CLASS HOSTS ADDRESS PORTS
whoami-ingress traefik whoami.local <traefik-ip> 80
Kiểm tra nếu dùng máy local với Minikube
echo "<traefik-ip> whoami.local" | sudo tee -a /etc/hosts
curl -H "Host: whoami.local" http://whoami.local
3. Tổng kết
Trên đây là bài viết hướng dẫn mọi người cài đặt Traefik làm Ingress Controller trên Kubernetes bằng Helm. Từ đây, bạn có thể mở rộng cấu hình (HTTPS với Let’s Encrypt, middleware, v.v.) bằng cách chỉnh sửa values.yaml hoặc thêm các Ingress resource. Chúc các bạn thành công!