如何在 OpenStack 中为 lxc 容器设置网络?

如何在 OpenStack 中为 lxc 容器设置网络?

我正在使用 LXC 容器进行虚拟化的 OpenStack 设置。我可以启动实例(至少实例日志报告如此)。但是,我既无法 ping 它们,也无法通过 ssh 连接到它们,实例日志报告网络接口无法正确启动(请参阅下面的日志)。nova 和 neutron 日志中没有出现其他错误。

我在本地测试了 LXC 设置,直接在计算节点上启动容器并按预期连接到它。为此,流量直接桥接到容器,就像这里。从这个观察中,我得出结论,所有与 LXC 相关的模块要求都已满足(lxc-checkconfig 也报告了这一点)。然后我提取了图像(教程)并将其提供给OpenStack进行容器实例化。

此外,我还尝试通过 tcpdump 跟踪 ping 尝试期间传输的数据包。它们似乎到达了控制节点,但并未中继到计算节点(或实例/容器)。但是,我不明白它们实际上在哪里丢失以及原因。

问题:
我如何才能找出实际问题所在,即是 OpenStack 还是容器内的网络?我在这里遇到了一个先有鸡还是先有蛋的问题,因为我有网络问题,所以我无法登录到容器来查明那里的网络是否有故障……

背景:
OpenStack 设置包括一个控制节点,所有调度和网络服务都在该节点上运行,以及(目前)一个计算节点,容器在该节点启动。该设置在 Ubuntu 16.04 下运行,计算节点上有一个自定义内核 (4.8),并使用通过 devstack 安装的 OpenStack Newton。

配置:
控制节点上的devstack配置:

[[local|localrc]]

MULTI_HOST=1
RECLONE=no
PIP_UPGRADE=False

PASSWORD=ostack
ADMIN_PASSWORD=$PASSWORD
SERVICE_TOKEN=$PASSWORD
MYSQL_PASSWORD=$PASSWORD
RABBIT_PASSWORD=$PASSWORD
SERVICE_PASSWORD=$PASSWORD

HOST_IP=192.168.0.112

DEST=/opt/stack
SERVICE_DIR=$DEST/status
DATA_DIR=$DEST/data
LOGDIR=$DEST/logs
LOGFILE=$LOGDIR/stack.sh.log
GIT_BASE=http://github.com

export ENABLE_DEBUG_LOG_LEVEL=False

# enable Neutron networking
disable_service n-net
enable_service q-svc q-agt q-dhcp q-l3 q-meta neutron

# Install the tempest test suite
enable_service tempest
disable_service zookeeper

# enable Heat service
enable_service heat h-api h-api-cfn h-api-cw h-eng

# KVM
LIBVIRT_TYPE=qemu

PUBLIC_NETWORK_GATEWAY=192.168.0.1
PUBLIC_INTERFACE=enp4s0

# Neutron configuration
#FIXED_RANGE=10.0.0.0/24
FLOATING_RANGE=192.168.0.0/24

Q_USE_SECGROUP=True
Q_FLOATING_ALLOCATION_POOL=start=192.168.0.5,end=192.168.0.99
Q_USE_PROVIDERNET_FOR_PUBLIC=True
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_BRIDGE=br-ex
OVS_BRIDGE_MAPPINGS=public:br-ex
Q_L3_ENABLED=True

计算节点上的devstack配置:

[[local|localrc]]
HOST_IP=192.168.0.106
#
IFACE=br0
#
FLAT_INTERFACE=$IFACE
FIXED_RANGE=10.0.0.0/20
FIXED_NETWORK_SIZE=256

HOST=192.168.0.112
SERVICE_HOST=$HOST
MYSQL_HOST=$HOST
RABBIT_HOST=$HOST
Q_HOST=$HOST
GLANCE_HOSTPORT=$HOST:9292

ADMIN_PASSWORD=ostack
DATABASE_PASSWORDD=$ADMIN_PASSWORD
MYSQL_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

## Neutron options
PUBLIC_INTERFACE=$IFACE
ENABLED_SERVICES=n-cpu,rabbit,q-agt

# newly added
MULTI_HOST=1

DEST=/opt/stack
SERVICE_DIR=$DEST/status
DATA_DIR=$DEST/data
LOGDIR=$DEST/logs
LOGFILE=$LOGDIR/stack.sh.log
GIT_BASE=http://github.com

# nova -- LXC
LIBVIRT_TYPE=lxc

# logging
export ENABLE_DEBUG_LOG_LEVEL=False

计算节点上的lxc配置(/etc/lxc/default.conf):

lxc.network.type = veth
lxc.network.link = br0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:xx:xx:xx 

答案1

我进一步挖掘,最终找到了实际问题:vxlan内核模块未编译。添加这些模块解决了问题。我还删除了桥接设备,以便 OpenStack 直接使用网络接口。

作为参考——以防有人遇到同样的问题,devstack 的新配置:

控制节点:

[[local|localrc]]
MULTI_HOST=1
RECLONE=no
PIP_UPGRADE=False

PASSWORD=ostack
ADMIN_PASSWORD=$PASSWORD
SERVICE_TOKEN=$PASSWORD
MYSQL_PASSWORD=$PASSWORD
RABBIT_PASSWORD=$PASSWORD
SERVICE_PASSWORD=$PASSWORD

HOST_IP=192.168.0.112

DEST=/opt/stack
SERVICE_DIR=$DEST/status
DATA_DIR=$DEST/data
LOGDIR=$DEST/logs
LOGFILE=$LOGDIR/stack.sh.log
GIT_BASE=http://github.com

# keep logs for n days, color them, and suppress debug output
LOGDAYS=2
LOG_COLOR=true
export ENABLE_DEBUG_LOG_LEVEL=False

# Neutron networking
disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service neutron

# Tempest
enable_service tempest
disable_service zookeeper

# Heat
enable_service heat h-api h-api-cfn h-api-cw h-eng

# LXC
LIBVIRT_TYPE=lxc

PUBLIC_NETWORK_GATEWAY=192.168.0.1
PUBLIC_INTERFACE=enp4s0

# Neutron configuration
FIXED_RANGE=10.0.0.0/24
FLOATING_RANGE=192.168.0.0/24
Q_USE_SECGROUP=True
Q_FLOATING_ALLOCATION_POOL=start=192.168.0.5,end=192.168.0.99

# OpenVSwitch settings
Q_USE_PROVIDERNET_FOR_PUBLIC=True
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_BRIDGE=br-ex
OVS_BRIDGE_MAPPINGS=public:br-ex
Q_L3_ENABLED=True

计算节点:

[[local|localrc]]
# control node
HOST=192.168.0.112
SERVICE_HOST=$HOST
MYSQL_HOST=$HOST
RABBIT_HOST=$HOST
Q_HOST=$HOST
GLANCE_HOSTPORT=$HOST:9292

# passwords
ADMIN_PASSWORD=ostack
DATABASE_PASSWORDD=$ADMIN_PASSWORD
MYSQL_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

HOST_IP=192.168.0.106

DEST=/opt/stack
SERVICE_DIR=$DEST/status
DATA_DIR=$DEST/data
LOGDIR=$DEST/logs
LOGFILE=$LOGDIR/stack.sh.log
GIT_BASE=http://github.com

IFACE=enx001e0630391d

# keep logs for n days, color them, and suppress debug output
LOGDAYS=2
LOG_COLOR=true
export ENABLE_DEBUG_LOG_LEVEL=False

ENABLED_SERVICES=n-cpu,rabbit,q-agt

# nova -- LXC
LIBVIRT_TYPE=lxc

PUBLIC_INTERFACE=$IFACE

相关内容