物理主机正在运行 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
用于在物理主机上配置网络,netplan
YAML配置如下:
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]
但并不是特别相关,因为任何netplan
YAML 配置都会产生相同的错误,即使是“空”配置:
#
(根据要求提供这些不相关的细节...因为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(这已经在我的任务列表中,但我们希望先升级所有容器)。