Docker와 LXD를 사용하여 서버를 설정하고 있습니다. Docker와 LXD 간에 공유할 수 있는 브리지를 갖고 싶은 여러 VLAN이 있는 실제 네트워크가 있습니다. LXD에서는 상대적으로 쉬웠지만 Docker는 모든 것을 제어하고 싶어하는 성가신 여자친구와 같아서 제대로 작동하도록 하는 데 어려움을 겪고 있습니다.
Netplan 구성은 다음과 같습니다.
network:
version: 2
ethernets:
enp5s0:
match:
macaddress: 84:a9:3e:86:7b:d4
set-name: enp5s0
enx0s0:
match:
macaddress: 00:e0:4c:02:61:57
set-name: enx0s0
bridges:
vlan69: # Untagged
interfaces:
- enp5s0
parameters:
stp: true
forward-delay: 4
dhcp4: yes
dhcp6: no
vlan36:
interfaces:
- enx0s0.36
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
vlan32:
interfaces:
- enp5s0.32
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
vlan1:
interfaces:
- enp5s0.1
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
vlans:
enx0s0.36:
accept-ra: no
id: 36
link: enx0s0
enp5s0.32:
accept-ra: no
id: 32
link: enp5s0
enp5s0.1:
accept-ra: no
id: 1
link: enp5s0
LXD를 사용하면 VLAN 중 하나에 NIC를 추가하는 것만큼 쉬웠습니다.
devices:
enp1s0:
nictype: bridged
parent: vlan36
type: nic
하지만 Docker는 다루기가 쉽지 않은 것 같습니다. 몇 시간 동안 Docker 네트워크의 소스를 검색한 끝에 이것을 생각해냈습니다.
root@host:~# docker network create vlan32 \
-o com.docker.network.bridge.inhibit_ipv4=true \
-o com.docker.network.bridge.name=vlan32 \
--subnet=192.168.32.0/24 \
--gateway=192.168.32.254
이것은 작업을 잘 수행하도록 연결되었습니다. 컨테이너 연결은 잘 작동했고, 네트워크에 액세스할 수 있었고, 내 라우터는 컨테이너가 연결된 것을 볼 수 있었고, 네트워크의 다른 장치에 대한 핑 실행도 작동했습니다. 컨테이너로 다시 들어오는 연결을 설정할 수 없습니다. 컨테이너를 핑하면 네트워크에 연결할 수 없게 됩니다. 이는 Docker뿐만 아니라 LXD에도 영향을 미칩니다. 따라서 Docker가 단순히 브리지를 채택하기 위해 이음새를 연결하더라도 브리지에 대해 뭔가를 수행합니다. Docker 서비스를 비활성화하고 재부팅하면 LXD 컨테이너의 문제가 해결됩니다.
답변1
이 솔루션은 솔기가 제대로 작동하지 않지만 내가 원하는 방식으로 작동하고 솔기가 작동합니다. 문제는 드라이버 bridge
가 -o parent
. 대신에 자체 장치를 생성할 뿐입니다.
넷플랜
network:
version: 2
ethernets:
<NIC>:
dhcp4: yes
bridges:
vlan<VLAN>:
interfaces:
- <NIC>.<VLAN>
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
vlans:
<NIC>.<VLAN>:
accept-ra: no
id: <VLAN>
link: <NIC>
LXD
devices:
enp1s0:
nictype: bridged
parent: vlan<VLAN>
도커
root@host:~# docker network create <NETWORK_NAME> \
--subnet 192.168.x.x/24 \
--gateway 192.168.x.254 \
--driver macvlan \
-o parent=vlan<VLAN>