컨테이너를 사용하지 않더라도 Traefik을 살펴봐야 하는 이유
Traefik이 알려진 점
- Traefik은 마이크로서비스 세계를 돕는 것이 목표임
- 많은 유튜버들이 Docker나 Kubernetes와 같은 컨테이너 인프라를 소유하고 있다고 공유함
- Traefik은 컨테이너로 실행되며, Docker 소켓을 Traefik 컨테이너에 마운트하여 Traefik을 사용하여 노출하려는 다른 컨테이너를 자동 감지할 수 있음
- 라벨을 통해 특정 컨테이너에 프록시 동작을 구성할 수 있음
- Traefik은 Let's Encrypt에서 TLS 인증서를 자동으로 요청하고 새 컨테이너의 존재를 감지하는 즉시 서비스를 사용할 수 있게 함
컨테이너를 사용하지 않는 경우에도 Traefik이 유용한 이유
일반적인 오해: 컨테이너 엔진이 필요하지 않음
- Traefik은 컨테이너 엔진에서 실행될 필요가 없으며, 서비스도 컨테이너 엔진에서 실행될 필요가 없음
- Traefik은 Golang으로 작성되었으며 단일 실행 파일로 컴파일됨
- Golang으로 작성되고 단일 바이너리로 컴파일되는 소프트웨어를 만나면 정말 좋은 느낌이 듦
- 배포가 쉽고 완전한 제어를 유지할 수 있음
일반적인 오해: 설정 파일도 지원함
- 컨테이너를 사용하지 않는 경우 컨테이너 라벨을 사용할 수 없지만, 라벨은 혼란스럽고 읽기 어려움
- Traefik은 설정 파일로도 구성할 수 있음
- Traefik은 인증서 공급자(예: Let's Encrypt)와 엔트리 포인트(Traefik이 수신 대기하는 포트)가 포함된 "정적" 구성과 라우터, 서비스 및 미들웨어가 포함된 "동적" 구성으로 구성을 분할함
- Traefik은 파일 시스템 이벤트를 수신하고 동적 부분을 핫 리로드할 수 있음
문서화가 잘되어 있음
- Traefik이 기반으로 하는 모든 개념을 명확하게 설명함
- 관련 페이지 시작 부분에서 선택한 인스턴스 구성 방법에 대한 구성 예제가 있음
- 문서는 대부분의 요구 사항을 다룸
- 사이드바가 도움이 됨
Traefik은 견고하고 잘 설계된 것으로 보임
- Traefik은 구성이 이치에 맞지 않으면 경고하며 아직 무작위 문제가 발생하지 않음
- Traefik은 기본적으로 많은 로그를 기록하지 않는 것 같지만, 요청이 수행되는 방식을 쉽게 이해할 수 있으며 좌절하지 않고 빠르게 시작할 수 있음
정말 마음에 드는 기능
TLS 전달 및 PROXY 프로토콜
- Traefik은 TLS 전달 및 HAProxy의 PROXY 프로토콜(입력 및 출력)을 지원함
- TLS 전달은 자체 TLS 인증서를 제공하는 웹 서비스로 트래픽을 전달할 수 있음을 의미함
- 프록시에서 TLS를 종료하지 않고도 서비스에서 직접 Let's Encrypt에서 요청할 수 있음
- PROXY 프로토콜은 사용자가 먼저 프록시에 도달하여 손실되는 정보를 더 안전하게 전송하는 방법임
- PROXY 프로토콜은 대상 서비스에서도 지원해야 하지만 Apache2와 Nginx(따라서 PHP)의 경우에는 그렇고 프로토콜을 지원하는 서비스 목록이 증가하고 있음
Traefik 사용 시 아쉬운 점
인증
- NGINX에서는 Vouch Proxy를 사용하여 Azure AD로 특정 서비스를 보호함
- Traefik은 NGINX의 인증과 유사한 ForwardAuth를 지원하지만, Vouch Proxy는 아직 Traefik에서 작동하지 않음
- Keycloak 인스턴스를 롤아웃하고 AAD와 통합한 다음 ForwardAuth에 사용할 수 있지만, 해당 Keycloak 인스턴스를 안전하고 최신 상태로 유지하고 먼저 설정해야 함
- traefik-forward-auth는 자주 추천되지만 2020년 6월에 마지막 업데이트가 있었고 개발자가 GitHub에서 사라졌으며 종속성을 업데이트해야 함
- 과거에 oauth2-proxy에 대해 나쁜 경험이 있었음
- HTTP2/3, 시간 초과, 본문 크기 및 WebSocket과 같은 것들은 사용자와 서비스 사이의 모든 프록시에서 구성이 필요하므로 프록시에 프록시하는 것은 너무 오류가 발생하기 쉬움
- Traefik ForwardAuth는 간단해 보이므로 AAD와 통합하기 위한 자체 간단한 도구를 작성하거나 traefik-forward-auth를 포크하고 감사한 다음 종속성을 업데이트해야 함
사용자 에이전트 및 IP 주소 차단
- archive.org에서 내부 서비스를 보관하는 것을 원하지 않음
- robots.txt 및 유사한 헤더는 Archive.org의 금지에 효과가 없으므로 크롤러를 차단하는 방법은 "archive.org_bot" 사용자 에이전트를 차단하거나 IP 범위를 차단하는 것뿐임
- Traefik에서는 타사 플러그인을 통해서만 사용자 에이전트 또는 IP 주소를 차단할 수 있음
- 타사 플러그인은 업데이트 시 염두에 두어야 하며 보안 취약성을 유발할 수 있으므로 선호하지 않음
- IPAllowList 미들웨어를 사용하여 IP를 차단하고 차단하려는 IP를 제외한 모든 것을 허용할 수 있음
- IP 범위를 계산할 수 있으며 직접 차단하는 것보다 나쁘지 않지만 남은 것만 보고 정확히 차단된 서브넷을 볼 수 없으므로 매우 우아하게 느껴지지는 않음
GN+의 의견
- Traefik은 컨테이너 사용 여부와 관계없이 매력적인 리버스 프록시 솔루션으로 보임. 특히 Golang으로 작성되고 단일 실행 파일로 컴파일되어 배포와 관리가 용이한 점이 장점임.
- 문서화도 잘 되어 있어서 Traefik의 개념을 이해하고 구성 예제를 찾는데 큰 도움이 될 것 같음.
- TLS passthrough나 PROXY 프로토콜 지원 등 고급 기능도 잘 지원하는 것으로 보임.
- 다만 인증 부분에서는 아직 만족스러운 솔루션이 없는 듯한데, 자체 인증 서버를 개발하거나 기존 프로젝트를 개선하는 노력이 필요해 보임.
- 사용자 에이전트나 IP 차단 기능도 기본으로 제공되면 좋겠지만, 외부 플러그인을 사용하는 것 외에는 우아한 방법이 없어 보임.
- NGINX의 대안으로 Traefik을 검토해 볼만한 가치가 충분히 있어 보임. 특히 NGINX의 설정이 복잡하다고 느끼는 사용자라면 Traefik의 간결함이 매력적일 것임.