Как настроить сеть для контейнеров lxc в OpenStack?

655
Martin

Я работаю над настройкой OpenStack, используя контейнеры LXC для виртуализации. Я могу запускать экземпляры (по крайней мере, отчеты журнала отчетов об этом). Однако я не могу ни пропинговать их, ни соединиться с ними через ssh, и журнал экземпляра сообщает, что сетевые интерфейсы не могут быть установлены должным образом (см. Журнал ниже). Никаких дальнейших ошибок в новых и нейтронных журналах не возникает.

Я протестировал настройку LXC, локально запустив контейнер непосредственно на вычислительном узле и подключившись к нему, как предполагалось. Для этого трафик соединяется напрямую с контейнером, как здесь . Из этого наблюдения я бы пришел к выводу, что все требования к модулю, относящиеся к LXC, выполнены (отчеты lxc-checkconfig тоже так). Затем я извлек изображение ( учебник ) и предоставил его OpenStack для создания экземпляра контейнера.

Более того, я попытался отследить пакеты, переданные во время попытки ping командой tcpdump. Кажется, они достигают управляющего узла, но не передаются на вычислительный узел (или экземпляр / контейнер). Тем не менее, я не понимаю, где они на самом деле теряются и почему.

Вопрос:
Как я могу узнать, где на самом деле проблема, то есть, если это OpenStack или это сеть внутри контейнера? У меня есть небольшая проблема "курица с яйцом", поскольку я не могу войти в контейнер, чтобы выяснить, не работает ли сеть там из-за проблем с сетью ...

Общие сведения:
установка OpenStack состоит из управляющего узла, на котором работают все службы планирования и сетевых служб, и (на данный момент) одного вычислительного узла, на котором запускаются контейнеры. Программа установки работает под Ubuntu 16.04 с пользовательским ядром (4.8) на вычислительном узле и использует OpenStack Newton, установленный через devstack.

Конфигурация:
конфигурация 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

1 ответ на вопрос

0
Martin

Я немного покопался и наконец нашел актуальную проблему: 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