Почему мой portainer и traefik недоступны для всех?

Я настраиваю рой докеров и пытаюсь заставить работать реверс traefik и portainer + агент в диспетчере докеров. Но контейнер не является общедоступным.

Я новичок в докере и обратных прокси-серверах, поэтому я не пробовал больше, чем отображаемый код.

Начиная с: docker stack deploy -c stack.yml stack0

стек.yml

version: "3.3"
services:
  traefik:
    image: traefik
    command: --docker.swarmmode
    networks:
      - traefik-net
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefikdata:/etc/traefik
    deploy:
      placement:
        constraints: [node.role==manager]

  portainer-agent:
    image: portainer/agent
    environment:
      AGENT_CLISTER_ADDR: tasks.agent
      AGENT_PORT: 9001
      LOG_LEVEL: debug
    ports:
      - target: 9001
        published: 9001
        protocol: tcp
        mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - portainer-agent_network
      - traefik-net
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./portainerdata:/data"
    networks:
      - portainer-agent_network
      - traefik-net
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]
      labels:
        - "traefik.enable=true"
        - "traefik.port=9000"
        - "traefik.docker.network=stack0_traefik-net"
        - "traefik.frontend.rule=Host:portainer.intern.domain.tld"

networks:
  traefik-net:

  portainer-agent_network:
    driver: overlay
    attachable: true

traefikdata/traefik.toml

logLevel = "INFO"
  defaultEntryPoints = ["http", "https"]

[web]
  address = ":8080"

[docker]
  domain = "traefik.intern.domain.tld"
  watch = true
  exposedbydefault = false

 # Force HTTPS
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

 # Let's encrypt configuration
 [acme]
   email="[email protected]"
   storage="/etc/traefik/acme/acme.json"
   entryPoint="https"
   acmeLogging=true
   OnHostRule=true
   [acme.httpChallenge]
     entryPoint = "http"

Я ожидаю работающий обратный прокси-сервер Traefik, пользовательский интерфейс, доступный через traefik.intern.domain.tld, и portainer, доступный через portainer.intern.domain.tld.


person Fyndor    schedule 21.06.2019    source источник


Ответы (2)


Для полной ясности я бы также поставил определение entryPoints:

- "traefik.frontend.entryPoints=https"

Вы уверены, что эта часть верна?

- "traefik.docker.network=stack0_traefik-net"

Кажется, это не соответствует вашим определениям сети:

networks:
  traefik-net:

  portainer-agent_network:
    driver: overlay
    attachable: true

Я настоятельно рекомендую заставить это работать без сетевых определений, а затем добавлять их по одному за раз.

person dalanmiller    schedule 23.06.2019

После нескольких часов попыток оживить мой stack.yml я начал с самого начала, прочитал немного больше документации и нашел много полезных сообщений о stackoverflow.

В конце концов, у меня на самом деле это:

version: "3"

services:

  traefik:
    image: traefik:latest
    command: --web --docker --docker.swarmmode --docker.watch --docker.domain=intern.domain.tld --logLevel=DEBUG
    deploy:
      placement:
        constraints: [node.role==manager]
      restart_policy:
        condition: on-failure
    labels:
      - "traefik.port=8080"
      - "traefik.docker.network=proxy"
      - "traefik.frontend.rule=Host:traefik.intern.domain.tld"
    ports:
      - "80:80"
      - "5003:8080"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /dev/null:/traefik.toml
    networks:
      - proxy

  portainer:
    image: portainer/portainer:latest
    command: --no-auth -H unix:///var/run/docker.sock
    deploy:
      placement:
        constraints: [node.role == manager]
      labels:
        - "traefik.portainer.port=9000"
        - "traefik.docker.network=proxy"
        - "traefik.frontend.rule=Host:portainer.intern.domain.tld"
    ports:
      - "5001:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - proxy

networks:
  proxy:

Теперь мне нужно, чтобы агент Portainer работал. Я буду работать над этим. На первый взгляд портейнер и траефик доступны на правых портах. SSL еще нет, но для этого мои вопросы ниже.

  • На самом деле portainer.intern.domain.tld:5001 и traefik.intern.domain.tld:5001 оба по-прежнему portainer, но traefik.intern.domain.tld:5001 не должно быть досягаемо - только :5003 с traefik - И наоборот.
  • В документации я читал, что для работы кластера необходимо хранилище kv, чтобы использовать сертификаты acme на нескольких хостах. Тем не менее, я нашел в сети конфигурации с конфигурацией acme.json (для операции swarm). КВ хранилища обязательны или нет?
  • Я был бы очень признателен, если бы это была базовая аутентификация для первого перед portainer и traefik - позже я хочу отредактировать это для сертификатов. Я кое-что знаю о конфигурации в файле traefik.toml, но правильно ли это, если я сделал что-то еще в файле компоновки?
  • То же самое для SSL - я немного знаю о настройке traefik.toml, но правильно ли это? Как насчет хранения всего этого в файле компоновки?

спасибо заранее.

person Fyndor    schedule 24.06.2019
comment
поместите метку traefik.enable=true, поскольку ваша конфигурация указывает, что по умолчанию она не отображается - person Noki; 10.08.2019