LXD 容器和 DHCP 主机

LXD 容器和 DHCP 主机

我目前正在处理容器,但在配置容器以使用网络的 DHCP 时遇到了麻烦,因此可以通过主机名(容器名称)直接访问容器。这意味着其他设备上的应用程序可以访问容器上的服务,如果我想通过 SSH 连接到容器,则无需先通过 SSH 连接到主机,然后使用 lxc exec [容器名称] bash。

我成功创建了一个 Ubuntu 16.04 容器,它运行良好。虽然它在我使用 lxd init 时最初配置的 IP 范围内运行(10.0.1.*),但我想让它们使用主网络的 IP 范围和 DHCP。

我通过在 /etc/network/interfaces 文件中添加以下内容来实现此目的:

auto br0
iface br0 inet static
    address 192.168.1.64
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.0.255
    gateway 192.168.1.1
    dns-nameservers 192.168.1.254

bridge_ports enp3s0  
iface enp3s0 inet manual

重新加载网络服务后,一切正常,可以在网络上看到容器,反之亦然。然而,主机却失去了对互联网的访问,无法再看到网络上的其他设备,反之亦然。

恢复更改后,主机可以再次访问网络,但是,容器随后返回到其原始 IP 范围,并且无法看到网络。

我进行了进一步的修补,但没有成功,所以我回到拥有互联网的主机,并且容器目前不可见;这不是我想要的。

有人能进一步了解我可能出错的地方吗?我应该做些完全不同的事情吗?

提前致谢。

答案1

为了将所有内容都记录在一起,在我的设置中,所有容器及其主机都从同一个 DHCP 服务器(我的路由器)获取其 IP,并且都可以通过 LAN 访问。

在 Ubuntu Server 16.04 主机上,我的/etc/network/interfaces读数:

iface br0 inet dhcp
  bridge_ports eth0
iface eth0 inet manual

正如我在评论中所说,重新启动后,当主机的网络按预期工作时,我认为您可以使用重新配置 LXD 的网络(以及其他东西)sudo dpkg-reconfigure -p medium lxd

当我这样做时lxd init,我回答yesDo you want to configure the LXD bridge (yes/no)?,然后告诉它,<No>当它要求设置网络桥时,<Yes>我想使用一个现有的网络桥,并将其br0作为桥名。

最后,我依靠 MAC 为任何机器(包括主机和几个容器)分配静态 IP,在我的 DHCP 服务器(我的路由器)设置中。这简化了容器和主机中的设置。

答案2

好吧,最后,唯一能解决这个问题的方法就是重新安装操作系统。我现在运行的是 Ubuntu 17.10。我没有升级,而是重新安装了(但制作了旧安装的映像,以备不时之需)。

至于 /etc/network/interfaces 文件,它很简单:

auto br0
iface br0 inet dhcp

bridge_ports enp3s0
iface enp3s0 inet manual

至于 lxd 配置文件,其配置如下:

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic
name: default

真的不确定为什么它拒绝在 16.04.3 LTS 上运行,但至少它可以在 17.10 上运行。

无论如何,谢谢你的帮助!

相关内容