Ошибка при попытке создания сертификата с вызовом traefikv2 acme tls - Docker Swarm - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь заставить 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 пройти. Если у вас есть какие-либо подсказки, пожалуйста, не стесняйтесь ответить.

Спасибо и удачи во время заключения

...