Traefik 프록시로 서비스 노출하기
본문
Traefik 프록시로 서비스 노출하기
이 섹션에서는 Traefik 프록시로 서비스를 안전하게 노출하는 방법을 안내해요. HTTP와 HTTPS 트래픽을 여러분의 서비스로 라우팅하는 법, 보안 기능을 추가하는 법, 그리고 고급 로드 밸런싱을 구현하는 법을 배우게 됩니다.
이 가이드에서 배울 내용
이 가이드들을 따라 하다 보면 다음을 할 수 있게 돼요:
-
Gateway API와 IngressRoute로 HTTP 트래픽을 서비스로 라우팅하기
-
요청을 지시하는 라우팅 규칙 구성하기
-
TLS로 HTTPS 활성화하기
-
보안 미들웨어 추가하기
-
Let's Encrypt로 인증서 자동 생성하기
-
세션 유지를 위한 스티키 세션 구현하기
플랫폼별 가이드
여러분의 환경에 맞춘 자세한 단계는 자신의 플랫폼 가이드를 따라 하면 돼요:
-
Kubernetes
-
Docker
-
Docker Swarm
고급 사용 사례
gRPC 서비스 노출하기
Traefik 프록시는 별도의 설정 없이도 gRPC 애플리케이션을 지원해요. HTTP(h2c)나 HTTPS 중 어떤 방식으로든 gRPC 서비스를 노출할 수 있습니다.
HTTP(h2c) 사용하기
암호화되지 않은 gRPC 통신을 하려면, 서비스가 h2c:// 프로토콜 스킴을 쓰도록 구성해요:
http:
routers:
grpc-router:
service: grpc-service
rule: Host(`grpc.example.com`)
services:
grpc-service:
loadBalancer:
servers:
- url: h2c://backend:8080
참고
레이블을 쓰는 프로바이더(Docker, Kubernetes)에서는 다음처럼 스킴을 지정해요:
traefik.http.services..loadbalancer.server.scheme=h2c
HTTPS 사용하기 암호화된 gRPC 통신에는 표준 HTTPS URL을 쓰면 돼요. Traefik은 TLS 위의 HTTP/2로 gRPC 백엔드와 통신해서요:
http:
routers:
grpc-router:
service: grpc-service
rule: Host(`grpc.example.com`)
tls: {}
services:
grpc-service:
loadBalancer:
servers:
- url: https://backend:8080
Traefik이 프로토콜 협상을 자동으로 처리해 줘요. 필요하면 ServersTransport를 써서 백엔드용 TLS 인증서를 구성하면 됩니다.
WebSocket 서비스 노출하기
Traefik 프록시는 WebSocket(WS)과 WebSocket Secure(WSS) 연결을 기본으로 지원해요. 표준 HTTP 라우팅 외에 특별한 설정이 필요하지 않습니다.
기본 WebSocket WebSocket 서버를 가리키는 라우터와 서비스를 구성해요. Traefik이 WebSocket 업그레이드를 자동으로 감지하고 처리해 줍니다:
http:
routers:
websocket-router:
rule: Host(`ws.example.com`)
service: websocket-service
services:
websocket-service:
loadBalancer:
servers:
- url: http://websocket-backend:8000
WebSocket Secure(WSS)
암호화된 WebSocket 연결에는 라우터에서 TLS를 활성화해요. 클라이언트는 wss://로 접속하되, 백엔드는 암호화 여부를 원하는 대로 고를 수 있습니다:
http:
routers:
websocket-secure-router:
rule: Host(`wss.example.com`)
service: websocket-service
tls: {}
services:
websocket-service:
loadBalancer:
servers:
- url: http://websocket-backend:8000 # SSL termination at Traefik
# OR
# - url: https://websocket-backend:8443 # End-to-end encryption
Traefik은 Origin, Sec-WebSocket-Key, Sec-WebSocket-Version 같은 WebSocket 헤더를 그대로 보존해요. 오리진 검증이나 다른 요구로 헤더를 수정해야 한다면 Headers 미들웨어를 쓰면 됩니다.