Docker Swarm DNS возвращает сервисы только в локальном режиме - PullRequest
0 голосов
/ 20 марта 2019

Я хочу автоматически очистить данные от всех созданных служб в моем докере с помощью Prometheus.Я делаю это на кластере с двумя работниками и около 7 служб.Службы, которые я хочу очистить, развернуты по всему миру.

Я настроил Prometheus для очистки, используя dns_sd_config и цель tasks.cadvisor.Это приведет к возвращению одного хоста, в то время как должно быть две службы.

> tasks.cadvisor
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   tasks.cadvisor
Address: 10.0.1.9

В этом примере я могу найти только один узел CAdvisor, в то время как на самом деле их два.

Однако, когда я выполняю поиск службы, которая дважды запускается на одном и том же рабочем узле, при поиске удается найти обе службы

> tasks.nginx
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   tasks.nginx
Address: 10.0.1.25
Name:   tasks.nginx
Address: 10.0.1.20

Похоже, что Docker DNS не может выполнить поиск за пределами своего собственного работника.узел.Как настроить Docker таким образом, чтобы поиск DNS возвращал все экземпляры службы для всех работников?

Вот мои текущие настройки докера:

version: '3'
services:
  db:
    image: postgres
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    volumes:
      - db-data:/var/lib/postgresql/data
  backend:
    build: reggie-server
    image: requinard2/reggie-server
    command: python manage.py runserver 0.0.0.0:8000
    deploy:
      mode: global
    environment:
      - PRODUCTION=1
    depends_on:
      - db
  nginx:
    build: reggie-nginx
    image: requinard2/reggie-nginx
    deploy:
      mode: global
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - "backend"
      - "prometheus"
      - "grafana"
  prometheus:
    build: reggie-prometheus
    image: requinard2/reggie-prometheus
    ports:
      - "9090:9090"
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    volumes:
      - prometheus-data:/prometheus
    depends_on:
      - backend
      - cadvisor
  grafana:
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    image: grafana/grafana:5.1.0
    environment:
      GF_SERVER_ROOT_URL=/grafana:
    volumes:
      - grafana-data:/var/lib/grafana
    depends_on:
      - "prometheus"
  cadvisor:
    image: google/cadvisor:latest
    deploy:
      mode: global
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    depends_on:
      - redis
  redis:
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    image: redis:latest
volumes:
  backend-code:
  db-data:
  grafana-data:
  prometheus-data:

1 Ответ

0 голосов
/ 22 марта 2019

После того, как я возился с ним, мне пришла в голову мысль попытаться запустить эту конкретную проблему в другой среде, отличной от той, которую я использовал. Я использовал docker-machine для создания двух локальных экземпляров, и это работало мгновенно. Я начал немного копаться, и оказалось, что мой брандмауэр не был правильно настроен. Это делало мои узлы неспособными общаться друг с другом.

Итак, я открыл следующие порты, как описано здесь :

  • 2377 / TCP
  • 7946 / TCP & UDP
  • 4789/1012 * УДП *

Это полностью решило проблему, и теперь мои узлы могут правильно общаться друг с другом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...