Я использую AWS Fargate и перешел с AWS AELB на Traefik v1.7, и время загрузки стало немного быстрее, и это лучший выбор с точки зрения затрат. Я установил Traefik в Docker-контейнер на EC2 в своем VPC.
Но, как вы знаете, управлять SSL-сертификатами с помощью AWS LB очень просто. Traefik тоже прост, но у меня проблемы с его настройкой.
Панель инструментов отображается, моя конфигурация верна, все переадресация в порядке, и когда я вхожу в свой поддомен, мой сайт там,Новые развертывания отображаются правильно и т. Д. Все в порядке. Но SSL никогда не работает. Я попытался использовать Let's Encrypt и мой собственный домен с подстановочными знаками. Я пробовал httpChallenge и dnsChallenge и до сих пор не работает. Let's Encrypt генерирует сертификат, но не присоединяет его к моим развертываниям ECS, для которых настроен поддомен. Есть несколько документов, которые я нашел в Интернете, и они не обсуждают эту проблему. Официальные документы также не так детализированы. Я предполагаю, что моя проблема конкретно с ECS. Возможно, мне что-то не хватает в моих ярлыках докера определений задач traefik.toml или AWS ECS, я не знаю.
Вот мой текущий файл traefik.toml, в котором показана моя конфигурация с моим собственным подстановочным сертификатом. Как я уже сказал, в какой-то момент были также представлены варианты Let's Encrypt, написанные точно так же, как и в Traefik Docs. но пока используйте это как ссылку:
# Entrypoints configuration
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[[entryPoints.https.tls.certificates]]
certFile = "/etc/traefik/MYCERT.pem"
keyFile = "/etc/traefik/MYPRIVATEKEY.pem"
# ECS Provider
[ecs]
#cluster = "default"
clusters = ["MYCLUSTERNAME"]
watch = true
domain = "MYDOMAIN.com"
autoDiscoverClusters = false
refreshSeconds = 15
exposedByDefault = true
region = "eu-central-1"
accessKeyID = "MYACCESSKEY"
secretAccessKey = "MYSECRETKEY"
Мои ярлыки докера в принадлежащем контейнере в определении задачи ECS:
traefik.frontend.rule=Host:MYSUBDOMAIN.MYDOMAIN.com
traefik.enable=true
traefik.backend=MY-PROJECT-BE-DUMMY-TEXT
traefik.port=80
traefik.frontend.entryPoints=http,https
Вот как я запускаю контейнер Traefik в своем EC2:
docker run -d \
--name traefik-lb \
--restart unless-stopped \
-v $PWD/traefik.toml:/etc/traefik/traefik.toml \
-v $PWD/MYCERT.pem:/etc/traefik/MYCERT.pem \
-v $PWD/MYPRIVATEKEY.pem:/etc/traefik/MYPRIVATEKEY.pem \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8080:8080 \
-p 80:80 \
traefik
Часть журналов:
time="2019-10-01T08:31:00Z" level=info msg="No tls.defaultCertificate given for https: using the first item in tls.certificates as a fallback."
time="2019-10-01T08:31:00Z" level=debug msg="Adding certificate for domain(s) *.MYDOMAIN.com,MYDOMAIN.com"
time="2019-10-01T08:31:00Z" level=info msg="Preparing server http &{Address::80 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc00000c4c0} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2019-10-01T08:31:00Z" level=info msg="Preparing server https &{Address::443 TLS:0xc0001ad440 Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc00000ccc0} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2019-10-01T08:31:00Z" level=info msg="Starting server on :80"
time="2019-10-01T08:31:00Z" level=debug msg="Adding certificate for domain(s) *.MYDOMAIN.com,MYDOMAIN.com"
time="2019-10-01T08:31:00Z" level=info msg="Preparing server traefik &{Address::8080 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc00000cce0} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2019-10-01T08:31:00Z" level=info msg="Starting server on :443"
time="2019-10-01T08:31:00Z" level=info msg="Starting provider configuration.ProviderAggregator {}"
time="2019-10-01T08:31:00Z" level=info msg="Starting server on :8080"
Что может быть причиной этой проблемы? Все, что я хочу от Traefik, - это сопоставить этот подтвержденный подстановочный домен и назначить его моим развертываниям, поэтому, когда я вхожу в subdomain.domain.com, я вижу мой домен domain.com поверх SSL.
Спасибо.