Я использую рой на нескольких узлах для размещения некоторых веб-сервисов. Узел менеджера запускает 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, даже если сервис не работает на рабочих узлах. Я не прав?