Я запускаю Traefik в контейнере lxc, Traefik продолжает падать в самом начале, жалуясь на отсутствие поля в tls в динамическом конфигурационном файле.

Вопрос или проблема

Traefik продолжает аварийно завершаться с сообщением об ошибке:

{"level":"error","providerName":"file","error":"/etc/traefik/config.d/config.yaml: поле не найдено, узел: tls","time":"2024-11-02T12:45:31Z","message":"Ошибка при построении конфигурации (в первый раз)"}

Содержимое Traefik.yaml:

global:
  checkNewVersion: true

api:
  dashboard: true
  insecure: true

# включить ping, чтобы работал `traefik healthcheck`
ping: {}

providers:
  file:
    directory: /etc/traefik/config.d   #(предпочтительный метод указания каталога, который будет содержать много файлов)
    watch: true

entryPoints:
  http:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: https
          scheme: https

  https:
    address: ":443"
    http:
      tls:
        certResolver: letsEncrypt

  traefik:
    address: ":8080"

certificatesResolvers:
  letsEncrypt:
    acme:
      email: ******@*******.net   
      storage: /etc/traefik/ssl/acme.json
      dnsChallenge:
        provider: cloudflare
        resolvers:
          - "1.1.1.1:53"
          - "1.0.0.1:53"

log:
  filePath: /etc/traefik/logs/traefik.log
  format: json
  level: WARN      # более полезно

accessLog:
  filePath: /etc/traefik/logs/traefik-access.log
  format: json
  filters:
    statusCodes:
      - "200"
      - "400-599"
    retryAttempts: true
    minDuration: "10ms"
  bufferingSize: 0
  fields:
    headers:
      defaultMode: drop
      names:
        User-Agent: keep

Динамические конфигурационные файлы ‘config.yaml’

http:
  routers:
    traefik:
      entryPoints:
        - http
      rule: "HOST(`traefik.example.net`)"
      middlewares:
        - https-redirectscheme
        - default-headers
      service: api@internal

    traefik-secured:
      entryPoints:
        - https
      rule: "HOST(`traefik.example.net`)"
      middlewares:
        - traefik-auth
      tls:
        certResolver: letsEncrypt
        domains:
          - main: "example.net"
          - sans: 
            - "*.example.net"
      service: api@internal

    # определите связь между запросами и службами
    proxmox:
      entryPoints:
        - "https"
      rule: "Host(`pve.example.net`)"
      middlewares:
        - default-headers
        - https-redirectscheme
        - cors
      service: proxmox
      tls: {}

  services:
    # определите, как достичь существующей службы
    proxmox:
      loadBalancer:
        passHostHeader: true
        servers:
          - url: "https://192.168.2.250:8006"

  middlewares:

    traefik-auth:
      basicAuth:
        users:
          - "ahmednah:$$apr1$$********$$Bq9JcuQLIetqGj/9PWUm40"

    https-redirectscheme:
      redirectScheme:
        scheme: https
        permanent: true

    default-headers:
      headers:
        frameDeny: true
        browserXssFilter: true
        contentTypeNosniff: true
        forceSTSHeader: true
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 15552000
        customFrameOptionsValue: SAMEORIGIN
        customRequestHeaders:
          X-Forwarded-Proto: https

    secured:
      chain:
        middlewares:
          - default-whitelist
          - default-headers

  tls:
    stores:
      default:
        defaultGeneratedCert:
          resolver: letsEncrypt
          domain:
            main: example.net
            sans:
              - "*.example.net"

    options:
      default:
        maxVersion: VersionTLS13
        cipherSuites:
          - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
          - TLS_AES_128_GCM_SHA256
          - TLS_AES_256_GCM_SHA384
          - TLS_CHACHA20_POLY1305_SHA256
      maxtls12:
        maxVersion: VersionTLS12

Я сдался, не знаю, что я здесь упускаю?

Ответ или решение

Проблема, с которой вы столкнулись при запуске Traefik в контейнере LXC, связана с ошибкой конфигурации TLS в вашем динамическом файле конфигурации. Ошибка:

{"level":"error","providerName":"file","error":"/etc/traefik/config.d/config.yaml: field not found, node: tls","time":"2024-11-02T12:45:31Z","message":"Error while building configuration (for the first time)"}

указывает на то, что Traefik не может найти ожидаемое поле в ключе TLS. Давайте рассмотрим вашу конфигурацию и выявим возможные проблемы.

Анализ конфигурации Traefik

  1. Структура config.yaml:
    В вашем файле конфигурации config.yaml, есть несколько секций, которые относятся к TLS. Основная проблема, которую стоит проверить, заключается в правильности структуры, особенно в секции tls.

    Найдите строку:

    tls: {}

    В разделе маршрутизаторов (routers), где для маршрута proxmox указано tls: {}. Эта строка указывает на использование TLS, но, как правило, она включает больше параметров, таких как certResolver и domains. Пустая конфигурация может приводить к ошибке, так как Traefik ожидает добавить необходимые параметры.

    Рекомендуется изменить ваш конфигурационный фрагмент на что-то подобное:

    tls:
     certResolver: letsEncrypt
  2. Проверка маршрутизации:
    В рамках ваших маршрутов (routers), убедитесь, что все маршруты, которые предполагают использование TLS, имеют корректно прописанные параметры tls. На примере traefik-secured всё выглядит верно:

    tls:
     certResolver: letsEncrypt
     domains:
       - main: "example.net"
       - sans: 
         - "*.example.net"

    Но у маршрута proxmox может возникнуть ошибка из-за некорректного задания параметров TLS. Учтите, что если для маршрута определен entryPoints, связанный с https, то он должен правильно настраивать TLS.

  3. Стоит проверить всю конфигурацию:
    Поскольку ошибка при запуске указывает на файл /etc/traefik/config.d/config.yaml, убедитесь, что в указанном файле нет синтаксических ошибок или опечаток. В YAML-синтаксисе пробелы имеют значение, поэтому следите за тем, чтобы отступы и структура были должным образом соблюдены. Используйте YAML-валидаторы для проверки.

Рекомендации

  1. Используйте актуальную версию: Убедитесь, что у вас установлена последняя версия Traefik, так как ошибки конфигурации могут меняться с обновлениями.

  2. Логи и отладка: Проверьте логи Traefik, чтобы найти более подробные сообщения об ошибках. Ваша установка конфигурирует журналирование в файл /etc/traefik/logs/traefik.log. Изучите его, чтобы получить дополнительную информацию о проблеме.

  3. Документация: Ознакомьтесь с официальной документацией Traefik для более глубокого понимания полей конфигурации и их правильной настройки.

Исправив вышеописанные недочёты, вы сможете избежать ошибок при старте Traefik и оптимально настроите проксирование запросов через ваш LXC-контейнер. Не забывайте тестировать конфигурацию по частям, чтобы легко отслеживать и устранять возможные проблемы.

Оцените материал
Добавить комментарий

Капча загружается...