Architecture Overview
- traefik은 모든 요청을 인터셉트하고 해당하는 백엔드 서버에 라우트함
- 전통적인 리버스 프록시들과는 다르게, service discovery를 사용하여 동적으로 서비스를 구성함
- 별도의 구성 파일을 유지 관리하고 동기화할 필요가 없음
- 실시간으로 자동으로 발생 (다시 시작하거나 연결 중단 없음)
- 모든 메이저 프로토콜을 지원함
- 주요 클러스터 기술과 호환됨 (k8s, docker, docker swarm, aws, …)
- 로드 밸런싱, rate-limiting, circuit-breaker, mirroring, authention 등의 다양한 미들웨어 제공
Concepts
Edge Router
- 플랫폼의 문
- 들어오는 모든 요청을 가로채고 라우팅함
- 어떤 서비스가 어떤 요청을 처리할지 결정하는 모든 로직과 규칙을 알고 있음
Auto Service Discovery
- 서비스가 배포될 때, traefik에 서비스가 처리할 수 있는 요청의 특성을 알려주는 정보를 첨부
- 서비스가 배포될 때, traefik이 즉시 이를 감지하고 실시간으로 라우팅 규칙을 업데이트
- 마찬가지로 서비스가 인프라에서 제거되면 해당 경로도 그에 따라 삭제됨
Traefik은 클러스터 API를 사용하여 서비스를 검색하고 첨부된 정보를 읽을 수 있습니다. Traefik에서 이러한 커넥터는 Traefik에 구성을 제공하기 때문에 provider라고 합니다.
Routing & Load Balancing
- Traefik을 시작할 때, Entrypoint를 정의
- Entrypoint에 연결된 라우터는 들어오는 요청을 분석하여 rules 세트에 매칭되는지 확인
- 매칭된다면 Service에 전달하기 전에 Middleware를 사용하여 요청을 변환
- 요청을 서비스에 전달
- Provider 는 인프라에 있는 서비스(IP, 상태 등)를 검색합니다.
- Entrypoint 는 들어오는 트래픽(포트, ...)을 수신합니다.
- Router 는 요청(호스트, 경로, 헤더, SSL, ...)을 분석합니다.
- Service 는 요청을 서비스로 전달합니다(로드 밸런싱, ...)
- Middleware 는 요청을 업데이트하거나 요청(인증, 속도 제한, 헤더 등)을 기반으로 결정을 내릴 수 있습니다.
Service
Service는 들어오는 요청을 처리할 실제 서비스에 도달하는 방법을 구성
Configuring HTTP Services
- Servers Load Balancer
- Load-Balancing
- Stick sessions
- Health check (k8s X)
- …
- ServersTransport
- ServerName
- Certificates
- …
- Weighted Round Robin
- Mirroring
- Failover (only File provider)
Middlewares
- 요청이 서비스로 전송되기 전(또는 서비스의 응답이 클라이언트로 전송되기 전에) 요청을 조정하는 수단
- 몇 가지 사용 가능한 미들웨어가 있으며 일부는 요청, 헤더를 수정할 수 있고 일부는 리디렉션을 담당하고 일부는 인증을 추가하는 등의 작업을 수행
- 동일한 프로토콜을 사용하는 미들웨어는 모든 시나리오에 맞게 체인으로 결합될 수 있음
HTTP middlewares
- BasicAuth (user/pwd)
- Buffering
- CircuitBreaker
- Compress
- DigestAuth
- Errors
- ForwardAuth
- IpWhitelist
- InFlightReq
- Ratelimit
- Retry
- …