Сервис Docker открыт публично, хотя сделан для предоставления портов только локальному хосту - PullRequest
0 голосов
/ 31 мая 2018

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

Я удалил и повторно развернул стек докера, но все равнопроблема.

Вот мой docker-compose.yml, который я использовал для развертывания службы в стеке

version: "3"
networks:
    api-net:
        ipam:
            config:
                - subnet: 10.0.10.0/24

services:
    health-api:
        image: myprivateregistry:5000/healthapi:qa
        ports:
            - "127.0.0.1:9010:9010"
        networks:
            - api-net
        depends_on:
            - config-server
        deploy:
            mode: replicated
            replicas: 1
            placement:
                constraints:
                    - node.role == manager

У меня нетдобавили сервис, от которого это зависит, так как я не думаю, что это проблема.

Мало кто говорит, что он не поддерживается в режиме Docker Swarm.Чем то, что решение в этом случае.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

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

Примерно так:

ports:
    - "80:80"
    - "443:443"
0 голосов
/ 07 июня 2018

Цитирование https://github.com/moby/moby/issues/32299#issuecomment-290978794:

On swarm mode, if you publish something (ports for stack deploy), it is published on the ingress network, and thus it is public. There is a few ways to get around, but putting kind/bug on that because we should at least warn people about that when doing a stack deploy with ports that have this notation (i.e. host:port:port).

To work around this, there is a few ways:

- first, you should publish mongo ports only if you want it to be public, otherwise, it is available through the name discovery bundle in docker (another container/service on the same network will be able to reach it through mongo dns name).
- If you want to publish it in the host and not in ingress (so not swarm public, just on the host it is running, same way as without swarm mode), you need to use ports expanded syntax.

... (example and some more details regarding the effect of the extended syntax).

Итак, причина - входная сеть Swarm, которая делает каждый порт общедоступным.Обходной путь с использованием расширенного синтаксиса не привязывается к интерфейсу обратной связи , а к интерфейсу 0.0.0.0 хоста, что по-прежнему является улучшением по сравнению с внешним портом через входную сеть.

...