Bảo mật Web Services với Traefik Reverse Proxy
Tìm hiểu về Traefik Reverse Proxy - công cụ Load Balancer hiện đại giúp tự động cấu hình và bảo mật các ứng dụng chạy trên Docker và Kubernetes.
Traefik là một reverse proxy và load balancer hiện đại được thiết kế đặc biệt cho microservices và các môi trường container. Đây là một công cụ mã nguồn mở rất phổ biến trong cộng đồng DevOps và được sử dụng rộng rãi với Docker và Kubernetes.
Một số tính năng và điểm nổi bật của Traefik:
- Tự động phát hiện dịch vụ: Traefik có khả năng tự động phát hiện các dịch vụ mới khi chúng được triển khai, nhờ tích hợp sâu với Docker, Kubernetes và các hệ thống khác.
- Hỗ trợ HTTP/2 và gRPC: Traefik hỗ trợ cả HTTP/1.1, HTTP/2, và gRPC, giúp tối ưu hóa hiệu suất truyền tải dữ liệu giữa các dịch vụ.
- Chứng chỉ SSL/TLS tự động: Traefik tích hợp với Let’s Encrypt để tự động cấp và gia hạn chứng chỉ SSL/TLS, đảm bảo an toàn cho các kết nối HTTP mà không cần cấu hình phức tạp.
- Tích hợp với các hệ thống giám sát: Traefik có thể tích hợp với Prometheus, Datadog, và các hệ thống giám sát khác để theo dõi hiệu suất và sức khỏe của các dịch vụ.
- Quản lý API và giao diện người dùng: Traefik cung cấp một giao diện người dùng (Dashboard) đơn giản và trực quan để quản lý và giám sát các dịch vụ và đường dẫn mạng.
- Khả năng mở rộng: Với kiến trúc plug-in linh hoạt, Traefik có thể dễ dàng mở rộng để hỗ trợ nhiều tính năng và tích hợp khác nhau theo nhu cầu của người dùng.
1. Yêu cầu chuẩn bị
Để thực hiện anh em chuẩn bị cho mình một con máy ảo hoặc VPS hệ điều hành Ubuntu 18.04 LTS, Ubuntu 20.04 LTS hoặc Ubuntu 22.04 LTS.
Anh em nào mới bắt đầu thì có thể đăng kí một tài khoản trên DigitalOcean. Hiện tại có chương trình khuyến mãi tặng $200 dùng trong 60 ngày cho khách mới lần đầu đăng kí (lần trước là tặng $100). Mình có video hướng dẫn chi tiết quá trình đăng kí tại đây.
2. Cài đặt Traefik
Trước khi cài đặt Traefik, anh em cài Docker và Docker Compose theo scripts.
Tạo thư mục chứa cấu hình cài đặt Traefik:
mkdir traefik
cd traefik
Tạo file cấu hình docker-compose.yml:
nano docker-compose.yml
Dán nội dung sau vào:
version: '3'
services:
reverse-proxy:
image: traefik:v2.11
command: --configFile=/etc/traefik/traefik.yml
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.yml:/etc/traefik/traefik.yml
- ./acme.json:/acme.json
networks:
- traefik
networks:
traefik:
external: true
Trong đó:
- Ports: khai báo các cổng triển khai HTTP (80), HTTPS (443), và Traefik Dashboard (8080).
- Volumes: khai báo volumes lưu trữ
traefik.ymlvàacme.json. - Networks: khai báo network.
Tạo file cấu hình traefik.yml:
nano traefik.yml
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
certificatesResolvers:
myresolver:
acme:
email: [email protected]
storage: acme.json
httpChallenge:
entryPoint: web
providers:
docker:
exposedByDefault: false
Trong đó:
- ACME Configuration: Dùng cấu hình tự động HTTPS. Traefik sẽ giao tiếp với Let’s Encrypt để tạo và cấp mới chứng chỉ bảo mật SSL.
- email: email cấu hình Let’s Encrypt để nhận thông báo.
- storage: nơi lưu trữ file
acme.jsonkhi tạo và cấp mới chứng chỉ bảo mật SSL.
Tạo file cấu hình acme.json và phân quyền:
touch acme.json
chmod 600 acme.json
Tạo network traefik trong Docker:
docker network create traefik
Cuối cùng, khởi tạo và chạy Traefik:
docker-compose up -d
Kiểm tra container đã khởi tạo thành công hay chưa:
docker ps
3. Bảo mật web services HTTPS với Traefik reverse proxy
Triển khai một ví dụ Nginx service, dùng Traefik và bật nhãn truy cập bằng HTTPS.
Tạo thư mục Nginx:
mkdir nginx
cd nginx
Tạo file cấu hình Docker Compose triển khai:
version: '3'
services:
nginx_test:
image: nginx
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx.rule=Host(`nginx.kienletv.com`)"
- "traefik.http.routers.nginx.entrypoints=websecure"
- "traefik.http.routers.nginx.tls=true"
- "traefik.http.routers.nginx.tls.certresolver=myresolver"
networks:
- traefik
networks:
traefik:
external: true
Lưu ý: Trong phần
labelsmình có khai báo Host là:nginx.kienletv.com. Điều này có nghĩa ứng dụng Nginx service sẽ chạy bằng domain này. Domain này anh em có thể mua trên Mắt Bão, Nhân Hoà, Inet… và trỏ IP về server VPS đang cài Traefik.
Khởi tạo và chạy Nginx service:
docker-compose up -d
Kiểm tra ứng dụng đã khởi tạo:
docker ps
Anh em thấy ứng dụng Nginx service đã được khởi tạo với cổng 80. Cổng này hoàn toàn không được expose ra bên ngoài mà chỉ dùng local trong network Docker. Và Traefik lúc này đóng vai trò là một reverse proxy.
Truy cập domain và kiểm tra:
https://nginx.kienletv.com
Mình đã vào được trang mặc định của Nginx service. Traefik kết hợp Let’s Encrypt để tự động tạo và cấp một chứng chỉ bảo mật SSL cho domain nginx.kienletv.com.
Ví dụ triển khai khác với WordPress service
Tạo thư mục WordPress:
mkdir wordpress
cd wordpress
Tạo file cấu hình Docker Compose triển khai:
nano docker-compose.yml
version: '3'
services:
db:
image: mariadb:10.6.4-focal
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
networks:
- traefik
wordpress:
image: wordpress:latest
volumes:
- wp_data:/var/www/html
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
labels:
- "traefik.enable=true"
- "traefik.http.routers.wordpress.rule=Host(`wordpress.kienletv.com`)"
- "traefik.http.routers.wordpress.entrypoints=websecure"
- "traefik.http.routers.wordpress.tls=true"
- "traefik.http.routers.wordpress.tls.certresolver=myresolver"
networks:
- traefik
networks:
traefik:
external: true
volumes:
db_data:
wp_data:
Khởi tạo và chạy WordPress service:
docker-compose up -d
Kiểm tra ứng dụng đã khởi tạo:
docker ps
Truy cập domain https://wordpress.kienletv.com và kiểm tra. Lúc này, mình đã vào được giao diện WordPress quen thuộc và bắt đầu thiết lập website mới, với chứng chỉ SSL được cấp bởi Let’s Encrypt hoàn toàn tự động.
4. Lời kết
Qua bài viết này mình đã chia sẻ với anh em một giải pháp bảo mật web services với Traefik reverse proxy. Ngoài ra cũng còn nhiều giải pháp khác như dùng Nginx reverse proxy hay Nginx Proxy Manager (NPM)… Chúc anh em thành công!
Một số nguồn tham khảo mình để bên dưới anh em đọc thêm:
Bình luận
Bài viết liên quan
Hướng Dẫn Cài Đặt GitLab Runner Với Docker Cho Người Mới
Hướng dẫn từng bước cách cài đặt và cấu hình GitLab Runner bằng Docker trên máy chủ (EC2/VPS). Giải pháp hoàn hảo giúp tự động hóa quy trình CI/CD dễ hiểu cho cả người không chuyên kỹ thuật.
Hướng dẫn cài đặt và sử dụng Rancher toàn tập cho người mới
Rancher là gì? Hướng dẫn chi tiết cách cài đặt và sử dụng Rancher bằng Docker Compose để quản lý các cluster Kubernetes một cách hiệu quả và trực quan nhất.
Hướng Dẫn Triển Khai Cụm Amazon EKS Trên Nền Tảng AWS Bằng Terraform
Hướng dẫn chi tiết từng bước cách triển khai cụm Kubernetes (EKS) trên nền tảng AWS bằng công cụ Infrastructure as Code (IaC) Terraform. Bài viết phù hợp cho kỹ sư DevOps và Cloud.