Я пытаюсь обезопасить контейнеры в своей домашней лаборатории.
Основная цель:
- изоляция nginxA и nginxB, поэтому они не могут общаться друг с другом через
172.17.0.1
(например, предотвращение nginxA от достижения nginxB с помощью 172.17.0.1:5001
)
- изоляция nginxA и nginxB с локального хоста, что делает их доступными исключительно через traefik
- Разрешение nginxA поговорить с nginxA_DB, которые находятся в одном стеке, но не позволяют другим контейнерам или traefik общаться с nginxA_DB
Каждый стек докеров имеет службу nginx/apache, порт которой отображается в docker-compose следующим образом:
docker-compose-nginxA.yml:
сети:
внутренний:
IPAM:
конфигурация:
- подсеть: 10.0.0.0/29
...СНИП...
нгинксА:
сети:
внутренний:
ipv4_адрес: 10.0.0.2
порты:
- "172.17.0.1:5000:80"
docker-compose-nginxB.yml:
сети:
внутренний:
IPAM:
конфигурация:
- подсеть: 10.0.0.8/29
...СНИП...
нгинксБ:
сети:
внутренний:
ipv4_адрес: 10.0.0.10
порты:
- "172.17.0.1:5001:80"
Сделать эти услуги доступными только через локальный хост (172.17.0.1) или траефик,
Traefik также находится на той же машине со следующей конфигурацией:
http:
маршрутизаторы:
нгинксА:
Точки входа:
- сеть
сервис: nginxA
нгинксБ:
Точки входа:
- сеть
сервис: nginxB
...СНИП...
Сервисы:
нгинксА:
loadBalancer:
серверы:
- адрес: http://172.17.0.1:5000
нгинксБ:
loadBalancer:
серверы:
- адрес: http://172.17.0.1:5001
Идея заключалась в том, чтобы соединить все контейнеры в одном /24
сеть с traefik, не раскрывая никаких портов через компоновку, но единая сеть traefik не изолирует контейнеры друг от друга, только снаружи.
Другая идея состояла в том, чтобы создать /31
network для каждого контейнера и объединить все сети traefik, но я не уверен, что это сделает изоляцию, как задумано. например.
нгинксА:
сети:
внутренний:
ipv4_адрес: 10.0.0.2 #/29
nginxA-трафик:
ipv4_адрес: 10.50.0.1 #/31
трафик:
сети:
nginxA-трафик:
nginxB-трафик:
...
Спасибо, что дочитали до этого места! У вас есть идеи, как это можно сделать?