3 điểm bởi GN⁺ 2024-05-06 | 1 bình luận | Chia sẻ qua WhatsApp

Lý do nên xem Traefik ngay cả khi không sử dụng container

Những điểm đã biết về Traefik

  • Traefik có mục tiêu giúp đỡ thế giới microservices
  • Nhiều youtuber chia sẻ rằng họ dùng hạ tầng container như Docker hoặc Kubernetes
  • Traefik chạy dưới dạng container, và có thể tự động phát hiện các container khác cần được public qua Traefik bằng cách mount Docker socket vào container Traefik
  • Có thể cấu hình hành vi proxy cho một container cụ thể thông qua nhãn
  • Traefik tự động yêu cầu chứng chỉ TLS từ Let's Encrypt và có thể sử dụng dịch vụ ngay khi phát hiện container mới

Traefik vẫn hữu ích ngay cả khi không dùng container

Nhận thức sai phổ biến: không cần container engine

  • Traefik không cần chạy trên container engine, và dịch vụ cũng không cần chạy trên container engine
  • Traefik được viết bằng Golang và biên dịch thành một file nhị phân duy nhất
  • Gặp phần mềm được viết bằng Golang rồi biên dịch thành binary duy nhất thì luôn để lại cảm giác rất tốt
  • Triển khai dễ dàng và có thể giữ được kiểm soát đầy đủ

