Traefik Tailscale 문서
Traefik Tailscale 문서 (Traefik Tailscale Documentation)
본문
Tailscale
내부 Tailscale 서비스를 위한 TLS 인증서를 프로비저닝해요.
서비스를 TLS로 보호하려면 공개 인증 기관(CA)의 인증서가 필요해요. Tailscale은 VPN 역할 외에도 Tailscale 네트워크의 머신을 위한 인증서를 제공할 수 있어요.
구성 예시 (Configuration Example)
Tailscale 데몬에서 TLS 인증서를 얻으려면 아래와 같이 Tailscale 인증서 리졸버를 구성해야 해요.
Tailscale 인증서 해석 활성화
File (YAML)
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
certificatesResolvers:
myresolver:
tailscale: {}
File (TOML)
[entryPoints]
[entryPoints.web]
address = ":80"
[entryPoints.websecure]
address = ":443"
[certificatesResolvers.myresolver.tailscale]
CLI
--entrypoints.web.address=:80
--entrypoints.websecure.address=:443
# ...
--certificatesresolvers.myresolver.tailscale=true
라우터 규칙에서 도메인 가져오기 예시 (Domain from Router's Rule Example)
Docker & Swarm
labels:
- traefik.http.routers.blog.rule=Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`)
- traefik.http.routers.blog.tls.certresolver=myresolver
Docker (Swarm)
deploy:
labels:
- traefik.http.routers.blog.rule=Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`)
- traefik.http.routers.blog.tls.certresolver=myresolver
Kubernetes
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: blogtls
spec:
entryPoints:
- websecure
routes:
- match: Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`)
kind: Rule
services:
- name: blog
port: 8080
tls:
certResolver: myresolver
File (YAML)
## Dynamic configuration
http:
routers:
blog:
rule: "Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`)"
tls:
certResolver: myresolver
File (TOML)
## Dynamic configuration
[http.routers]
[http.routers.blog]
rule = "Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`)"
[http.routers.blog.tls]
certResolver = "myresolver"
라우터의 tls.domain에서 도메인 가져오기 예시 (Domain from Router's tls.domain Example)
Docker & Swarm
labels:
- traefik.http.routers.blog.rule=Path(`/metrics`)
- traefik.http.routers.blog.tls.certresolver=myresolver
- traefik.http.routers.blog.tls.domains[0].main=monitoring.yak-bebop.ts.net
Docker (Swarm)
deploy:
labels:
- traefik.http.routers.blog.rule=Path(`/metrics`)
- traefik.http.routers.blog.tls.certresolver=myresolver
- traefik.http.routers.blog.tls.domains[0].main=monitoring.yak-bebop.ts.net
Kubernetes
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: blogtls
spec:
entryPoints:
- websecure
routes:
- match: Path(`/metrics`)
kind: Rule
services:
- name: blog
port: 8080
tls:
certResolver: myresolver
domains:
- main: monitoring.yak-bebop.ts.net
File (YAML)
http:
routers:
blog:
rule: "Path(`/metrics`)"
tls:
certResolver: myresolver
domains:
- main: "monitoring.yak-bebop.ts.net"
File (TOML)
## Dynamic configuration
[http.routers]
[http.routers.blog]
rule = "Path(`/metrics`)"
[http.routers.blog.tls]
certResolver = "myresolver"
[[http.routers.blog.tls.domains]]
main = "monitoring.yak-bebop.ts.net"
인증서 리졸버 참조하기 (Referencing a certificate resolver)
인증서 리졸버를 정의한다고 해서 라우터가 자동으로 그 리졸버를 사용하게 되는 건 아니에요. 리졸버를 사용하려는 각 라우터나 엔트리포인트는 반드시 명시적으로 그 리졸버를 참조해야 합니다.
도메인 정의 (Domain Definition)
인증서 리졸버는 라우터에서 추론한 도메인 이름 집합에 대해 인증서를 요청하는데, 그 규칙은 다음과 같아요.
- 라우터에 tls.domains 옵션이 설정되어 있으면, 인증서 리졸버는 tls.domains의 main 옵션에서 이 라우터의 도메인 이름을 파생합니다.
- 그렇지 않으면 인증서 리졸버는 라우터의 규칙에서 Host() 또는 HostSNI() 매처에서 도메인 이름을 파생합니다.
Tailscale 도메인 형식 (Tailscale Domain Format)
도메인은 Tailscale 전용 도메인, 즉 machine-name.domains-alias.ts.net 형식인 경우에만 고려됩니다.
Tailscale 인증서 갱신 (Tailscale Certificates Renewal)
Traefik은 가져온 각 Tailscale 인증서의 만료일을 자동으로 추적하고, Tailscale 데몬의 갱신 정책에 맞춰 만료 14일 전에 인증서 갱신을 시작해요.