Ограничить доступ к Интернету - Контейнер для докеров
У меня есть ситуация, чтобы ограничить доступ в Интернет контейнера в сети балансировки нагрузки. например, на картинке ниже
![easy for your reference]()
Только container4 подключается к Интернету; остальные три общаются только через container4 с внешним миром. Например, если container1 требуется поддержка smtp, он отправит запрос smtp в container4 для получения доступа.
Ни один контейнер, кроме container4, не должен иметь прямого доступа к Интернету! Это должно применяться на уровне Docker.
Я полагаю, что это будет настраиваться при создании Docker Network, кто-нибудь может объяснить, как этого добиться?
Ответы
Ответ 1
Создание сети для доступа в Интернет
Сеть докеров сети --subnet = 172.19.0.0/16 internet
Создание сети для блокировки доступа в Интернет
сеть докеров сети --internal --subnet 10.1.1.0/24 no-internet
Если вы хотите подключить контейнер докеров в интернет
docker network connect internet container-name
Если вы хотите заблокировать доступ в Интернет
docker network connect no-internet container-name
Примечание
во внутренней сети мы не можем открывать порты для подключения внешнего мира, пожалуйста, обратитесь к этому вопросу для более подробной информации
Ответ 2
Как оказалось здесь, я получил это для работы с docker-compose. Сохранить как docker-compose.yml
:
version: '3'
services:
outgoing-wont-work:
image: alpine
networks:
- no-internet
command: ping -c 3 google.com # will crash
internal-will-work:
image: alpine
networks:
- no-internet
command: ping -c 3 internal-and-external
internal-and-external:
image: alpine
networks:
- no-internet
- internet
command: ping -c 3 google.com
networks:
no-internet:
driver: bridge
internal: true
internet:
driver: bridge
Затем запустите docker-compose up -d
, docker-compose ps
через несколько секунд покажет что-то вроде этого:
Name Command State Ports
----------------------------------------------------------------------------------
dco_inet_internal-and-external_1 ping -c 3 google.com Exit 0
dco_inet_internal-will-work_1 ping -c 3 internal-and-ext ... Exit 0
dco_inet_outgoing-wont-work_1 ping -c 3 google.com Exit 1
Ответ 3
Вы слышали о Docker Compose? Это простой способ управлять несколькими контейнерами и имеет отличную поддержку сети:
https://docs.docker.com/compose/overview/
https://docs.docker.com/compose/networking/
Пример docker-compose.yml
в вашем случае (непроверенный):
version: '2'
services:
container1:
image: ...
container_name: container1
networks:
- container1
container2:
image: ...
container_name: container2
networks:
- container2
container3:
image: ...
container_name: container3
networks:
- container3
container4:
image: ...
container_name: container4
ports:
- "80:80"
networks:
- container1
- container2
- container3
networks:
container1:
container2:
container3:
Таким образом, имя хоста контейнеров будет похоже на определенный container_name
.