Nhận thức sai phổ biến: vẫn hỗ trợ file cấu hình

  • Khi không dùng container thì không thể dùng nhãn của container, nhưng nhãn thì phức tạp và khó đọc
  • Traefik có thể được cấu hình bằng file cấu hình
  • Traefik chia cấu hình thành phần "tĩnh" gồm nhà cung cấp chứng chỉ (ví dụ: Let's Encrypt) và điểm vào (port Traefik lắng nghe) và phần "động" gồm router, service và middleware
  • Traefik nhận sự kiện hệ thống file và có thể hot-reload phần cấu hình động

Tài liệu rất đầy đủ

  • Các khái niệm nền tảng của Traefik được giải thích rõ ràng
  • Ở đầu mỗi trang liên quan có ví dụ cấu hình cho cách cấu hình instance đã chọn
  • Tài liệu bao quát hầu hết các yêu cầu
  • Sidebar rất hữu ích

Traefik dường như được xây dựng tốt và vững chắc

  • Traefik cảnh báo khi cấu hình không logic mà chưa từng gây ra lỗi ngẫu nhiên
  • Traefik dường như không ghi quá nhiều log theo mặc định, nhưng rất dễ hiểu cách request được xử lý nên có thể bắt đầu nhanh mà không bực bội

Tính năng thực sự ấn tượng

Hỗ trợ TLS passthrough và PROXY protocol

  • Traefik hỗ trợ TLS passthrough và giao thức PROXY của HAProxy (đầu vào và đầu ra)
  • TLS passthrough nghĩa là có thể chuyển tiếp lưu lượng sang dịch vụ web tự cung cấp chứng chỉ TLS của riêng mình
  • Có thể yêu cầu trực tiếp từ Let's Encrypt tại dịch vụ mà không cần kết thúc TLS tại proxy
  • PROXY protocol là cách truyền thông tin an toàn hơn khi một request chạm proxy trước service
  • PROXY protocol cũng cần được hỗ trợ bởi service đích; Apache2 và Nginx (vì vậy cả PHP) đã hỗ trợ, và danh sách service hỗ trợ giao thức này đang tăng lên

Những điểm chưa hài lòng khi dùng Traefik

Xác thực

  • Ở NGINX, có thể bảo vệ một số service bằng Azure AD thông qua Vouch Proxy
  • Traefik hỗ trợ ForwardAuth tương tự cơ chế auth của NGINX nhưng Vouch Proxy hiện chưa hoạt động trên Traefik
  • Có thể triển khai một instance Keycloak, tích hợp với AAD rồi dùng cho ForwardAuth, nhưng trước tiên cần thiết lập Keycloak đó an toàn và luôn cập nhật
  • traefik-forward-auth thường được khuyến nghị, nhưng bản cập nhật cuối cùng là tháng 6/2020, tác giả đã biến mất trên GitHub và cần cập nhật các dependency
  • Đã từng có trải nghiệm không tốt với oauth2-proxy
  • Những thứ như HTTP2/3, timeout, kích thước body và WebSocket đều cần cấu hình ở mọi proxy giữa người dùng và service, nên việc chồng proxy sẽ rất dễ phát sinh lỗi
  • Traefik ForwardAuth trông đơn giản, nên có thể viết một công cụ nhỏ riêng để tích hợp với AAD hoặc fork traefik-forward-auth, audit rồi cập nhật dependency

Chặn user agent và địa chỉ IP

  • Không muốn các service nội bộ bị lưu trữ trên archive.org
  • robots.txt và các header tương tự không có tác dụng ngăn Archive.org, nên cách duy nhất để chặn crawler là chặn user agent "archive.org_bot" hoặc chặn dải IP
  • Trong Traefik, có thể chặn user agent hoặc địa chỉ IP chỉ thông qua plugin bên thứ ba
  • Plugin bên thứ ba cần được cân nhắc khi cập nhật và có thể gây ra lỗ hổng bảo mật, nên không được ưu tiên
  • Có thể dùng middleware IPAllowList để chặn IP và cho phép tất cả các IP còn lại
  • Có thể tính toán dải IP; không tệ hơn cách chặn trực tiếp, nhưng vì chỉ nhìn thấy những IP còn lại nên không thể xem chính xác subnet nào đã bị chặn, nên không thật sự tinh tế

Ý kiến của GN+

  • Traefik dường như là một giải pháp reverse proxy hấp dẫn, bất kể có dùng container hay không. Đặc biệt, điểm mạnh là Traefik được viết bằng Golang và biên dịch thành một file nhị phân duy nhất, giúp triển khai và quản lý dễ dàng.
  • Tài liệu cũng rất đầy đủ, có vẻ rất hữu ích để hiểu các khái niệm của Traefik và tìm ví dụ cấu hình.
  • Các tính năng nâng cao như TLS passthrough hay hỗ trợ PROXY protocol cũng dường như được hỗ trợ tốt.
  • Tuy nhiên, ở phần xác thực dường như chưa có giải pháp nào thực sự hài lòng, có vẻ cần nỗ lực phát triển server auth riêng hoặc cải tiến dự án hiện có.
  • Chức năng chặn user agent hoặc IP cũng sẽ tốt hơn nếu được cung cấp mặc định, nhưng ngoại trừ việc dùng plugin bên ngoài thì dường như không có giải pháp nào tinh tế.
  • Traefik có đủ lý do để xem xét như một lựa chọn thay thế cho NGINX, đặc biệt nếu bạn thấy cấu hình NGINX quá phức tạp thì sự gọn gàng của Traefik sẽ rất hấp dẫn.

1 bình luận

 
GN⁺ 2024-05-06
Ý kiến trên Hacker News
  • So sánh ưu điểm và nhược điểm của Traefik
    • Ưu điểm: Chuyển từ NGINX sang Traefik vì tích hợp tự động Let's Encrypt
    • Nhược điểm: Tài liệu chưa hoàn chỉnh, logging cũng chưa tốt, và việc tái tạo chứng chỉ đôi khi thất bại gây gián đoạn môi trường production
    • Cuối cùng quay lại NGINX
  • Ý kiến ưa thích dùng Caddy thay cho Traefik
    • Caddyfile dễ quản lý hơn nhiều so với cấu hình YAML của Traefik
    • Hỗ trợ nhiều plugin (ví dụ: plugin Coraza WAF của Caddy)
  • Bàn về các trường hợp Traefik có thể có lợi thế hơn NGINX
    • Với môi trường host Docker quy mô nhỏ vài chục container, NGINX Proxy Manager cũng đã đủ
    • Với K3s, Traefik được đặt mặc định, nên thuận lợi để dựng nhanh một cụm K8s dùng cho thử nghiệm
  • Nếu đang cân nhắc chuyển từ Caddy sang Traefik
    • Ưu điểm của Caddy: cấu hình tự động dựa trên nhãn Docker, quản lý chứng chỉ TLS, cấu hình DNS tự động, v.v.
    • Nhược điểm của Caddy: khi workload khởi động lại, Caddy cũng khởi động lại hoàn toàn gây gián đoạn tạm thời dịch vụ, cấu hình chứng chỉ wildcard phức tạp
    • Có trải nghiệm tốt khi dùng Traefik trong môi trường K8s nên đang xem xét áp dụng cho dự án cá nhân
  • Kinh nghiệm chuyển sang Caddy vì cấu hình động và debug của Traefik khó khăn
    • Caddy gọn nhẹ, ít lớp nên việc cấu hình dễ hơn rất nhiều
  • Nhận ra ưu điểm của cấu hình tĩnh sau thời gian dùng Traefik dài hạn
    • Khó khăn của cấu hình động qua nhãn Docker và phiền phức khi debug
    • Tạo file cấu hình tĩnh đơn giản cho các kết hợp host/mục tiêu/cổng thông qua template engine
    • Tự động hóa tạo và triển khai file cấu hình bằng Ansible
  • So sánh với HAProxy
    • Đã dùng HAProxy hơn 10 năm và đã được hiện đại hóa với cấu hình động qua Runtime API, phù hợp hơn cho thời đại cloud
  • Ưu điểm và nhược điểm lớn nhất khi dùng Traefik
    • Ưu điểm: nhờ nhãn container nên cấu hình được truyền đến Traefik, gần như không cần chỉnh sửa cấu hình Traefik trực tiếp
    • Nhược điểm: phát âm đúng tên Traefik rất khó (muốn đọc là "trey-feek" v.v.)