Docker -создание & Traefik 2 & пользовательский домен, перенаправленный на localhost - PullRequest
0 голосов
/ 18 февраля 2020

Сценарий:

Я настроил docker -композиционную (v3) среду с 3 пользовательскими docker микросервисами. Эти 3 микросервиса сбалансированы и направлены через traefik 2.x.

На моей локальной машине я использую службу подстановочных знаков dns / domain, например nip.io, поэтому я могу использовать fqdn в локальной среде разработки. (это windows 10, и используется docker -desktop последняя версия)

Из моего браузера я теперь могу получить доступ к 3 микросервисам соответственно:

, но когда микросервисы пытаются подключиться друг с другом я получаю следующую ошибку:

Get https://m1.nip.io/api-call-test: dial tcp 127.0.0.1:443: connect: connection refused"

, что несколько ожидаемо, поскольку traefik прослушивает хост-машину через порт: 443, а не внутри docker, вызывая другой microservice.

Изменение запроса на https://m1/api-call-test, поскольку это имя контейнера docker. но это означало бы, что я должен создать собственную логику c в своем коде, чтобы определить, работаю ли я локально в контейнере docker, не большая проблема, но я хотел бы избежать этого, если это возможно.

Чистое docker -композиционное решение, которое работает с traefik, было бы предпочтительным, если это возможно.

Пример файла компоновки docker, который у меня есть на данный момент:

version: '3'

services:

  traefik:
    image: traefik:v2.1
    container_name: traefik
    restart: always
    ports:
      - 443:443
      - 80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./docker/traefik/traefik.toml:/etc/traefik/traefik.toml
      - ./docker/traefik/traefik.config.toml:/etc/traefik/traefik.config.toml
      - ./docker/certs/public.pem:/certs/public.pem
      - ./docker/certs/private.pem:/certs/private.pem
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.rule=Host(`traefik.nip.io`)
      - traefik.http.routers.traefik.entrypoints=websecure
      - traefik.http.routers.traefik.tls=true
      # global redirect router, only need to define this once
      - traefik.http.services.traefik.loadbalancer.server.port=8080
      - traefik.http.routers.https-redirect.rule=HostRegexp(`{any:.*}`)
      - traefik.http.routers.https-redirect.middlewares=redirect@file
      - traefik.http.routers.https-redirect.service=api@internal

  m1:
    image: golang:alpine
    container_name: m1
    restart: always
    volumes :
      - ./microservices/m1:/go/src/microservices/m1
      # cache build files
      - go-cache:/go/pkg
    working_dir:/go/src/microservices/m1
    env_file:
      - ./docker/main.env
    ports:
      - 9100:9100
    links:
      - db:db
      - redis:redis
    command: sh -c "go build -o deploy/m1.exe && ./deploy/m1.exe"
    labels:
      - traefik.enable=true
      - traefik.http.routers.m1.rule=Host(`m1.nip.io`)
      - traefik.http.routers.m1.entrypoints=websecure
      - traefik.http.routers.m1.tls=true
      - traefik.http.services.m1.loadbalancer.server.port=9100

  m2:
    image: golang:alpine
    container_name: m2
    restart: always
    volumes :
      - ./microservices/m1:/go/src/microservices/m2
      # cache build files
      - go-cache:/go/pkg
    working_dir:/go/src/microservices/m2
    env_file:
      - ./docker/main.env
    ports:
      - 9200:9200
    links:
      - db:db
      - redis:redis
    command: sh -c "go build -o deploy/m2.exe && ./deploy/m2.exe"
    labels:
      - traefik.enable=true
      - traefik.http.routers.m2.rule=Host(`m2.nip.io`)
      - traefik.http.routers.m2.entrypoints=websecure
      - traefik.http.routers.m2.tls=true
      - traefik.http.services.m2.loadbalancer.server.port=9200

  m3:
    image: golang:alpine
    container_name: sso
    restart: always
    volumes :
      - ./microservices/m3:/go/src/microservices/m3
      # cache build files
      - go-cache:/go/pkg
    working_dir:/go/src/microservices/m3
    env_file:
      - ./docker/main.env
    ports:
      - 9300:9300
    links:
      - db:db
      - redis:redis
    command: sh -c "go build -o deploy/m3.exe && ./deploy/m3.exe"
    labels:
      - traefik.enable=true
      - traefik.http.routers.m3.rule=Host(`m3.nip.io`)
      - traefik.http.routers.m3.entrypoints=websecure
      - traefik.http.routers.m3.tls=true
      - traefik.http.services.m3.loadbalancer.server.port=9300
...