如何设置通过LAN进行通信的LXD容器

时间:2017-01-24 10:59:01

标签: lxc lxd

我有一组服务器登陆到局域网。我可以在机器上安装和使用LXD容器,但是对于我来说,我无法在网络上看到容器。我试图关注这些网址,但无济于事:

我的服务器设置如下:

  1. eth0 - 连接到Internet的硬件NIC
  2. eth1 - 连接到LAN的硬件NIC
  3. 如果我尝试通过lxdbr0在eth1设备上设置网桥,则容器在LAN上不可见。如果我尝试手动设置桥接br0设备,桥接到eth1并使用DHCP,则设备无法启动。

    我的/ etc / network / interfaces看起来像这样:

    iface lo inet loopback
    
    # The primary network interface
    iface eth0 inet static
        address x.x.x.x
        netmask 255.255.255.224
        gateway x.x.x.x
    
    iface eth1 inet static
        address 192.168.0.61/23
    
    iface br0 inet dhcp
        bridge_ports eth1
        bridge-ifaces eth1
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
    
    auto lo eth0 eth1 br0
    

    是否可以创建在LAN上可见且可以连接到互联网的容器?

    UXntu 16.04上的LXD v2.7

1 个答案:

答案 0 :(得分:8)

是的,这很有可能。我还没有玩过LXD 2.3中引入的所有新网络功能,所以我无法说出任何一个,但看起来你想要一个非常简单的网络布局,所以这些功能可能不会甚至发挥作用。我做了一些类似于你的网络布局的事情。我的所有服务器中都有4个NIC。前两个我放入一个债券并放在我的管理网络上,后两个我放入一个LAG(另一个债券)并用于所有LXD流量。我有多个VLAN,所以我的LAG设置为中继端口,我为每个想要连接的VLAN创建VLAN设备。然后我将这些VLAN设备放入实际容器使用的桥接器中。

取走所有绑定和原始VLAN设备,您基本上具有相同的设置:一个用于管理LXD主机的NIC,一个用于LXD容器流量的桥接器。我没有使用默认的lxcbr0设备,但所有概念应该是相同的。

一个简单的例子

首先定义将成为网桥一部分的NIC或NIC。在您的情况下,您似乎只使用一个NIC(eth1)。您需要将NIC设置为手动。不要为其分配地址。

auto eth1
iface eth1 inet manual

接下来定义你的网桥,我不会在这里定义一个IP地址。我更喜欢将所有容器IP分配到容器内。将桥接设置为手动。当容器启动时,它将启动设备。

auto br0
iface br0 inet manual
  bridge_ports eth1
  bridge_stp off
  bridge_fd 0
  bridge_maxwait 0

现在,您所要做的就是在容器的配置文件中使用此桥接器。

lxduser@lxdhost:~$ lxc profile show default
name: default
config: {}
description: ""
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0

现在启动容器并编辑网络配置。例如,在基于Debian的系统中,您可以编辑/ etc / network / interfaces(在容器中)。在基于Red Hat的系统中,您可以编辑/ etc / sysconfig / network-scripts / ifcfg-eth0(在容器中)。这是Debian的例子。

auto eth0
iface eth0 inet dhcp

只要DHCP在网络上工作,即插入了eth1(在您的LXD主机上),那么容器应该获得一个地址并且可以在该网络上路由。为了获得互联网访问权限,必须将eth1插入具有Internet访问权限的子网中,而不依赖于容器。

更复杂的网络

如果您想将容器放在不同的VLAN上,想要在主机上或两者都容错,那么这需要更多的设置。我在LXD主机上使用下面的配置文件。

############################
# PHYSICAL NETWORK DEVICES #
############################

# Management network interface
auto enp2s0f0
iface enp2s0f0 inet static
    address 10.1.31.36/24
    gateway 10.1.31.1
    dns-nameserver 10.1.30.2 10.1.30.3 75.75.75.75
    dns-search harmonywave.com

#iface enp2s0f0 inet6 dhcp

# Second network interface
auto enp2s0f1
iface enp2s0f1 inet manual

# LXD slave interface (1)
auto enp3s0f0
iface enp3s0f0 inet manual
    bond-master bond1

# LXD slave interface (2)
auto enp3s0f1
iface enp3s0f1 inet manual
    bond-master bond1

##########################
# BONDED NETWORK DEVICES #
##########################

# Bond network device
auto bond1
iface bond1 inet manual
    bond-mode 4
    bond-miimon 100
    bond-lacp-rate 1
    bond-slaves enp3s0f0 enp3s0f1
    bond-downdelay 400
    bond-updelay 800

####################
# RAW VLAN DEVICES #
####################

# Tagged traffic on bond1 for VLAN 10
iface bond1.10 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 20
iface bond1.20 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 30
iface bond1.30 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 31
iface bond1.31 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 42
iface bond1.42 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 50
iface bond1.50 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 90
iface bond1.90 inet manual
    vlan-raw-device bond1

