traefik
은 haproxy
, nginx
와 같이 proxy를 해주는 강력한 tool이다.
Docker 및 k8s와 같은 container base의 platform에서도 강력한 기능은 자랑하며 쉽게 호환되게 만들어 놨다.
기본적으로 L7(http)로 사용하는경우가 거의 다 이며, 특수한 경우 L4(TCP)로 사용도 가능하다.
router
, middleware
와 같은 용어가 어색할 수 있으머 구성에 어려움을 느낄 수 있지만, web server 및 header를 만지던 사람에게는 나름대로 쉬울 수 있다고 생각한다.
CNAME으로 등록되어 있는 subdomain들에 대해서 그대로 사용이 가능해야하며, 안쓰는 모든 subdomain들에 대해서 어떠한 URL로 forward 시키는 방법에 대해 찾아보다 official page에 나와있는 내용이 있어 참고하였다.
사용해보니 uptime check 시 모든 traffic이 main domain을 향하고 있으니 실제로 subdomain의 service에 대해서 확인이 안된다는 단점이 있다.
이것을 우회하려면 각각의 service에 대해서 직접적으로 port 또는 service 기반으로 확인 해야한다.
Title에 regexp라고 적어놓은 것과 같이 traefik
에서는 regular express를 지원을 한다.
여기서 regexp는 **“.domain.com”**에서 **“”**에 대해서 처리를 해야해서 필요하다.
또한 여기서 priority
부분이 나오는데 이것은 굉장히 중요하다.
router
에는 priority(우선순위)가 존재하는데, 이 우선 순위는 숫자가 높을수록 순위가 높다.
traefik
에서 file로 처리도 가능하지만, docker로 구성하는 마당에 main traffic은 docker의 label 처리가 깔끔하다고 느끼게 되어 label로 처리하게 되었다.
아래의 예시는 docker-compose.yml
의 일부이며 실제로 사용하는 labels
이다.
## docker-compose.yml
#--------------------- 생략 ---------------------#
labels:
traefik.enable: true
traefik.docker.network: proxy
# ...
# host-redirect
traefik.http.routers.host-redirect.rule: Host(`$HOST_URL`) || HostRegexp(`^.+\\.$HOST_URL$`)
traefik.http.routers.host-redirect.priority: 1
traefik.http.routers.host-redirect.tls: true
traefik.http.routers.host-redirect.tls.options: $TLS_OPTION
traefik.http.routers.host-redirect.entrypoints: websecure
traefik.http.routers.host-redirect.middlewares: host-redirect@docker
traefik.http.middlewares.host-redirect.redirectregex.regex: ^.+
traefik.http.middlewares.host-redirect.redirectregex.replacement: https://kuma.$HOST_URL
traefik.http.middlewares.host-redirect.redirectregex.permanent: true
#--------------------- 생략 ---------------------#