2016-06-10 2 views
0

Во-первых, я знаю о создании интерфейса VXLAN с тэгом на основе команды IP:Как добавить Vxlan тег для изоляции различных групп Докер контейнеров

ip link add vxlan-br0 type vxlan id <tag-id> group <multicast-ip> local <host-ip> dstport 0

Но это бесполезно для моего фактического спроса, и мое требование, чтобы изолировать несколько контейнеров Docker с использованием различных тегов, что-то вроде:

brctl addif br1 veth111111 tag=10 # veth111111 is the netdev used by docker container 1 brctl addif br1 veth222222 tag=20 # veth222222 is the netdev used by docker container 2 brctl addif br1 veth333333 tag=10 # veth111111 is the netdev used by docker container 3

Я хочу, чтобы изолировать контейнер 2 из контейнера 1 и 3, и не отключают связи Bew teen container 1 и 3. Как это сделать?

ответ

0

Добавление двух мостов networks обеспечит изоляцию.

docker create network net1 
docker create network net2 

Затем запустите некоторые контейнеры

docker run -d --name one --net net1 busybox sleep 600 
docker run -d --name two --net net2 busybox sleep 600 
docker run -d --name three --net net1 busybox sleep 600 

one и three будут общаться, как они прикрепляются к тому же мосту

docker exec one ping three 
docker exec three ping one 

Другие будут терпеть неудачу, поскольку они пересекают сети/мосты

docker exec one ping two 
docker exec two ping one 
docker exec three ping two 

Вы заметите, что docker предоставляет разрешение хоста/имени внутри сети, поэтому на самом деле это разрешение имен узлов, которое не работает выше. IP-адреса также не маршрутизируются между мостами.

$ docker exec three ip ad sh dev eth0 
17: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:14:00:03 brd ff:ff:ff:ff:ff:ff 
    inet 172.20.0.3/16 scope global eth0 
     valid_lft forever preferred_lft forever 
    inet6 fe80::42:acff:fe14:3/64 scope link 
     valid_lft forever preferred_lft forever 

Ping two

$ docker exec three ping -c 1 -w 1 172.21.0.2 
PING 172.21.0.2 (172.21.0.2): 56 data bytes 

--- 172.21.0.2 ping statistics --- 
1 packets transmitted, 0 packets received, 100% packet loss 

Ping one

docker exec three ping -c 1 -w 1 172.20.0.2 
PING 172.20.0.2 (172.20.0.2): 56 data bytes 
64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.044 ms 

Эта установка будет работать с overlay networking driver как хорошо, но это более сложный в настройке.

+0

Хороший идеал. Однако этот подход требует создания мостов O (| Group |). В худшем случае | Group | = | Контейнеры |. Знаете ли вы, что максимальное количество мостов может быть создано на одном хосте? Есть ли какое-либо решение для создания O (1) -моста для общего использования и использования тега VXLAN для изоляции разных групп? – ghostplant

+0

@ghostplant Для изоляции одного контейнера используйте команду '--icc = false' в сети по умолчанию. Один мост имеет ограничение 1023 интерфейсов. По-видимому, все начинается с замедления в Linux за 9600 интерфейсов (https://support.cumulusnetworks.com/hc/en-us/articles/216420547-Calculating-the-Limitation-of-a-Linux-Bridge-In-Traditional -Mode), но я так и не запустил сеть. Вы должны получить больше мостов + интерфейсов, чем интерфейсы на мосту. Я также предостерег бы от пользовательской сети, чтобы вы могли легко использовать инструменты Docker, такие как compose, swarm, Kuberenetes, ECS и т. Д. – Matt

Смежные вопросы