Подробный гайд: Ошибка middleware does not exist: гайд по CrowdSec в Traefik - Часть 2

Полный гайд по устранению ошибки «middleware does not exist» при интеграции crowdsec-bouncer-traefik-plugin в Traefik, Docker Compose и Kubernetes.

2026.10.05                  


Подробный гайд: Ошибка middleware does not exist: гайд по CrowdSec в Traefik - Часть 2Подробный гайд: Ошибка middleware does not exist: гайд по CrowdSec в Traefik - Часть 2

5. Рабочий пример для Docker Compose через labels

Пример контейнера приложения:

services:
  app:
    image: traefik/whoami
    labels:
      - "traefik.enable=true"

      - "traefik.http.routers.app.rule=Host(`app.example.com`)"
      - "traefik.http.routers.app.entrypoints=web"
      - "traefik.http.routers.app.middlewares=crowdsec@docker"

      - "traefik.http.middlewares.crowdsec.plugin.crowdsec.enabled=true"
      - "traefik.http.middlewares.crowdsec.plugin.crowdsec.logLevel=info"
      - "traefik.http.middlewares.crowdsec.plugin.crowdsec.updateIntervalSeconds=60"
      - "traefik.http.middlewares.crowdsec.plugin.crowdsec.cacheExpirationSeconds=60"
      - "traefik.http.middlewares.crowdsec.plugin.crowdsec.crowdsecLapiScheme=http"
      - "traefik.http.middlewares.crowdsec.plugin.crowdsec.crowdsecLapiHost=crowdsec:8080"
      - "traefik.http.middlewares.crowdsec.plugin.crowdsec.crowdsecLapiKey=${CROWDSEC_BOUNCER_KEY}"


Если ваш плагин в статической конфигурации называется не crowdsec, а crowdsec-bouncer, тогда все строки:

.plugin.crowdsec.

нужно заменить на:

.plugin.crowdsec-bouncer.

То есть:

- "traefik.http.middlewares.crowdsec.plugin.crowdsec-bouncer.enabled=true"
- "traefik.http.middlewares.crowdsec.plugin.crowdsec-bouncer.logLevel=info"
- "traefik.http.middlewares.crowdsec.plugin.crowdsec-bouncer.updateIntervalSeconds=60"
- "traefik.http.middlewares.crowdsec.plugin.crowdsec-bouncer.cacheExpirationSeconds=60"
- "traefik.http.middlewares.crowdsec.plugin.crowdsec-bouncer.crowdsecLapiScheme=http"
- "traefik.http.middlewares.crowdsec.plugin.crowdsec-bouncer.crowdsecLapiHost=crowdsec:8080"
- "traefik.http.middlewares.crowdsec.plugin.crowdsec-bouncer.crowdsecLapiKey=${CROWDSEC_BOUNCER_KEY}"

6. Пример статической конфигурации через аргументы командной строки

Если вы задаёте конфигурацию не файлом, а через command в Docker Compose:

services:
  traefik:
    image: traefik:v3.1
    command:
      - "--log.level=DEBUG"
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--experimental.plugins.crowdsec.modulename=github.com/crowdsecurity/crowdsec-bouncer-traefik-plugin"
      - "--experimental.plugins.crowdsec.version=vX.Y.Z"

Обратите внимание:

  • в YAML обычно используется moduleName;
  • в CLI-флаге часто используется modulename;
  • имя после experimental.plugins. — это имя плагина.

Если вы используете имя crowdsec-bouncer:

      - "--experimental.plugins.crowdsec-bouncer.modulename=github.com/crowdsecurity/crowdsec-bouncer-traefik-plugin"
      - "--experimental.plugins.crowdsec-bouncer.version=vX.Y.Z"

7. Минимальная проверка: что должно совпадать

Допустим, вы выбрали имя плагина crowdsec.

Тогда:

Статическая конфигурация

experimental:
  plugins:
    crowdsec:
      moduleName: github.com/crowdsecurity/crowdsec-bouncer-traefik-plugin
      version: vX.Y.Z

Динамическая конфигурация

http:
  middlewares:
    crowdsec:
      plugin:
        crowdsec:
          enabled: true

Router

http:
  routers:
    app:
      middlewares:
        - crowdsec

или, если другой провайдер:

      middlewares:
        - crowdsec@file

Если вы выбрали имя плагина crowdsec-bouncer:

Статическая конфигурация

experimental:
  plugins:
    crowdsec-bouncer:
      moduleName: github.com/crowdsecurity/crowdsec-bouncer-traefik-plugin
      version: vX.Y.Z

Динамическая конфигурация

http:
  middlewares:
    crowdsec:
      plugin:
        crowdsec-bouncer:
          enabled: true

Router

http:
  routers:
    app:
      middlewares:
        - crowdsec

или:

      middlewares:
        - crowdsec@file

8. Проверка загрузки плагина

Плагин загружается при старте Traefik. Поэтому после изменения статической конфигурации нужно перезапустить Traefik.

Для Docker:

docker compose restart traefik

или:

docker restart traefik

Затем смотрите логи:



docker logs traefik | grep -Ei 'plugin|middleware|crowdsec'

Ищите строки, содержащие:

plugin
crowdsec
middleware
failed to load
error

Если плагин не загрузился, middleware не будет существовать.


9. Проверка через Traefik API / Dashboard

Если у вас включён API, например:

api:
  dashboard: true
  insecure: true

или через флаг:

- "--api.insecure=true"

то можно открыть:

http://localhost:8080/dashboard/

Нужен раздел:

HTTP -> Middlewares

Там должно быть ваше middleware, например:

crowdsec@file

или:

crowdsec@docker

Также можно проверить через API:

curl -s http://localhost:8080/api/http/middlewares | jq

Или выбрать только crowdsec:

curl -s http://localhost:8080/api/http/middlewares | jq '.[] | select(.name | contains("crowdsec"))'

Если middleware нет в списке — Traefik его не зарегистрировал. Значит, проблема в статической конфигурации плагина, имени плагина, имени middleware или провайдере.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта