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

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

2026.10.05                  


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

Ошибка вида:

invalid middleware type or middleware does not exist

или по-русски:

недопустимый тип промежуточного ПО или промежуточное ПО не существует

в контексте crowdsec-bouncer-traefik-plugin почти всегда означает не проблему с самим CrowdSec, а проблему с тем, что Traefik не может найти или распознать middleware.

Чаще всего причина одна из двух:

  1. Плагин не был загружен в Traefik.
  2. Имя плагина в статической конфигурации не совпадает с именем, используемым в секции plugin.
  3. Router ссылается на несуществующее middleware или не указан нужный @provider.
  4. Middleware объявлен в одном провайдере, а используется без указания провайдера.
  5. Для Traefik v2/v3 используется неправильный CRD apiVersion или несовместимая версия плагина.



1. Главное правило: есть три разных имени

В конфигурации часто путают три вещи:

1. Имя плагина в статической конфигурации

Это ключ, который вы задаёте сами, например:

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

Здесь имя плагина — crowdsec.

Или:

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

Здесь имя плагина — crowdsec-bouncer. Это имя можно выбирать свободно, но оно должно быть одинаковым дальше в динамической конфигурации.


2. Имя middleware

Это имя, под которым middleware будет видно в Traefik.

Пример:

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

Здесь имя middleware — crowdsec.

Имя middleware тоже можно выбрать любое, например:

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

Здесь имя middleware — my-crowdsec.


3. Имя, на которое ссылается router

Router должен ссылаться именно на имя middleware, а не на имя плагина.

Пример:

http:
  routers:
    app:
      middlewares:
        - crowdsec

Если middleware объявлено в другом провайдере, может потребоваться суффикс:

middlewares:
  - crowdsec@file

или:

middlewares:
  - crowdsec@docker

2. Самая частая ошибка

Неправильно:

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

При статической конфигурации:

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

Почему ошибка? Потому что в plugin: указан crowdsec-bouncer, а в статической конфигурации плагин зарегистрирован как crowdsec.

Правильно:

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

Или наоборот.

Если статическая конфигурация такая:

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

То в динамической конфигурации нужно писать:

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

3. Рабочий пример: статическая конфигурация

Ниже пример, где имя плагина — crowdsec.

Файл traefik.yml:

log:
  level: DEBUG

api:
  dashboard: true

entryPoints:
  web:
    address: ":80"

providers:
  docker:
    exposedByDefault: false
  file:
    filename: /etc/traefik/dynamic.yml
    watch: true

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

Вместо vX.Y.Z нужно указать реальную совместимую версию плагина, например:

version: v0.3.2

или более новую, если она совместима с вашей версией Traefik.

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

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

4. Рабочий пример: динамическая конфигурация в файле

Файл dynamic.yml:

http:
  middlewares:
    crowdsec:
      plugin:
        crowdsec:
          enabled: true
          logLevel: info
          updateIntervalSeconds: 60
          cacheExpirationSeconds: 60
          crowdsecLapiScheme: http
          crowdsecLapiHost: crowdsec:8080
          crowdsecLapiKey: "ВАШ_КЛЮЧ_БАУНСЕРА"


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

http:
  middlewares:
    crowdsec:
      plugin:
        crowdsec-bouncer:
          enabled: true
          logLevel: info
          updateIntervalSeconds: 60
          cacheExpirationSeconds: 60
          crowdsecLapiScheme: http
          crowdsecLapiHost: crowdsec:8080
          crowdsecLapiKey: "ВАШ_КЛЮЧ_БАУНСЕРА"

Пример роутера в том же файле:

http:
  routers:
    app:
      rule: Host(`app.example.com`)
      entryPoints:
        - web
      service: app
      middlewares:
        - crowdsec

  services:
    app:
      loadBalancer:
        servers:
          - url: http://app:8080

Если роутер находится в Docker-провайдере, а middleware в файле, нужно указывать:

middlewares:
  - crowdsec@file

Если роутер и middleware находятся в Docker-labels, обычно можно писать:

middlewares:
  - crowdsec

или явно:

middlewares:
  - crowdsec@docker

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


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

Комментарии

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