Hey folks
Trying to get a docker-compose development setup working which mimics our k8s deployed Traefik.
Issue:
Authorization: Bearer is passed through to the underlying service
How it should work. Icons show what is working and what not given the current docker-compose yaml files:
- jwt middleware extracts token values specific x-headers from a given jwks.json
- rewrite /cases/v1/health to localhost:4000/docs (without jwt middleware)
- rewrite /cases/v1/docs to localhost:4000/docs (without jwt middleware)
- rewrite /cases/v1/* to localhost:4000/ (with jwt middleware)
it asks for authorization, but passes the Bearer
- traefik dashboard reachable under localhost:8091
In the log output (see details sections) of "configuration received" it clearly states that headers get redirected and no mention of jwt middleware in the last one, so it is misconfigured and I am not able to figure out why or what to change. but i also see that configwatcher receiving three configs .. the first shows jwt-middleware, but apparently its not used later
services:
api-gateway:
image: traefik:v3.2
command:
- "--api.dashboard=true"
- "--api.insecure=true"
- "--accesslog=true"
- "--accesslog.bufferingsize=100"
- "--entrypoints.web.address=:${MOCK_API_GATEWAY_DOCKER_COMPOSE_HOST_PORT:-4001}"
- "--entrypoints.dashboard.address=:8091"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=true"
- "--providers.file.filename=/docker-jwt-dynamic.yaml"
- "--experimental.plugins.jwt.moduleName=github.com/traefik-plugins/traefik-jwt-plugin"
- "--experimental.plugins.jwt.version=v0.9.0"
- "--log.level=DEBUG"
ports:
- "${MOCK_API_GATEWAY_DOCKER_COMPOSE_HOST_PORT:-4001}:${MOCK_API_GATEWAY_DOCKER_COMPOSE_HOST_PORT:-4001}"
- "8091:8091"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- ./docker-jwt-dynamic.yaml:/docker-jwt-dynamic.yaml
environment:
- MOCK_API_GATEWAY_JWKS_URL=${MOCK_API_GATEWAY_JWKS_URL:-'http://localhost:8000/.well-known/jwks.json'}
- TZ=Europe/Berlin
app:
container_name: case-ms
build:
context: .
dockerfile: ./docker-build/dev.Dockerfile
ports:
- '${APP_DOCKER_COMPOSE_HOST_PORT}:${APP_PORT}'
env_file:
- .env
volumes:
- ./:/app
- /app/node_modules
# depends_on:
# - mysql
labels:
- "traefik.isDevelopment=true"
- "traefik.enable=true"
# - "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
- "traefik.http.routers.whoami.entrypoints=web"
# General route prefix
- "traefik.http.routers.cases.rule=PathPrefix(`/cases/v1`)"
# Define middleware for JWT
- "traefik.http.middlewares.rewrite-api-prefix.replacepathregex.regex=^/[a-z-]+/v1/?(.*)"
- "traefik.http.middlewares.rewrite-api-prefix.replacepathregex.replacement=/$1"
- "traefik.http.middlewares.rewrite-docs-prefix.replacepathregex.regex=^/[a-z-]+/v1/docs/?(.*)"
- "traefik.http.middlewares.rewrite-docs-prefix.replacepathregex.replacement=/docs/$1"
- "traefik.http.middlewares.rewrite-health-prefix.replacepathregex.regex=^/[a-z-]+/v1/health/?(.*)"
- "traefik.http.middlewares.rewrite-health-prefix.replacepathregex.replacement=/health/$1"
- "traefik.http.routers.cases.middlewares=jwt-middleware@file,rewrite-api-prefix@docker"
# Exclude JWT middleware for docs route
- "traefik.http.routers.cases-v1-docs.rule=PathPrefix(`/cases/v1/docs`)" # Added for docs route
- "traefik.http.routers.cases-v1-docs.middlewares=rewrite-docs-prefix@docker" # No JWT middleware for docs route
# Expose to port
- "traefik.http.services.cases-service.loadbalancer.server.port=${APP_PORT}"
# add CORS
- "traefik.http.middlewares.testheader.headers.accessControlAllowMethods=*"
- "traefik.http.middlewares.testheader.headers.accessControlAllowOriginList=*"
- "traefik.http.middlewares.testheader.headers.accessControlAllowHeaders=*"
# mysql:
# container_name: case-mysql
# ...
volumes:
# mysql_data_case_ms:
docker-jwt-dynamic.yaml:
driver: local
networks:
traefik-network:
driver: bridge
docker-jwt-dynamic.yaml
http:
middlewares:
jwt-middleware:
plugin:
jwt:
jwks_url: "${MOCK_API_GATEWAY_JWKS_URL:-http://localhost:8000/.well-known/jwks.json}"
required: true
auth_header: "Authorization"
auth_type: "Bearer"
strip_header: true # Add this to strip the original Bearer token from the headers
jwt_headers:
X-Subject: "sub"
X-Tenant-Id: "tenant_id"
X-Projects: "projects"
X-Scopes: "scopes"
claims:
- "sub"
- "tenant_id"
- "projects"
- "scopes"
For reference, our working kubernetes setup, just the Ingress and other k8s specific parts are left out:
k8s Traefik Kustomize yaml content
## Rewrite Middlewares
# for default setup which are reachable through /api
# nestjs: app.setGlobalPrefix('api') in the main.ts file
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: rewrite-api-prefix
namespace: api-gateway
spec:
replacePathRegex:
regex: ^\/[a-z-]+\/v1\/?(.*)
replacement: /$1
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: rewrite-docs-prefix
namespace: api-gateway
spec:
replacePathRegex:
regex: ^\/[a-z-]+\/v1\/docs\/?(.*)
replacement: /docs/$1
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: rewrite-health-prefix
namespace: api-gateway
spec:
replacePathRegex:
regex: ^\/[a-z-]+\/v1\/health\/?(.*)
replacement: /health/$1
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: cases-microservice-api-routes
namespace: api-gateway
spec:
routes:
# Cases microservice API (external /cases/v1, internal /api)
- match: PathPrefix(`/cases/v1`)
kind: Rule
middlewares:
- name: rewrite-api-prefix
namespace: api-gateway
- name: jwt-middleware
namespace: api-gateway
services:
- name: cases-microservice
namespace: cases-microservice
port: 80
# Cases microservice Docs (external /cases/v1/docs, internal /docs)
- match: PathPrefix(`/cases/v1/docs`)
kind: Rule
middlewares:
- name: rewrite-docs-prefix
namespace: api-gateway
services:
- name: cases-microservice
namespace: cases-microservice
port: 80
# Cases microservice Health (external /cases/v1/health, internal /api/health)
- match: PathPrefix(`/cases/v1/health`)
kind: Rule
middlewares:
- name: rewrite-health-prefix
namespace: api-gateway
services:
- name: cases-microservice
namespace: cases-microservice
port: 80
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: jwt-middleware
spec:
plugin:
jwt:
PayloadFields:
- exp
Required: true
JwtHeaders:
X-Subject: sub
X-Tenant-Id: tenant_id
X-Projects: projects
X-Scopes: scopes
apiVersion: v1
kind: Service
metadata:
name: api-gateway-dashboard-service
spec:
type: LoadBalancer
ports:
- port: 8091
targetPort: dashboard
selector:
app: api-gateway
---
apiVersion: v1
kind: Service
metadata:
name: api-gateway-web-service
spec:
type: LoadBalancer
ports:
- targetPort: web
port: 8090
selector:
app: api-gateway
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: jwt-middleware
spec:
plugin:
jwt:
Keys:
- https://domain/.well-known/jwks.json
Traefik Debug Log - /configurationwatcher.go:227 > Configuration received config=
{
"http": {
"middlewares": {
"rewrite-api-prefix": {
"replacePathRegex": {
"regex": "^/[a-z-]+/v1/?(.*)",
"replacement": "/$1"
}
},
"rewrite-docs-prefix": {
"replacePathRegex": {
"regex": "^/[a-z-]+/v1/docs/?(.*)",
"replacement": "/docs/$1"
}
},
"rewrite-health-prefix": {
"replacePathRegex": {
"regex": "^/[a-z-]+/v1/health/?(.*)",
"replacement": "/health/$1"
}
},
"testheader": {
"headers": {
"accessControlAllowHeaders": [
"*"
],
"accessControlAllowMethods": [
"*"
],
"accessControlAllowOriginList": [
"*"
]
}
}
},
"routers": {
"api-gateway-cases-nestjs-microservice": {
"rule": "Host(`api-gateway-cases-nestjs-microservice`)",
"service": "api-gateway-cases-nestjs-microservice"
},
"cases": {
"middlewares": [
"jwt-middleware@file",
"rewrite-api-prefix@docker"
],
"rule": "PathPrefix(`/cases/v1`)",
"service": "cases-service"
},
"cases-v1-docs": {
"middlewares": [
"rewrite-docs-prefix@docker"
],
"rule": "PathPrefix(`/cases/v1/docs`)",
"service": "cases-service"
},
"minikube": {
"rule": "Host(`minikube`)",
"service": "minikube"
},
"mysql-cases-nestjs-microservice": {
"rule": "Host(`mysql-cases-nestjs-microservice`)",
"service": "mysql-cases-nestjs-microservice"
},
"whoami": {
"entryPoints": [
"web"
],
"rule": "Host(`app-cases-nestjs-microservice`)",
"service": "cases-service"
}
},
"services": {
"api-gateway-cases-nestjs-microservice": {
"loadBalancer": {
"passHostHeader": true,
"responseForwarding": {
"flushInterval": "100ms"
},
"servers": [
{
"url": "http://172.29.0.2:80"
}
]
}
},
"cases-service": {
"loadBalancer": {
"passHostHeader": true,
"responseForwarding": {
"flushInterval": "100ms"
},
"servers": [
{
"url": "http://172.29.0.4:4000"
}
]
}
},
"minikube": {
"loadBalancer": {
"passHostHeader": true,
"responseForwarding": {
"flushInterval": "100ms"
},
"servers": [
{
"url": "http://192.168.49.2:22"
}
]
}
},
"mysql-cases-nestjs-microservice": {
"loadBalancer": {
"passHostHeader": true,
"responseForwarding": {
"flushInterval": "100ms"
},
"servers": [
{
"url": "http://172.29.0.3:3306"
}
]
}
}
}
},
"tcp": {},
"tls": {},
"udp": {}
}
FULL log of initial start without request
[+] Running 1/0
✔ Container cases-nestjs-microservice-api-gateway-1 Created 0.0s
Attaching to api-gateway-1
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/cmd/traefik/traefik.go:103 > Traefik version 3.2.0 built on 2024-10-28T14:49:00Z version=3.2.0
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/cmd/traefik/traefik.go:110 > Static configuration loaded [json] staticConfiguration={"accessLog":{"bufferingSize":100,"fields":{"defaultMode":"keep","headers":{"defaultMode":"drop"}},"filters":{},"format":"common"},"api":{"dashboard":true,"insecure":true},"entryPoints":{"dashboard":{"address":":8091","forwardedHeaders":{},"http":{"maxHeaderBytes":1048576},"http2":{"maxConcurrentStreams":250},"transport":{"lifeCycle":{"graceTimeOut":"10s"},"respondingTimeouts":{"idleTimeout":"3m0s","readTimeout":"1m0s"}},"udp":{"timeout":"3s"}},"traefik":{"address":":8080","forwardedHeaders":{},"http":{"maxHeaderBytes":1048576},"http2":{"maxConcurrentStreams":250},"transport":{"lifeCycle":{"graceTimeOut":"10s"},"respondingTimeouts":{"idleTimeout":"3m0s","readTimeout":"1m0s"}},"udp":{"timeout":"3s"}},"web":{"address":":4001","forwardedHeaders":{},"http":{"maxHeaderBytes":1048576},"http2":{"maxConcurrentStreams":250},"transport":{"lifeCycle":{"graceTimeOut":"10s"},"respondingTimeouts":{"idleTimeout":"3m0s","readTimeout":"1m0s"}},"udp":{"timeout":"3s"}}},"experimental":{"plugins":{"jwt":{"moduleName":"github.com/traefik-plugins/traefik-jwt-plugin","settings":{},"version":"v0.9.0"}}},"global":{"checkNewVersion":true},"log":{"format":"common","level":"DEBUG"},"providers":{"docker":{"defaultRule":"Host(`{{ normalize .Name }}`)","endpoint":"unix:///var/run/docker.sock","exposedByDefault":true,"watch":true},"file":{"filename":"/docker-jwt-dynamic.yaml","watch":true},"providersThrottleDuration":"2s"},"serversTransport":{"maxIdleConnsPerHost":200},"tcpServersTransport":{"dialKeepAlive":"15s","dialTimeout":"30s"}}
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/cmd/traefik/traefik.go:626 >
api-gateway-1 | Stats collection is disabled.
api-gateway-1 | Help us improve Traefik by turning this feature on :)
api-gateway-1 | More details on: https://doc.traefik.io/traefik/contributing/data-collection/
api-gateway-1 |
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/cmd/traefik/traefik.go:237 > Loading plugins... plugins=["jwt"]
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/plugins/plugins.go:30 > Loading of plugin: jwt: github.com/traefik-plugins/traefik-jwt-plugin@v0.9.0
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/hashicorp/go-retryablehttp@v0.7.7/client.go:661 > Performing request method=GET url=https://plugins.traefik.io/public/download/github.com/traefik-plugins/traefik-jwt-plugin/v0.9.0
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/hashicorp/go-retryablehttp@v0.7.7/client.go:661 > Performing request method=GET url=https://plugins.traefik.io/public/validate/github.com/traefik-plugins/traefik-jwt-plugin/v0.9.0
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/cmd/traefik/traefik.go:244 > Plugins loaded. plugins=["jwt"]
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/pkg/server/configurationwatcher.go:73 > Starting provider aggregator aggregator.ProviderAggregator
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/server/server_entrypoint_tcp.go:231 > Starting TCP Server entryPointName=traefik
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/server/server_entrypoint_tcp.go:231 > Starting TCP Server entryPointName=dashboard
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/server/server_entrypoint_tcp.go:231 > Starting TCP Server entryPointName=web
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/pkg/provider/aggregator/aggregator.go:202 > Starting provider *file.Provider
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/provider/aggregator/aggregator.go:203 > *file.Provider provider configuration config={"filename":"/docker-jwt-dynamic.yaml","watch":true}
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/provider/file/file.go:122 > add watcher on: /
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/provider/file/file.go:122 > add watcher on: /docker-jwt-dynamic.yaml
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/pkg/provider/aggregator/aggregator.go:202 > Starting provider *traefik.Provider
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/pkg/provider/aggregator/aggregator.go:202 > Starting provider *acme.ChallengeTLSALPN
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/provider/aggregator/aggregator.go:203 > *traefik.Provider provider configuration config={}
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/provider/aggregator/aggregator.go:203 > *acme.ChallengeTLSALPN provider configuration config={}
api-gateway-1 | 2024-11-06T15:58:40+01:00 INF github.com/traefik/traefik/v3/pkg/provider/aggregator/aggregator.go:202 > Starting provider *docker.Provider
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/provider/aggregator/aggregator.go:203 > *docker.Provider provider configuration config={"defaultRule":"Host(`{{ normalize .Name }}`)","endpoint":"unix:///var/run/docker.sock","exposedByDefault":true,"watch":true}
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/server/configurationwatcher.go:227 > Configuration received config={"http":{"middlewares":{"jwt-middleware":{"plugin":{"jwt":{"auth_header":"Authorization","auth_type":"Bearer","claims":["sub","tenant_id","projects","scopes"],"jwks_url":"${MOCK_API_GATEWAY_JWKS_URL:-http://localhost:8000/.well-known/jwks.json}","jwt_headers":{"X-Projects":"projects","X-Scopes":"scopes","X-Subject":"sub","X-Tenant-Id":"tenant_id"},"required":"true","strip_header":"true"}}}}},"tcp":{},"tls":{},"udp":{}} providerName=file
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/server/configurationwatcher.go:227 > Configuration received config={"http":{"middlewares":{"dashboard_redirect":{"redirectRegex":{"permanent":true,"regex":"^(http:\\/\\/(\\[[\\w:.]+\\]|[\\w\\._-]+)(:\\d+)?)\\/$","replacement":"${1}/dashboard/"}},"dashboard_stripprefix":{"stripPrefix":{"prefixes":["/dashboard/","/dashboard"]}}},"routers":{"api":{"entryPoints":["traefik"],"priority":9223372036854775806,"rule":"PathPrefix(`/api`)","ruleSyntax":"v3","service":"api@internal"},"dashboard":{"entryPoints":["traefik"],"middlewares":["dashboard_redirect@internal","dashboard_stripprefix@internal"],"priority":9223372036854775805,"rule":"PathPrefix(`/`)","ruleSyntax":"v3","service":"dashboard@internal"}},"serversTransports":{"default":{"maxIdleConnsPerHost":200}},"services":{"api":{},"dashboard":{},"noop":{}}},"tcp":{"serversTransports":{"default":{"dialKeepAlive":"15s","dialTimeout":"30s"}}},"tls":{},"udp":{}} providerName=internal
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/provider/docker/pdocker.go:90 > Provider connection established with docker 26.1.1 (API 1.45) providerName=docker
api-gateway-1 | 2024-11-06T15:58:40+01:00 DBG github.com/traefik/traefik/v3/pkg/server/configurationwatcher.go:227 > Configuration received config={"http":{"middlewares":{"rewrite-api-prefix":{"replacePathRegex":{"regex":"^/[a-z-]+/v1/?(.*)","replacement":"/$1"}},"rewrite-docs-prefix":{"replacePathRegex":{"regex":"^/[a-z-]+/v1/docs/?(.*)","replacement":"/docs/$1"}},"rewrite-health-prefix":{"replacePathRegex":{"regex":"^/[a-z-]+/v1/health/?(.*)","replacement":"/health/$1"}},"testheader":{"headers":{"accessControlAllowHeaders":["*"],"accessControlAllowMethods":["*"],"accessControlAllowOriginList":["*"]}}},"routers":{"api-gateway-cases-nestjs-microservice":{"rule":"Host(`api-gateway-cases-nestjs-microservice`)","service":"api-gateway-cases-nestjs-microservice"},"cases":{"middlewares":["jwt-middleware@file","rewrite-api-prefix@docker"],"rule":"PathPrefix(`/cases/v1`)","service":"cases-service"},"cases-v1-docs":{"middlewares":["rewrite-docs-prefix@docker"],"rule":"PathPrefix(`/cases/v1/docs`)","service":"cases-service"},"minikube":{"rule":"Host(`minikube`)","service":"minikube"},"mysql-cases-nestjs-microservice":{"rule":"Host(`mysql-cases-nestjs-microservice`)","service":"mysql-cases-nestjs-microservice"},"whoami":{"entryPoints":["web"],"rule":"Host(`app-cases-nestjs-microservice`)","service":"cases-service"}},"services":{"api-gateway-cases-nestjs-microservice":{"loadBalancer":{"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"},"servers":[{"url":"http://172.29.0.2:80"}]}},"cases-service":{"loadBalancer":{"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"},"servers":[{"url":"http://172.29.0.4:4000"}]}},"minikube":{"loadBalancer":{"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"},"servers":[{"url":"http://192.168.49.2:22"}]}},"mysql-cases-nestjs-microservice":{"loadBalancer":{"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"},"servers":[{"url":"http://172.29.0.3:3306"}]}}}},"tcp":{},"tls":{},"udp":{}} providerName=docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/tls/tlsmanager.go:321 > No default certificate, fallback to the internal generated certificate tlsStoreName=default
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/stripprefix/strip_prefix.go:32 > Creating middleware entryPointName=traefik middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/observability/middleware.go:33 > Adding tracing to middleware entryPointName=traefik middlewareName=dashboard_stripprefix@internal routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/redirect/redirect_regex.go:17 > Creating middleware entryPointName=traefik middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/redirect/redirect_regex.go:18 > Setting up redirection from ^(http:\/\/(\[[\w:.]+\]|[\w\._-]+)(:\d+)?)\/$ to ${1}/dashboard/ entryPointName=traefik middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/observability/middleware.go:33 > Adding tracing to middleware entryPointName=traefik middlewareName=dashboard_redirect@internal routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/recovery/recovery.go:25 > Creating middleware entryPointName=traefik middlewareName=traefik-internal-recovery middlewareType=Recovery
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/aggregator.go:51 > No entryPoint defined for this router, using the default one(s) instead entryPointName=["dashboard","web"] routerName=minikube
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/aggregator.go:51 > No entryPoint defined for this router, using the default one(s) instead entryPointName=["dashboard","web"] routerName=mysql-cases-nestjs-microservice
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/aggregator.go:51 > No entryPoint defined for this router, using the default one(s) instead entryPointName=["dashboard","web"] routerName=api-gateway-cases-nestjs-microservice
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/aggregator.go:51 > No entryPoint defined for this router, using the default one(s) instead entryPointName=["dashboard","web"] routerName=cases-v1-docs
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/aggregator.go:51 > No entryPoint defined for this router, using the default one(s) instead entryPointName=["dashboard","web"] routerName=cases
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/tls/tlsmanager.go:321 > No default certificate, fallback to the internal generated certificate tlsStoreName=default
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/service/service.go:299 > Creating load-balancer entryPointName=dashboard routerName=mysql-cases-nestjs-microservice@docker serviceName=mysql-cases-nestjs-microservice@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/service/service.go:336 > Creating server entryPointName=dashboard routerName=mysql-cases-nestjs-microservice@docker serverName=205a79e67136e433 serviceName=mysql-cases-nestjs-microservice@docker target=http://172.29.0.3:3306
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/service/service.go:299 > Creating load-balancer entryPointName=dashboard routerName=api-gateway-cases-nestjs-microservice@docker serviceName=api-gateway-cases-nestjs-microservice@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/service/service.go:336 > Creating server entryPointName=dashboard routerName=api-gateway-cases-nestjs-microservice@docker serverName=3d2ab0f52d9842f2 serviceName=api-gateway-cases-nestjs-microservice@docker target=http://172.29.0.2:80
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/service/service.go:299 > Creating load-balancer entryPointName=dashboard routerName=cases-v1-docs@docker serviceName=cases-service@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/service/service.go:336 > Creating server entryPointName=dashboard routerName=cases-v1-docs@docker serverName=07b68d30c0a098d8 serviceName=cases-service@docker target=http://172.29.0.4:4000
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/replacepathregex/replace_path_regex.go:30 > Creating middleware entryPointName=dashboard middlewareName=rewrite-docs-prefix@docker middlewareType=ReplacePathRegex routerName=cases-v1-docs@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/observability/middleware.go:33 > Adding tracing to middleware entryPointName=dashboard middlewareName=rewrite-docs-prefix@docker routerName=cases-v1-docs@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/replacepathregex/replace_path_regex.go:30 > Creating middleware entryPointName=dashboard middlewareName=rewrite-api-prefix@docker middlewareType=ReplacePathRegex routerName=cases@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/observability/middleware.go:33 > Adding tracing to middleware entryPointName=dashboard middlewareName=rewrite-api-prefix@docker routerName=cases@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/observability/middleware.go:33 > Adding tracing to middleware entryPointName=dashboard middlewareName=jwt-middleware@file routerName=cases@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/service/service.go:299 > Creating load-balancer entryPointName=dashboard routerName=minikube@docker serviceName=minikube@docker
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/server/service/service.go:336 > Creating server entryPointName=dashboard routerName=minikube@docker serverName=0e63f3df2f4ccf3b serviceName=minikube@docker target=http://192.168.49.2:22
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/recovery/recovery.go:25 > Creating middleware entryPointName=dashboard middlewareName=traefik-internal-recovery middlewareType=Recovery
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/recovery/recovery.go:25 > Creating middleware entryPointName=web middlewareName=traefik-internal-recovery middlewareType=Recovery
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/stripprefix/strip_prefix.go:32 > Creating middleware entryPointName=traefik middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/observability/middleware.go:33 > Adding tracing to middleware entryPointName=traefik middlewareName=dashboard_stripprefix@internal routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/redirect/redirect_regex.go:17 > Creating middleware entryPointName=traefik middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/redirect/redirect_regex.go:18 > Setting up redirection from ^(http:\/\/(\[[\w:.]+\]|[\w\._-]+)(:\d+)?)\/$ to ${1}/dashboard/ entryPointName=traefik middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/observability/middleware.go:33 > Adding tracing to middleware entryPointName=traefik middlewareName=dashboard_redirect@internal routerName=dashboard@internal
api-gateway-1 | 2024-11-06T15:58:41+01:00 DBG github.com/traefik/traefik/v3/pkg/middlewares/recovery/recovery.go:25 > Creating middleware entryPointName=traefik middlewareName=traefik-internal-recovery middlewareType=Recovery