Я пытаюсь заставить traefik v2 работать с docker роем с вызовом TLS-ALPN для получения сертификатов от давайте зашифровать.
Я уже тестировал как 20-ти дифференциальную конфигурацию, но мне не удалось получить сертификаты от tls ACME и не понимаю, почему. Я не думаю, что это проблема моего конфига traefik, а скорее конфигурации сети, потому что я не уверен, что давайте шифровать сможем соединиться через http://fqdn: 443 / , чтобы получить информацию по умолчанию сертификат
Я уже тестировал httpChallenge, но тоже получаю сообщение об ошибке. Я хочу понять свои ошибки в tls и http challenge, поэтому я думаю, что создам еще один пост для моей ошибки http http.
хорошо, давайте начнем:
У меня есть кластер роя из трех узлов с одним traefik на каждом узле, и у меня есть балансировщик нагрузки OVH во внешнем интерфейсе.
Во-первых: моя точка входа в мой netowrk - через балансировщик нагрузки
Front-end overview
Name
lb-frontend-443
Protocol
tcp
Port
443
Name
lb-frontend-80
Protocol
http
Port
80
Во-вторых: мой интерфейс отправляет запросы на ферму серверов, которая содержит три узла docker
Name
farm-443
Protocol
tcp
Port
443
Datacentre
Distribution mode
Round-robin
Track session
Source IP
Probe
TCP
Port
443
Name
farm-80
Protocol
http
Port
80
Datacentre
Distribution mode
Source
Track session
Source IP
Probe
TCP
Port
80
Затем я развернул на этих серверах traefik с портом 80 и привязку 443 к хосту
Мне удается подключиться к traefik панель инструментов
Это мой docker -композит:
version: '3.7'
networks:
traefik-public:
external: true
services:
traefik:
image: traefik:v2.2
hostname: "{{.Node.Hostname}}-{{.Service.Name}}"
command:
- '--configFile=/etc/traefik/traefik.toml'
networks:
- traefik-public
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /traefik.toml:/etc/traefik/traefik.toml
- /certificate:/certificate
deploy:
mode: global
restart_policy:
condition: on-failure
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.http.routers.traefik-router.rule=Host(`traefik.${DOMAIN}`)
- traefik.http.routers.traefik-router.entrypoints=websecure
- traefik.http.routers.traefik-router.tls=true
- traefik.http.routers.traefik-router.tls.certresolver=letsencrypt
- traefik.http.routers.traefik-router.service=api@internal
- traefik.http.middlewares.default-compress.compress=true
- traefik.http.middlewares.default-https.chain.middlewares=default-compress
- traefik.http.routers.traefik-router.middlewares=traefik-auth
- traefik.http.middlewares.traefik-auth.basicauth.users=${ADMIN_USER?Variable ADMIN_USER not set}:${HASHED_PASSWORD?Variable HASHED_PASSWORD not set}
- traefik.http.services.traefik-services.loadbalancer.server.port=443
Это мой conf.toml
################################################################
# Global configuration
################################################################
[global]
checkNewVersion = true
sendAnonymousUsage = false
################################################################
# Entrypoints configuration
################################################################
# Entrypoints definition
#
# Optional
# Default:
[entryPoints]
[entryPoints.web]
address = ":80"
[entryPoints.web.http]
[entryPoints.web.http.redirections]
[entryPoints.web.http.redirections.entryPoint]
to = "websecure"
scheme = "https"
permanent = true
[entryPoints.websecure]
address = ":443"
[entryPoints.websecure.http.tls]
certResolver = "letsencrypt"
################################################################
# Traefik logs configuration
################################################################
[log]
level = "DEBUG"
format = "json"
################################################################
# API and dashboard configuration
################################################################
[api]
insecure = false
dashboard = true
################################################################
# ACME configuration
################################################################
[certificatesResolvers.letsencrypt.acme]
#caServer = "https://acme-v02.api.letsencrypt.org/directory"
caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"
email = "${EMAIL}"
storage = "/certificate/acme/acme.json"
[certificatesResolvers.letsencrypt.acme.tlsChallenge]
#[certificatesResolvers.letsencrypt.acme.httpChallenge]
# entryPoint = "web"
################################################################
# Docker configuration backend
################################################################
# Enable Docker configuration backend
[providers.docker]
endpoint = "unix:///var/run/docker.sock"
swarmMode = true
network = "traefik-public"
watch = true
exposedByDefault = false
traefik-dashboard
Я не уверен насчет этикетки - traefik.http.services.traefik-services.loadbalancer.server.port=443
. Я не уверен насчет соединения давайте зашифруем. Я полагаю, сервер Let's Encrypt подключится к моему 443 хост-порту сервера Swarm и будет привязан к порту traefik с 443: 443.
Это мои журналы traefik:
{"level":"debug","msg":"legolog: [INFO] [traefik.demo.cloud.patrowl.io] acme: Trying to solve TLS-ALPN-01","time":"2020-04-07T17:34:25Z"}
{"level":"debug","msg":"TLS Challenge CleanUp temp certificate for traefik.demo.cloud.patrowl.io","providerName":"acme","time":"2020-04-07T17:34:29Z"}
{"level":"debug","msg":"legolog: [INFO] Deactivating auth: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/47989242","time":"2020-04-07T17:34:29Z"}
{"level":"debug","msg":"legolog: [INFO] Unable to deactivate the authorization: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/47989242","time":"2020-04-07T17:34:29Z"}
{"level":"error","msg":"Unable to obtain ACME certificate for domains \"traefik.demo.cloud.patrowl.io\": unable to generate a certificate for the domains [traefik.demo.cloud.patrowl.io]: acme: Error -\u003e One or more domains had a problem:\n[traefik.demo.cloud.patrowl.io] acme: error: 403 :: urn:ietf:params:acme:error:unauthorized :: During secondary validation: Incorrect validation certificate for tls-alpn-01 challenge. Requested traefik.demo.cloud.patrowl.io from 51.91.60.234:443. Received 1 certificate(s), first certificate had names \"ec5552cec6a19446c4eaf94ddd866262.82c4629185c6e4458ce087bec5fef363.traefik.default, traefik default cert\", url: \n","providerName":"letsencrypt.acme","routerName":"traefik-router@docker","rule":"Host(`traefik.demo.cloud.patrowl.io`)","time":"2020-04-07T17:34:29Z"}
{"level":"debug","msg":"Serving default certificate for request: \"traefik.demo.cloud.patrowl.io\"","time":"2020-04-07T17:34:30Z"}
{"level":"debug","msg":"http: TLS handshake error from 10.0.0.2:21000: remote error: tls: bad certificate","time":"2020-04-07T17:34:30Z"}
Я попытался найти некоторые проблемы на форуме «Зашифруем», но не получил полезную информацию для
acme: error: 403 :: urn:ietf:params:acme:error:unauthorized :: During secondary validation: Incorrect validation certificate for tls-alpn-01 challenge. Requested traefik.demo.cloud.patrowl.io from 51.91.60.234:443. Received 1 certificate(s), first certificate had names \"ec5552cec6a19446c4eaf94ddd866262.82c4629185c6e4458ce087bec5fef363.traefik.default
traefik-service-443 Не уверен насчет этой конфигурации тоже.
Для Подводя итог:
У меня нет проблем с роутером - промежуточным ПО - сервисами о traefik, но я не могу понять acme с вызовом tls. Всегда получайте сертификат по умолчанию. В логах есть ссылка, по которой можно добраться до моего сервера. Это не импорт, потому что это демонстрационный экземпляр и есть auth basi c http. Я пытался также без, но я думаю, traefik позволил letsencrypt пройти. Если у вас есть какие-либо подсказки, пожалуйста, не стесняйтесь ответить.
Спасибо и удачи во время заключения