JWT middleware on docker not extracting to headers

Hey folks :wave:
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 :x:
  • rewrite /cases/v1/health to localhost:4000/docs (without jwt middleware) :x:
  • rewrite /cases/v1/docs to localhost:4000/docs (without jwt middleware) :x:
  • rewrite /cases/v1/* to localhost:4000/ (with jwt middleware) :x: :orange_circle: it asks for authorization, but passes the Bearer
  • traefik dashboard reachable under localhost:8091 :x:

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