##########################
# BRIDGE NETWORK DEVICES #
##########################

# Bridged interface for VLAN 10
auto br0-10
iface br0-10 inet manual
    bridge_ports bond1.10
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0    

# Bridged interface for VLAN 20
auto br0-20
iface br0-20 inet manual
    bridge_ports bond1.20
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0    

# Bridged interface for VLAN 30
auto br0-30
iface br0-30 inet manual
    bridge_ports bond1.30
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

# Bridged interface for VLAN 31
auto br0-31
iface br0-31 inet manual
    bridge_ports bond1.31
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

# Bridged interface for VLAN 42
auto br0-42
iface br0-42 inet manual
    bridge_ports bond1.42
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

# Bridged interface for VLAN 50
auto br0-50
iface br0-50 inet manual
    bridge_ports bond1.50
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

# Bridged interface for VLAN 90
auto br0-90
iface br0-90 inet manual
    bridge_ports bond1.90
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

让我们打破这个局面。首先,我定义了物理网卡。这是PHYSICAL NETWORK DEVICES部分。我和你的第一个NIC没有什么不同(eth0对你来说是enp2s0f0)。我只是静态地定义它并给它一个地址。我在管理网络上为此NIC分配了一个地址。第三和第四个NIC用于容器流量。我想在LAG中使用LACP,因此我将设备定义为手动,并使它们成为" bond1"的对象。

接下来我定义我的绑定设备。这是BONDED NETWORK DEVICES部分。在这种情况下,只是容器流量的一个债券。再次,我将其设置为手动并将绑定模式定义为4(LACP)。可以轻松设置不同类型的键(主动 - 被动,主动 - 主动等)。

接下来,因为我将第三个和第四个NIC物理连接到交换机上的中继端口,所以我必须指定dot1Q以便实际标记流量。我为容器可能处于的每个VLAN创建一个原始VLAN设备。我将.XX附加到" XX"是VLAN ID。这不再是必要的,我这样做是为了便于识别。然后使用" vlan-raw-device"标记设备。节。这是RAW VLAN DEVICES部分。

最后,在BRIDGE NETWORK DEVICES部分,我为每个VLAN设备创建了网桥。这就是容器实际使用的内容。同样,我将其设置为手动,并且不定义在容器内定义的IP地址。

现在我所要做的就是将我想要的VLAN上的任何网桥分配给容器。为简单起见并避免配置每个容器,我只为每个网桥/ VLAN创建一个配置文件。例如,这是我的VLAN 31的配置文件。

lxduser@lxdhost:~$ lxc profile show 31_vlan_int_server
name: 31_vlan_int_server
config: {}
description: ""
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0-31
    type: nic

然后我只是将此配置文件分配给我想要在VLAN 31上的任何容器。此时我可以将容器' s / etc / network / interfaces文件设置为dhcp(如果在该VLAN上启用了DHCP)或者给它一个静态IP地址,该地址是该VLAN的一部分。

整个网络布局看起来像这样。

LXD Multi-VLAN setup

容器使用桥内的veth设备(LXD创建)。主机也将原始vlan设备添加到网桥,它们都使用实际的绑定设备,后者又使用物理网卡。

关于连接问题

最后,关于您无法连接到互联网的问题,请确保您的容器所使用的网桥具有互联网访问权限。我喜欢采取逐步的故障排除方法。

  1. 确保eth1可以访问互联网。暂时删除任何绑定和桥接配置,并直接在主机上使用eth1。将其从手动更改为静态并为其提供IP地址。
    • 在主机上可以ping通网卡的IP地址吗?
      • 是? NIC正在运行,继续排除故障。没有? NIC设置不正确,其他一切都将失败。
    • 在主机上可以ping同一子网上的其他主机吗?
      • 是?正确设置切换,继续进行故障排除。没有?问题是连接到网络。盒子本身可能存在静态路由问题,交换机可能存在问题。
    • 在主机上,您可以ping另一个子网上的计算机(尝试ping 8.8.8.8)吗?
      • 是?路由工作正常,继续排除故障。没有?主机上可能的网关配置错误。路由器可能存在问题。盒子上的静态路由可能存在问题(检查最后的网关)。
    • 您可以解析DNS地址(试试ping www.google.com)吗?
      • 是? DNS解析正确设置,继续进行故障排除。没有? DNS解析问题。检查/etc/resolv.conf或resolvconf设置。
  2. 如果在静态设置eth1时一切正常,那么您就知道NIC运行正常了。下一步是将eth1更改回手动,从中删除静态IP,然后重新创建桥。现在在桥本身上分配静态IP地址,并重复步骤1中的所有子步骤。
  3. 如果一切正常,那么您应该能够连接容器(将网桥设置为手动并删除静态IP后)。如果没有,则获取容器上的地址(静态或DHCP)并重复步骤1中的子步骤。