Публикация порта на Docker Swarm только для одной из подключенных сетей - PullRequest
0 голосов
/ 06 января 2019

Я использую рой на нескольких узлах для размещения некоторых веб-сервисов. Узел менеджера запускает traefik в качестве конечной точки прокси и ssl.

Вот упрощенный файл композиции для одного из стеков роя:

version: '3.2'

services:
  test1:
    networks:
      - internal
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  otherservice:
    image: dummy/other
    ports:
      - 9000
    networks:
      - internal
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

  loadbalancer:
    image: traefik
    ports:
      - 80:80
      - 443:443
      - 9999:8080
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - internal
      - gateway

networks:
  internal:
    external: true
  gateway:
    external: true

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

Проблема с указанным выше конфигом, порты, опубликованные в сервисе traefik, публикуются в обеих сетях. Есть ли шанс опубликовать эти порты только в одной из используемых сетей, в данном случае в шлюзе?

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

Спасибо!

РЕДАКТИРОВАТЬ: добавить некоторую информацию к проблеме. Вот как выглядят порты прослушивания на одном из моих рабочих узлов

dockerd    2342            root   44u  IPv6 1439543      0t0  TCP *:80 (LISTEN)
dockerd    2342            root   50u  IPv6 1439561      0t0  TCP *:443 (LISTEN)
dockerd    2342            root   52u  IPv6 1439579      0t0  TCP *:9999 (LISTEN)

в них нет ни одного контейнера, публикующего порт, поэтому я подозреваю, что порты публикуются из-за оверлейной сети в сервисе loadbalancer, даже если сервис не работает на рабочих узлах. Я не прав?

...