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

Traefik API & 대시보드 문서

원문 보기 위키 갱신

Traefik API & 대시보드 문서 (Traefik API & Dashboard Documentation)

출처: Traefik API & Dashboard Documentation

본문

API & 대시보드 (API & Dashboard)

Traefik은 라우터, 서비스, 미들웨어 등의 설정을 비롯한 여러 정보를 API 엔드포인트를 통해 노출해요.

대시보드는 Traefik이 처리하는 현재 활성 라우트를 보여주는 중심 화면으로, 이 API에서 데이터를 가져와요.

대시보드 동작 화면 (The dashboard in action)

보안 (Security)

운영 환경에서 API와 대시보드를 활성화하는 것은 권장되지 않아요. 모든 구성 요소와 민감 데이터까지 노출되며, 이에 대한 접근은 관리자에게만 허용되어야 하거든요.

운영 환경에서는 최소한 인증과 권한 부여로 보호해야 해요.

정보 (Info)

API 포트를 공개적으로 노출하지 말고 내부 네트워크로 제한하는 것을 권장해요 (네트워크에 적용된 최소 권한(least privilege) 원칙과 같죠).

설정 예시 (Configuration Example)

대시보드를 활성화하려면:

파일 (YAML)

api: {}

파일 (TOML)

[api]

CLI

--api=true

대시보드를 노출하려면:

Kubernetes CRD

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-dashboard
spec:
  routes:
  - match: Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))
    kind: Rule
    services:
    - name: api@internal
      kind: TraefikService
    middlewares:
      - name: auth
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: auth
spec:
  basicAuth:
    secret: secretName # Kubernetes secret named "secretName"

Helm 차트 값 (values.yaml)

# Create an IngressRoute for the dashboard
ingressRoute:
  dashboard:
    enabled: true
    # Custom match rule with host domain
    matchRule: Host(`traefik.example.com`)
    entryPoints: ["websecure"]
    # Add custom middlewares : authentication and redirection
    middlewares:
      - name: traefik-dashboard-auth

# Create the custom middlewares used by the IngressRoute dashboard (can also be created in another way).
# /!\ Yes, you need to replace "changeme" password with a better one. /!\
extraObjects:
  - apiVersion: v1
    kind: Secret
    metadata:
      name: traefik-dashboard-auth-secret
    type: kubernetes.io/basic-auth
    stringData:
      username: admin
      password: changeme

  - apiVersion: traefik.io/v1alpha1
    kind: Middleware
    metadata:
      name: traefik-dashboard-auth
    spec:
      basicAuth:
        secret: traefik-dashboard-auth-secret

Docker

# Dynamic Configuration
labels:
  - "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
  - "traefik.http.routers.dashboard.service=api@internal"
  - "traefik.http.routers.dashboard.middlewares=auth"
  - "traefik.http.middlewares.auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"

Swarm

# Dynamic Configuration
deploy:
  labels:
    - "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
    - "traefik.http.routers.dashboard.service=api@internal"
    - "traefik.http.routers.dashboard.middlewares=auth"
    - "traefik.http.middlewares.auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"
    # Dummy service for Swarm port detection. The port can be any valid integer value.
    - "traefik.http.services.dummy-svc.loadbalancer.server.port=9999"

Consul Catalog

# Dynamic Configuration
- "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"

파일 (YAML)

# Dynamic Configuration
http:
  routers:
    dashboard:
      rule: Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))
      service: api@internal
      middlewares:
        - auth
  middlewares:
    auth:
      basicAuth:
        users:
          - "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
          - "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"

파일 (TOML)

# Dynamic Configuration
[http.routers.my-api]
  rule = "Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
  service = "api@internal"
  middlewares = ["auth"]

[http.middlewares.auth.basicAuth]
  users = [
    "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/",
    "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0",
  ]

설정 옵션 (Configuration Options)

API와 대시보드를 설정할 수 있어요:

  • Helm 차트에서: 대시보드를 활성화하는 Traefik 설치 커스터마이즈 옵션은 여기에서 찾을 수 있어요.

  • 아래에 설명된 Traefik 정적 설정에서.

| 필드 (Field) | 설명 (Description) | 기본값 (Default) | 필수 (Required) | | api | api/dashboard를 활성화해요. true로 설정하면 하위 옵션 api.dashboard도 true로 설정돼요. | false | 아니오 (No) | | api.basePath | API와 대시보드가 노출될 기본 경로(base path)를 정의해요. 이 옵션은 insecure 모드와 호환되지 않는다는 점에 주의하세요. | / | 아니오 (No) | | api.dashboard | 대시보드를 활성화해요. | true | 아니오 (No) | | api.debug | 디버깅과 프로파일링을 위한 추가 엔드포인트를 활성화해요. | false | 아니오 (No) | | api.disableDashboardAd | 대시보드의 광고를 비활성화해요. | false | 아니오 (No) | | api.insecure | traefik이라는 이름의 entryPoint에서 API와 대시보드를 활성화해요. 이 모드는 커스텀 API 기본 경로 옵션과 호환되지 않는다는 점에 주의하세요. | false | 아니오 (No) |

엔드포인트 (Endpoints)

다음 모든 엔드포인트는 GET HTTP 요청으로 접근해야 해요.

