Ubuntu 22 LXC 容器中的 netplan/udevadm 损坏

Ubuntu 22 LXC 容器中的 netplan/udevadm 损坏

物理主机正在运行 18.04.6 LTS 和 LXD/LXC 3.0.3。我有两个非特权容器,一个 Ubuntu 18.04 容器和一个新的 Ubuntu 22.04 容器。(使用提供的默认映像lxc launch。)

LXD 配置为使用桥接网络(用于将容器直接暴露给外部网络,以便我可以使用 管理网络netplan)。使用 LXD 配置文件设置来设置网络是不可取的,因为我们有依赖于netplan容器内的系统,这些系统在网络上的不同主机之间移动 IP 别名。

netplan在 Ubuntu 18.04 容器中运行良好,但由于udevadm trigger在 Ubuntu 22.04 容器(netplan依赖)中返回错误,netplan因此失败。

运行netplan apply出现以下错误:

eth0: Failed to write 'change' to '/sys/devices/virtual/net/eth0/uevent': Permission denied
...etc...
subprocess.CalledProcessError: Command '['udevadm', 'trigger', '--attr-match=subsystem=net']' returned non-zero exit status 1.

看来问题的根源就在于它udevadm trigger被破坏了。

我遇到的问题似乎与这里遇到的问题相同:

https://discuss.linuxcontainers.org/t/no-ipv4-on-arch-linux-containers/6395/23

我已经尝试了上述对话中讨论的事情。

在容器中创建此文件:

/etc/systemd/system/systemd-networkd.service.d/lxc.conf

[Service]
BindReadOnlyPaths=/sys

尝试将其添加到容器配置:

lxc.mount.auto: sys

后来是这样的:

lxc.mount.auto = proc:rw sys:ro

我也尝试设置security.nesting为“true”。

这些似乎都无济于事。

netplan我看到另一个用户在使用Ubuntu 22 LXC 容器时遇到了类似的问题:

https://discuss.linuxcontainers.org/t/unable-to-utilize-wireless-adapter-in-a-container/18176

netplan看来在没人能提供任何解决方案之后他们就放弃了。

netplan用于在物理主机上配置网络,netplanYAML配置如下:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0f0:
      dhcp4: false
  bridges:
    br0:
      interfaces: [enp1s0f0]
      addresses: [10.100.7.2/16]
      gateway4: 10.100.0.1
      nameservers:
        addresses: [8.8.8.8,1.1.1.1]
      parameters:
        stp: true
        forward-delay: 0

netplan产生错误的 Ubuntu 22 容器上的 YAML 文件如下所示(此处屏蔽了公共 IP):

network:
        version: 2
        ethernets:
                eth0:
                        dhcp4: false
                        addresses: [108.x.x.195/24]
                        routes:
                        - to: default
                          via: 108.x.x.1
                        nameservers:
                                addresses: [8.8.8.8,1.1.1.1]

但并不是特别相关,因为任何netplanYAML 配置都会产生相同的错误,即使是“空”配置:

# 

(根据要求提供这些不相关的细节...因为netplan在 Ubuntu 18.04 物理主机上运行 Ubuntu 22.04 容器时完全损坏。)

我可以通过在容器内手动运行以下命令(公共 IP 被屏蔽)来在网络上获取 Ubuntu 22 容器:

ip addr add 108.x.x.195/24 dev eth0
ip route add 108.x.x.1 dev eth0
ip route add default via 108.x.x.1

可能相关:https://github.com/systemd/systemd/issues/14060

更新:我还尝试了以下操作:

  • 将 LXD 从 3.0.3 升级到 5.x(没有帮助)
  • Ubuntu 18.04 主机上的 Ubuntu 20.04 容器(运行良好,但没有帮助,因为我需要 22.04 容器)
  • Ubuntu 20.04 主机上的 Ubuntu 22.04 容器(运行良好)

因此,我目前的计划是将所有物理主机升级到 20.04 或 22.04(这已经在我的任务列表中,但我们希望先升级所有容器)。

相关内容