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
- Download traefik, mình sử dụng bản 2.*
- Giải nén file tải xuống
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.