Nicht verwaltete Bridge zu Docker hinzufügen

Nicht verwaltete Bridge zu Docker hinzufügen

Ich richte einen Server mit Docker und LXD ein. Ich habe ein echtes Netzwerk mit mehreren VLANs, zu denen ich Brücken haben möchte, die zwischen Docker und LXD geteilt werden können. Mit LXD war das relativ einfach, aber Docker ist wie diese nervige Freundin, die alles kontrollieren will, also habe ich Schwierigkeiten, es zum Laufen zu bringen.

Hier ist die Netplan-Konfiguration:

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

Mit LXD war dies so einfach wie das Hinzufügen einer Netzwerkkarte zu einem der VLANs.

devices:
  enp1s0:
    nictype: bridged
    parent: vlan36
    type: nic

Aber Docker ist offenbar nicht so einfach zu handhaben. Nach stundenlanger Suche in Quellen zu Docker-Netzwerken bin ich auf Folgendes gestoßen.

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

Das schien gut zu funktionieren. Das Verbinden der Container funktionierte einwandfrei, sie hatten Zugriff auf das Netzwerk, mein Router konnte die Verbindung erkennen, das Pingen anderer Geräte im Netzwerk funktionierte auch, aber. Sie können keine eingehende Verbindung zu den Containern herstellen. Das Pingen eines Containers führt nur zu einem nicht erreichbaren Netzwerk. Und das betrifft nicht nur Docker, sondern auch LXD. Auch wenn Docker die Bridge scheinbar einfach übernimmt, hat es etwas damit zu tun. Das Deaktivieren des Docker-Dienstes und ein Neustart beheben das Problem für die LXD-Container.

Antwort1

Diese Lösung scheint nicht richtig zu sein, aber sie funktioniert und verhält sich anscheinend so, wie ich es möchte. Ich glaube, das Problem liegt darin, dass der bridgeTreiber dies nicht unterstützt -o parent. Stattdessen erstellt er einfach sein eigenes Gerät.

Netzplan

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>

Docker

root@host:~# docker network create <NETWORK_NAME> \
            --subnet 192.168.x.x/24 \
            --gateway 192.168.x.254 \
            --driver macvlan \
            -o parent=vlan<VLAN>

verwandte Informationen