| 경로 (Path) | 설명 (Description) | | /api/http/routers | 모든 HTTP 라우터 정보를 나열해요. | | /api/http/routers/{name} | name으로 지정한 HTTP 라우터의 정보를 반환해요. | | /api/http/services | 모든 HTTP 서비스 정보를 나열해요. | | /api/http/services/{name} | name으로 지정한 HTTP 서비스의 정보를 반환해요. | | /api/http/middlewares | 모든 HTTP 미들웨어 정보를 나열해요. | | /api/http/middlewares/{name} | name으로 지정한 HTTP 미들웨어의 정보를 반환해요. | | /api/tcp/routers | 모든 TCP 라우터 정보를 나열해요. | | /api/tcp/routers/{name} | name으로 지정한 TCP 라우터의 정보를 반환해요. | | /api/tcp/services | 모든 TCP 서비스 정보를 나열해요. | | /api/tcp/services/{name} | name으로 지정한 TCP 서비스의 정보를 반환해요. | | /api/tcp/middlewares | 모든 TCP 미들웨어 정보를 나열해요. | | /api/tcp/middlewares/{name} | name으로 지정한 TCP 미들웨어의 정보를 반환해요. | | /api/udp/routers | 모든 UDP 라우터 정보를 나열해요. | | /api/udp/routers/{name} | name으로 지정한 UDP 라우터의 정보를 반환해요. | | /api/udp/services | 모든 UDP 서비스 정보를 나열해요. | | /api/udp/services/{name} | name으로 지정한 UDP 서비스의 정보를 반환해요. | | /api/entrypoints | 모든 엔트리포인트 정보를 나열해요. | | /api/entrypoints/{name} | name으로 지정한 엔트리포인트의 정보를 반환해요. | | /api/overview | HTTP, TCP 및 활성화된 기능·프로바이더에 대한 통계 정보를 반환해요. | | /api/support-dump | 익명화된 정적 설정과 런타임 설정을 담은 아카이브를 반환해요. | | /api/rawdata | 동적 설정, 오류, 상태 및 의존성 관계에 대한 정보를 반환해요. | | /api/version | Traefik 버전에 대한 정보를 반환해요. | | /debug/vars | expvar Go 문서를 참고하세요. | | /debug/pprof/ | pprof Index Go 문서를 참고하세요. | | /debug/pprof/cmdline | pprof Cmdline Go 문서를 참고하세요. | | /debug/pprof/profile | pprof Profile Go 문서를 참고하세요. | | /debug/pprof/symbol | pprof Symbol Go 문서를 참고하세요. | | /debug/pprof/trace | pprof Trace Go 문서를 참고하세요. |

기본 경로 설정 (Base Path Configuration)

기본적으로 Traefik은 API와 대시보드를 / 기본 경로 아래에 노출해요. api.basePath로 설정할 수 있고, 설정하면 모든 엔드포인트(api, dashboard, debug)가 그 경로를 사용해요.

대시보드 (Dashboard)

대시보드는 기본적으로 /dashboard/ 경로에서 사용할 수 있어요.

참고 (Note)

  • /dashboard/의 마지막 슬래시는 필수예요. 이 제한은 RedirectRegex 미들웨어로 완화할 수 있어요.

  • /에서 /dashboard/로의 리다이렉트도 있지만, 이 동작은 변경될 수 있고 라우팅 규칙을 복잡하게 만들 수 있으므로 의존하지 않는 것이 좋아요.

위 보안 섹션에서 언급했듯이 대시보드와 API 모두에 대한 접근을 보호하는 것이 중요해요. Traefik 안에 라우팅 설정을 정의해야 하는데, 이는 api@internal 서비스에 연결된 라우터를 설정하는 것을 포함해요. 이렇게 하면 다음이 가능해져요:

  • 미들웨어로 인증(basicAuth, digestAuth, forwardAuth)이나 허용 목록(allowlisting) 같은 보안 기능을 구현할 수 있어요.

  • Traefik을 통해 대시보드에 접근하기 위한 라우터 규칙을 정의할 수 있어요.

대시보드 라우터 규칙 (Dashboard Router Rule)

대시보드에 제대로 접근하려면 정의한 라우터 규칙이 /api와 /dashboard 경로를 대상으로 하는 요청을 일치시켜야 해요. 원하는 도메인의 모든 요청을 일치시키는 Host 기반 규칙을 쓰거나, 두 경로 접두사(prefix)를 모두 포함하는 규칙을 명시적으로 정의하는 것을 권장해요. 예시를 볼게요:

Host 규칙 (Host Rule)

# The dashboard can be accessed on http://traefik.example.com/dashboard/
rule = "Host(`traefik.example.com`)"

경로 접두사 규칙 (Path Prefix Rule)

# The dashboard can be accessed on http://example.com/dashboard/ or http://traefik.example.com/dashboard/
rule = "PathPrefix(`/api`) || PathPrefix(`/dashboard`)"

규칙 조합 (Combination of Rules)

# The dashboard can be accessed on http://traefik.example.com/dashboard/
rule = "Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"

운영 환경에서 Traefik OSS를 사용하고 계신가요? (Using Traefik OSS in Production?)

직장에서 Traefik을 사용하고 있다면, Traefik OSS에 엔터프라이즈급 API 게이트웨이 기능이나 상업적 지원을 추가하는 것을 고려해 보세요.

  • API 게이트웨이 데모 영상 보기 (Watch our API Gateway Demo Video)

  • 24/7/365 OSS 지원 요청 (Request 24/7/365 OSS Support)

Traefik OSS에 API 게이트웨이 기능을 추가하는 것은 빠르고 매끄러워요. 교체(rip and replace) 없이 모든 설정이 그대로 유지되며, 이 짧은 영상을 통해 실제 동작을 확인할 수 있어요.

더 알아보기 (Learn more)