Traefik API
Overview
The Traefik API gives you access to Traefik’s configuration and status. It is enabled by default in the static Traefik configuration but is often underused.
- Can be accessed through a URL like
traefik.localhost/api
- Provides data about routers, services, middlewares, and more
- Full API paths are needed to get proper results (e.g.,
/api/http/routers
) - Lets you monitor and manage Traefik programmatically.
Security Considerations
The Traefik API exposes critical configuration details, so it should be used carefully.
- Best used only in development or test environments
- If enabled in production, always secure with authorization middleware
- Restrict access by IP to trusted networks only
If the Traefik API is enabled in production, make sure you it secure with authorization middleware.
Traefik API Endpoints
The Traefik API lets you view and manage your Traefik setup through various endpoints. These endpoints provide information about routers, services, middlewares, and more.
Endpoint | Description |
---|---|
/api/http/routers | List all HTTP routers |
/api/http/services | Show all HTTP services |
/api/http/middlewares | Display middlewares |
/api/tcp/routers | List TCP routers |
/api/tcp/services | Show TCP services |
/api/udp/routers | List UDP routers |
/api/udp/services | Show UDP services |
You can access these endpoints via HTTP requests. For example, to get all HTTP routers:
curl http://traefik.localhost/api/http/routers
This will return a JSON response with details about your HTTP routers.
Lab: Viewing APIs
Github repo: joseeden/labs-traefik
This lab shows how to view Traefik API information using its HTTP endpoints.
To do the lab, clone the project repository from GitHub.
git clone https://github.com/joseeden/labs-traefik.git
cd labs-traefik/07-operations/01-traefik-api
Project structure:
07-operations
└── 01-traefik-api
├── docker-compose.yml
└── traefik.yml
Deploy the stack:
docker stack deploy -c docker-compose.yml traefik
To list routers:
curl -s http://localhost:8080/api/http/routers | jq
Expected output:
[
{
"entryPoints": [
"traefik"
],
"service": "api@internal",
"rule": "PathPrefix(`/api`)",
"priority": 2147483646,
"status": "enabled",
"using": [
"traefik"
],
"name": "api@internal",
"provider": "internal"
},
{
"entryPoints": [
"web"
],
"service": "catapp",
"rule": "Host(`catapp.localhost`)",
"status": "enabled",
"using": [
"web"
],
"name": "catapp@docker",
"provider": "docker"
},
{
"entryPoints": [
"traefik"
],
"middlewares": [
"dashboard_redirect@internal",
"dashboard_stripprefix@internal"
],
"service": "dashboard@internal",
"rule": "PathPrefix(`/`)",
"priority": 2147483645,
"status": "enabled",
"using": [
"traefik"
],
"name": "dashboard@internal",
"provider": "internal"
}
]
To list services:
curl -s http://localhost:8080/api/http/services | jq
Output:
[
{
"status": "enabled",
"usedBy": [
"api@internal"
],
"name": "api@internal",
"provider": "internal"
},
{
"loadBalancer": {
"servers": [
{
"url": "http://10.0.1.3:5000"
}
],
"passHostHeader": true
},
"status": "enabled",
"usedBy": [
"catapp@docker"
],
"serverStatus": {
"http://10.0.1.3:5000": "UP"
},
"name": "catapp@docker",
"provider": "docker",
"type": "loadbalancer"
},
{
"status": "enabled",
"usedBy": [
"dashboard@internal"
],
"name": "dashboard@internal",
"provider": "internal"
},
{
"status": "enabled",
"name": "noop@internal",
"provider": "internal"
}
]