1P by neo 13일전 | favorite | 댓글 1개

컨테이너를 사용하지 않더라도 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의 간결함이 매력적일 것임.
Hacker News 의견
  • Traefik에 대한 장단점 비교
    • 장점: Let's Encrypt 자동 통합으로 인해 NGINX에서 Traefik으로 마이그레이션함
    • 단점: 문서화가 잘 되어 있지 않고 로깅도 부족하며 인증서 재생성이 간헐적으로 실패해 프로덕션 장애를 일으킴
    • 결국 다시 NGINX로 돌아감
  • Traefik 대신 Caddy 사용을 선호하는 의견
    • Caddyfile이 Traefik의 YAML 설정보다 관리하기 훨씬 쉬움
    • 다양한 플러그인 지원 (예: Caddy의 Coraza WAF 플러그인)
  • Traefik이 NGINX 대비 장점을 가질만한 사용 사례에 대한 논의
    • 컨테이너 몇 십개 정도의 소규모 Docker 호스트 환경에서는 NGINX Proxy Manager로도 충분함
    • K3s에서 기본으로 Traefik이 설정되어 빠르게 K8s 클러스터를 테스트용으로 구성하는데 유리함
  • Caddy에서 Traefik으로 전환을 고려 중인 경우
    • Caddy의 장점: Docker 레이블 기반 자동 설정, TLS 인증서 관리, DNS 자동 설정 등
    • Caddy의 단점: 워크로드 재시작시 Caddy가 완전히 재시작되어 일시적으로 서비스 중단됨, 와일드카드 인증서 설정이 복잡함
    • K8s 환경에서 Traefik을 사용해본 경험이 좋아 개인 프로젝트에도 적용 검토 중
  • Traefik의 동적 설정 및 디버깅의 어려움으로 인해 Caddy로 전환한 경험담
    • Caddy가 간결하고 레이어가 적어 설정이 훨씬 쉬움
  • Traefik을 오랫동안 사용하면서 정적 설정의 장점을 깨달음
    • Docker 레이블을 통한 동적 설정의 어려움과 디버깅의 번거로움
    • 템플릿 엔진을 통해 호스트/타겟/포트 조합의 간단한 정적 설정 파일 생성
    • Ansible로 설정 파일 생성 및 배포 자동화
  • HAProxy와의 비교
    • 10년 이상 HAProxy를 사용해왔으며 런타임 API를 통한 동적 설정 등 클라우드 시대에 맞게 현대화됨
  • Traefik 사용시 가장 큰 장점과 단점
    • 장점: 컨테이너 레이블을 통해 설정이 전달되어 Traefik 설정 자체를 거의 수정할 필요가 없음
    • 단점: Traefik의 정확한 발음을 알기 어려움 ("trey-feek" 등으로 발음하고 싶어짐)