traefik
|

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

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

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!

4 . Nguồn tham khảo

Bài viết liên quan

Subscribe
Notify of
guest
0 Góp ý
Oldest
Newest Most Voted
Inline Feedbacks
View all comments