Изолировать контейнеры, подключенные к оверлейной сети traefik на swarm - PullRequest
1 голос
/ 06 мая 2019

У меня есть несколько стеков, работающих в Docker Swarm с traefik, где службы в каждом стеке подключены к оверлейной сети (traefik-net), поэтому traefik может общаться с ними.

Если у меня в каждом стеке есть служба, которая называется одним и тем же именем службы (service1), а затем есть другая служба (service2) в любом стеке, попробуйте получить к ней доступ по имени службы (ping http://service1), it ' Иногда я попаду в сервис1 в другой стек, а иногда в сервис 1 и тот же стек.

docker network create --driver overlay traefik-net

stack1:

services:
  service1:
    networks:
      - default
      - traefik-net

  service2:
    networks:
      - default
      - traefik-net

networks:
  traefik-net:
    external: true

stack2:

services:
  service1:
    networks:
      - default
      - traefik-net

networks:
  traefik-net:
    external: true

Я хочу, чтобы service2 работал только с service1, находящимся в том же стеке.

Я предположил, что служба может только ударить службу в другом стеке, добавив префикс имени стека к имени службы (ping http // stack2_service1). Но я узнал, что из-за наложенной сети traefik-net они, очевидно, могут вызывать друг друга без префикса имени стека.

Есть ли способ отключить обмен данными между стеками без префиксов имен стеков?

Или, может быть, есть конкретное решение проблемы?

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

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

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

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

Итак, давайте представим вашу текущую реализацию.Теперь у вас есть одна сеть traefik-net, и вы подключили туда все свои услуги, поэтому ваш дизайн выглядит следующим образом:

enter image description here

Что вам нужно сделатьЧтобы изолировать сервисы в разных стеках, но сохранить их доступными для traefik, необходимо создать отдельную оверлейную сеть в каждом файле стека и подключить услугу traefik к этим сетям, определив их как внешние в файле стека traefik.В итоге вы получите следующее:

enter image description here

В этой реализации весь трафик между различными стеками возможен только через службу traefik, а не напрямую.

0 голосов
/ 07 мая 2019

Я нашел похожий вопрос: Docker DNS с несколькими проектами, использующими одну сеть

Похоже, что нет другого решения, кроме как всегда нажимать stack_service вместо service.

...