Вопрос или проблема
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
-
Структура
config.yaml
:
В вашем файле конфигурацииconfig.yaml
, есть несколько секций, которые относятся к TLS. Основная проблема, которую стоит проверить, заключается в правильности структуры, особенно в секцииtls
.Найдите строку:
tls: {}
В разделе маршрутизаторов (
routers
), где для маршрутаproxmox
указаноtls: {}
. Эта строка указывает на использование TLS, но, как правило, она включает больше параметров, таких какcertResolver
иdomains
. Пустая конфигурация может приводить к ошибке, так как Traefik ожидает добавить необходимые параметры.Рекомендуется изменить ваш конфигурационный фрагмент на что-то подобное:
tls: certResolver: letsEncrypt
-
Проверка маршрутизации:
В рамках ваших маршрутов (routers
), убедитесь, что все маршруты, которые предполагают использование TLS, имеют корректно прописанные параметрыtls
. На примереtraefik-secured
всё выглядит верно:tls: certResolver: letsEncrypt domains: - main: "example.net" - sans: - "*.example.net"
Но у маршрута
proxmox
может возникнуть ошибка из-за некорректного задания параметров TLS. Учтите, что если для маршрута определенentryPoints
, связанный сhttps
, то он должен правильно настраивать TLS. -
Стоит проверить всю конфигурацию:
Поскольку ошибка при запуске указывает на файл/etc/traefik/config.d/config.yaml
, убедитесь, что в указанном файле нет синтаксических ошибок или опечаток. В YAML-синтаксисе пробелы имеют значение, поэтому следите за тем, чтобы отступы и структура были должным образом соблюдены. Используйте YAML-валидаторы для проверки.
Рекомендации
-
Используйте актуальную версию: Убедитесь, что у вас установлена последняя версия Traefik, так как ошибки конфигурации могут меняться с обновлениями.
-
Логи и отладка: Проверьте логи Traefik, чтобы найти более подробные сообщения об ошибках. Ваша установка конфигурирует журналирование в файл
/etc/traefik/logs/traefik.log
. Изучите его, чтобы получить дополнительную информацию о проблеме. -
Документация: Ознакомьтесь с официальной документацией Traefik для более глубокого понимания полей конфигурации и их правильной настройки.
Исправив вышеописанные недочёты, вы сможете избежать ошибок при старте Traefik и оптимально настроите проксирование запросов через ваш LXC-контейнер. Не забывайте тестировать конфигурацию по частям, чтобы легко отслеживать и устранять возможные проблемы.