Traefik은 리버스 프록시이자 로드 밸런서다. 외부 요청을 받아 도메인별로 분배하고, SSL 인증서를 자동 발급하고, 새 서비스를 자동 감지한다. 인프라의 관문이 하는 일을 해부한다.
Traefik(192.168.0.230)은 리버스 프록시(Reverse Proxy)이자 로드 밸런서(Load Balancer)다. 인프라에서 관문(Gateway) 역할을 수행한다.
리버스 프록시란 클라이언트와 백엔드 서버 사이에 위치하여, 클라이언트의 요청을 대신 받아 적절한 서버로 전달하는 중간자다. 사용자는 실제 서버의 IP 주소를 알 필요가 없다. gitlab.yourdomain.com에 접속하면 Traefik이 알아서 192.168.0.232로 연결해준다.
사용자는 도메인만 알면 된다.
나머지는 Traefik이 처리한다.
Nginx나 HAProxy 같은 전통적인 리버스 프록시와 달리 Traefik의 강점은 자동화에 있다. 설정 파일을 수동으로 편집하지 않아도 새 서비스가 뜨면 자동으로 라우팅 규칙이 생성된다. Docker 라벨이나 Consul 서비스 등록만으로 끝이다.
외부 요청을 도메인/경로 기반으로 백엔드 서버에 자동 분배한다. 하나의 IP에서 여러 서비스를 도메인으로 구분하여 운영할 수 있다.
Let's Encrypt와 연동하여 HTTPS 인증서를 자동으로 발급하고 갱신한다. 개발자가 인증서를 수동으로 발급하거나 만료일을 관리할 필요가 없다. 모든 도메인의 인증서가 한 곳에서 관리된다.
이것이 중앙 집중형 SSL 관리가 필수인 이유다. 여러 서버에서 각자 인증서를 발급하면 Let's Encrypt의 Rate Limit(주당 50개)에 걸릴 수 있고, 인증서 갱신 실패를 추적하기 어렵다.
Consul(233~235)과 연동하여 새 서비스가 등록되면 자동으로 라우팅 규칙을 생성한다. Docker 컨테이너에 라벨을 붙이거나, Consul에 서비스를 등록하면 Traefik이 이를 감지한다.
설정 파일을 수동으로 편집하고 Traefik을 재시작할 필요가 없다. 서비스가 뜨면 자동으로 접근 가능해진다.
동일한 역할을 하는 서버가 여러 대일 때 트래픽을 분산한다. Consul 클러스터(233~235)가 대표적인 예다. 3대의 Consul 서버에 요청을 고르게 분배하여 한 대에 부하가 집중되는 것을 방지한다.
서비스 코드를 수정하지 않고 프록시 레벨에서 다양한 기능을 처리한다.
인증 — 특정 서비스에 Basic Auth나 IP 화이트리스트 적용. Rate Limiting — 초당 요청 수 제한으로 남용 방지. 헤더 조작 — 보안 헤더 추가, CORS 설정. 이 모든 것이 백엔드 서비스의 코드 변경 없이 가능하다.
Traefik이 인프라의 관문이라면, 관문은 하나여야 한다. 두 개의 Traefik이 동일한 인프라를 바라보면 무엇이 일어나는가.
이것이 개발자 서버에 별도 Traefik을 설치하면 안 되는 핵심 이유다. 중앙 Traefik(230)에 라우팅 규칙을 추가하는 것이 정석이다.
Traefik의 역할을 이해했다면, 이제 개발자 서버에서 할 수 있는 것과 없는 것을 구분할 차례다.