본문 바로가기
WIKI 기술 지식 베이스

Traefik Tailscale 문서

원문 보기 위키 갱신

Traefik Tailscale 문서 (Traefik Tailscale Documentation)

출처: 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일 전에 인증서 갱신을 시작해요.

더 알아보기 (Learn more)