Докер рой и связь между контейнерами - PullRequest
0 голосов
/ 02 февраля 2019

У меня очень большая проблема, с которой я борюсь в течение 3 дней.

Я использую Docker Swarm на удаленном сервере.20 микросервисов находятся в одной сети NetA и в стеке StackA.

Теперь я хочу добавить Zipkin и Sleuth к своим микросервисам для отслеживания всех запросов.

Все микросервисы создаются файлом docker-compose, который выглядит следующим образом:

version: '3'

services:
  myservice1:
    image: myImage1
    depends_on:
      - myService2
      - myService3
    ports:
      - "8081:80"
    environment:
      - TZ=Europe/Warsaw


  myservice3:
    image: myImage2
    environment:
      - profile=${MY_PROFILE}
      - TZ=Europe/Warsaw

...

Теперь возникает вопрос - КАК ДОБАВИТЬ Zipkin Server?

Я добавил Zipkin-сервер из Docker Hub Image.

СЕЙЧАС мой сервис ZIpkin находится: - в отдельной сети ZIPN - в отдельнойстек ZIPST

Что я должен сделать, чтобы отправить данные Zipkin по всем моим микросервисам?Какой URL-адрес я должен отправить в файле свойств: spring.zipkin.base-url = http://zipkinserver_network_zipkin_server:9411/

Может ли это быть: -container name (например, my_zipkin_server) - но я использую swarm, чтобы имя контейнера изменялось динамически?- имя сети?

Я добавил дополнительную сеть NetA в свой контейнер Zipkin, но это не решило мою проблему - в моем интерфейсе Zipkin нет никаких следов.

Пожалуйста, помогите мне, я потратил4 дня с этой проблемой безуспешно.

Сервер Zipkin должен быть в отдельном стеке, потому что будет использоваться разными приложениями.

Существует только ОДИН случай, когда работает Zipkin: когда я устанавливаю Zipkinназвание контейнера:

spring.zipkin.base-url=http://zipkinserver_container_name:9411/

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

ОК, поэтому я решил свою проблему, используя только файлы docker-compose.По Portainer я вставил свой второй файл docker-compose в секцию Stack (я создал новый Stack):

version: '3'
services:

  my_name_zipkin: --> THIS NAME SHOULD WE USE WHEN WE'D LIKE TO COMMUNICATE WITH CONTAINER
    image: openzipkin/zipkin
    ports:
      - "9411:9411"
    networks:
      - zipkin
      - my_old_network_with_services
networks:
  zipkin:
  my_old_network_with_services:
    external: true

Теперь нам нужно использовать имя «my_name_zipkin» для связи с этим сервисом.Имя службы - это имя, которое мы должны использовать для связи между контейнерами.

Итак, в файле свойств я установил:

spring.zipkin.base-url=http://zipkin:9411/
0 голосов
/ 02 февраля 2019

Сначала укажите свою собственную оверлейную сеть (см. Нижнюю часть кода ниже) и используйте ее для своих услуг.

version: '3'

services:
  myservice1:
    image: myImage1
    depends_on:
      - myService2
      - myService3
    ports:
      - "8081:80"
    environment:
      - TZ=Europe/Warsaw
    networks:
      - backbone

  myservice3:
    image: myImage2
    environment:
      - profile=${MY_PROFILE}
      - TZ=Europe/Warsaw
    networks:
      - backbone

networks:
  backbone:
   driver: overlay

Затем в своем файле составления для других сервисов, таких как ZIpkin, добавьте сеть backboneк его списку.Например:

version: '3'

services:
  ZIpkin:
    image: myZImage
    networks:
      - ZIPN
      - backbone

networks:
  backbone:
   external:
     name:  PROJ_backbone

Обратите внимание, что за пределами первого файла составления вам необходимо указать префикс project для вашей сети.Если вы не установите переменную среды COMPOSE_PROJECT_NAME, это будет имя каталога, в котором находится файл компоновки. Выполните команду docker network ls, чтобы узнать полное имя используемой сети.

...