Настроил Open vSwitch мост и повесил IP на него:
# ovs-vsctl add-br switch0
# ip add add 192.168.100.1/24 dev switch0
# ip a
...
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
link/ether 52:9d:e1:60:1d:56 brd ff:ff:ff:ff:ff:ff
5: switch0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
link/ether 16:63:eb:47:13:41 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 scope global switch0
valid_lft forever preferred_lft forever
Проверил статус моста после этого и, кажется, что все нормально:
# ovs-vsctl show
1b236728-4637-42a5-8b81-53d4c93a6803
Bridge "switch0"
Port "switch0"
Interface "switch0"
type: internal
ovs_version: "2.3.2"
Создал 2 LXC контейнера и поставил им такие конфиги:
# vim /var/lib/lxc/veth03-ovs/config
...
lxc.network.type = veth
lxc.network.flags = up
lxc.network.script.up = /etc/lxc/ifup
lxc.network.script.down = /etc/lxc/ifdown
lxc.network.hwaddr = 00:16:3e:15:b3:62
lxc.network.ipv4 = 192.168.100.10
# vim /var/lib/lxc/veth04-ovs/config
...
lxc.network.type = veth
lxc.network.flags = up
lxc.network.script.up = /etc/lxc/ifup
lxc.network.script.down = /etc/lxc/ifdown
lxc.network.hwaddr = 00:16:3e:15:b3:62
lxc.network.ipv4 = 192.168.100.11
ifup и ifdown соответсвенно стартуют при поднятии и остановке сетевого стека для контейнера и выглядят так:
# cat /etc/lxc/ifup
#!/bin/bash
BRIDGE=”switch0″
ovs-vsctl –may-exist add-br $BRIDGE
ovs-vsctl –if-exists del-port $BRIDGE $5
ovs-vsctl –may-exist add-port $BRIDGE $5
# cat /etc/lxc/ifdown
#!/bin/bash
BRIDGE=’switch0′
ovs-vsctl –if-exists del-port $BRIDGE $5
Стартую контейнеры и они видят друг друга:
# lxc-start -n veth04-ovs
# lxc-start -n veth03-ovs
# lxc-ls -f
NAME STATE IPV4 IPV6 GROUPS AUTOSTART
-----------------------------------------------------------------
...
veth03-ovs RUNNING 192.168.100.10 - - NO
veth04-ovs RUNNING 192.168.100.11 - - NO
# lxc-attach -n veth03-ovs -- ping -c2 192.168.100.11
PING 192.168.100.11 (192.168.100.11) 56(84) bytes of data.
64 bytes from 192.168.100.11: icmp_seq=1 ttl=64 time=0.268 ms
64 bytes from 192.168.100.11: icmp_seq=2 ttl=64 time=0.055 ms
--- 192.168.100.11 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.055/0.161/0.268/0.107 ms
# lxc-attach -n veth04-ovs -- ping -c2 192.168.100.10
PING 192.168.100.10 (192.168.100.10) 56(84) bytes of data.
64 bytes from 192.168.100.10: icmp_seq=1 ttl=64 time=0.327 ms
64 bytes from 192.168.100.10: icmp_seq=2 ttl=64 time=0.062 ms
--- 192.168.100.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.062/0.194/0.327/0.133 ms
Но хост машина с IP 192.168.100.1 не видит ни 192.168.100.10, ни 192.168.100.11. Контейнеры тоже не пингуют 192.168.100.1.
Конфиг бриджа после старта виртуалок:
# ovs-vsctl show
1b236728-4637-42a5-8b81-53d4c93a6803
Bridge "switch0"
Port vethNSCEGY
Interface vethNSCEGY
Port "switch0"
Interface "switch0"
type: internal
Port "vethD6TFEB"
Interface "vethD6TFEB"
ovs_version: "2.3.2"
Собственно по моему убеждению, хост тоже должен быть виден для контейнеров, так как сеть одна. Исправьте меня, если я неверно понимаю суть этого бриджинга в Open vSwitch.
Спасибо.