14 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	title, description
| title | description | 
|---|---|
| Traefik API & Dashboard Documentation | Traefik Proxy exposes information through API handlers and showcase them on the Dashboard. Learn about the security, configuration, and endpoints of the APIs and Dashboard. Read the technical documentation. | 
The dashboard is the central place that shows you the current active routes handled by Traefik.
 
    Configuration Example
Enable the dashboard:
api: {}
[api]
--api=true
Expose the dashboard:
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"
# 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
# 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"
# 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"
# 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"
# 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"
# 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
The API and the dashboard can be configured:
- In the Helm Chart: You can find the options to customize the Traefik installation enabing the dashboard here.
- In the Traefik Static Configuration as described below.
| Field | Description | Default | Required | 
|---|---|---|---|
| api | Enable api/dashboard. When set to true, its sub optionapi.dashboardis also set to true. | false | No | 
| api.dashboard | Enable dashboard. | false | No | 
| api.debug | Enable additional endpoints for debugging and profiling. | false | No | 
| api.disabledashboardad | Disable the advertisement from the dashboard. | false | No | 
| api.insecure | Enable the API and the dashboard on the entryPoint named traefik. | false | No | 
Endpoints
All the following endpoints must be accessed with a GET HTTP request.
| Path | Description | 
|---|---|
| /api/http/routers | Lists all the HTTP routers information. | 
| /api/http/routers/{name} | Returns the information of the HTTP router specified by name. | 
| /api/http/services | Lists all the HTTP services information. | 
| /api/http/services/{name} | Returns the information of the HTTP service specified by name. | 
| /api/http/middlewares | Lists all the HTTP middlewares information. | 
| /api/http/middlewares/{name} | Returns the information of the HTTP middleware specified by name. | 
| /api/tcp/routers | Lists all the TCP routers information. | 
| /api/tcp/routers/{name} | Returns the information of the TCP router specified by name. | 
| /api/tcp/services | Lists all the TCP services information. | 
| /api/tcp/services/{name} | Returns the information of the TCP service specified by name. | 
| /api/tcp/middlewares | Lists all the TCP middlewares information. | 
| /api/tcp/middlewares/{name} | Returns the information of the TCP middleware specified by name. | 
| /api/udp/routers | Lists all the UDP routers information. | 
| /api/udp/routers/{name} | Returns the information of the UDP router specified by name. | 
| /api/udp/services | Lists all the UDP services information. | 
| /api/udp/services/{name} | Returns the information of the UDP service specified by name. | 
| /api/entrypoints | Lists all the entry points information. | 
| /api/entrypoints/{name} | Returns the information of the entry point specified by name. | 
| /api/overview | Returns statistic information about HTTP, TCP and about enabled features and providers. | 
| /api/rawdata | Returns information about dynamic configurations, errors, status and dependency relations. | 
| /api/version | Returns information about Traefik version. | 
| /debug/vars | See the expvar Go documentation. | 
| /debug/pprof/ | See the pprof Index Go documentation. | 
| /debug/pprof/cmdline | See the pprof Cmdline Go documentation. | 
| /debug/pprof/profile | See the pprof Profile Go documentation. | 
| /debug/pprof/symbol | See the pprof Symbol Go documentation. | 
| /debug/pprof/trace | See the pprof Trace Go documentation. | 
Dashboard
The dashboard is available at the same location as the API, but by default on the path  /dashboard/.
!!! note
- The trailing slash `/` in `/dashboard/` is mandatory. This limitation can be mitigated using the the [RedirectRegex Middleware](../../middlewares/http/redirectregex.md).
  - There is also a redirect from the path `/` to `/dashboard/`, but you should not rely on this behavior, as it is subject to change and may complicate routing rules.
To securely access the dashboard, you need to define a routing configuration within Traefik. This involves setting up a router attached to the service api@internal, which allows you to:
- 
Implement security features using middlewares, such as authentication (basicAuth, digestAuth, forwardAuth) or allowlisting. 
- 
Define a router rule for accessing the dashboard through Traefik. 
Dashboard Router Rule
To ensure proper access to the dashboard, the router rule you define must match requests intended for the /api and /dashboard paths.
We recommend using either a Host-based rule to match all requests on the desired domain or explicitly defining a rule that includes both path prefixes.
Here are some examples:
# The dashboard can be accessed on http://traefik.example.com/dashboard/
rule = "Host(`traefik.example.com`)"
# The dashboard can be accessed on http://example.com/dashboard/ or http://traefik.example.com/dashboard/
rule = "PathPrefix(`/api`) || PathPrefix(`/dashboard`)"
# The dashboard can be accessed on http://traefik.example.com/dashboard/
rule = "Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
{!traefik-for-business-applications.md!}