Docker에 관리되지 않는 브리지 추가

Docker에 관리되지 않는 브리지 추가

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>

관련 정보