Sử dụng traefik làm reverse proxy

Bài viết hướng dẫn cài đặt và cấu hình traefik làm reverse proxy cho các ứng dụng trên linux. Bài viết sử dụng bản binary cho các dịch vụ được triển khai, không triển khai thông qua container.

Yêu cầu cài đặt

  • Hệ điều hành: Linux (systemd) (các lệnh bên dưới mình sử dụng với user root)

Download và cài đặt traefik

tar -zxvf traefik_${traefik_version}_linux_${arch}.tar.gz
  • Chuyển vào thư mục /opt
mv ./traefik /opt/

Cấu hình traefik

Cấu hình tĩnh (Static Configuration)

  • Tạo file traefik.yaml trong thư mục /opt/traefik: /opt/traefik/traefik.yaml
# Static file
entryPoints:
    web_http:
        address: :80
    web_https:
        address: :443

api:
    dashboard: true

certificatesResolvers:
    resolver_certificates:
		    acme:
            email: ***pham@***.com
            storage: acme.json
            httpChallenge:
                entryPoint: web_http

providers:
    file:
        directory: /opt/traefik/conf.d
        watch: true
				

Cấu hình động (Dynamic configuration)

  • Tạo file middlewares.yaml trong thư mục /opt/traefik/conf.d: /opt/traefik/conf.d/middlewares.yaml

Sử dụng trang tạo password để tạo password cho trang cần xác thực:

# conf.d/middlewares.yaml
http:
    middlewares:
        force_https:
            redirectscheme:
                scheme: "https"
                permanent: true

        simpleAuth:
            basicAuth:
                users:
                   - "root:$apr1$mtscnz71$7foZhvOFt/gJBD8iXZbfN/"
									 
  • Tạo file dashboard.yaml trong thư mục /opt/traefik/conf.d để monitor traefik: /opt/traefik/conf.d/dashboard.yaml
# conf.d/dashboard.yaml
http:
    routers:
        api:
            rule: "Host(`traefik.example.com`)"
            entryPoints:
                - "web_https"
            middlewares:
                - "simpleAuth"
            service: "api@internal"
            tls:
                certResolver: resolver_certificates
								
  • Tạo file config cho một ứng dụng: /opt/traefik/conf.d/blog_theta_vn.yaml
# conf.d/blog_theta_vn.yaml
http:
    routers:
        http_blog_theta_vn:
            rule: "Host(`blog.theta.vn`)"
            entryPoints:
                - "web_http"
            middlewares:
                - "force_https"
            service: blog_theta_vn_service
        https_blog_theta_vn:
            rule: "Host(`blog.theta.vn`)"
            entryPoints:
                - "web_https"
            service: blog_theta_vn_service
            tls:
                certResolver: resolver_certificates
    services:
        blog_theta_vn_service:
            loadBalancer:
                servers:
                    - url: "http://localhost:3000/"

Tạo service với systemd

Tạo file traefik.service trong thư mục /etc/systemd/system: /etc/systemd/system/traefik.service

[Unit]
Description = Traefik
After=network.targe

[Service]
Type=simple
WorkingDirectory=/opt/traefik
ExecStart=/opt/traefik/traefik
Restart=always

[Install]
WantedBy = multi-user.target

Cho traefik tự động chạy khi reboot:

systemctl enable traefik.service

Khởi chạy traefik:

systemctl start traefik.service

Sau khi chạy các bạn có thể truy cập các domain đã config để kiểm tra.

Kết luận

Với traefik mình có thể làm reverse proxy, loadbalance cho các services trong các server, nó là một bước để làm quen trước khi config cho các hệ thống lớn hơn như kubernetes.