Como configurar a rede para contêineres lxc no OpenStack?

1

Estou trabalhando em uma configuração do OpenStack usando contêineres LXC para virtualização. Eu posso lançar instâncias (pelo menos os relatórios de log da instância assim). No entanto, eu não posso nem pingar nem conectar a eles via ssh e os relatórios de log da instância que as interfaces de rede não podem ser levantadas corretamente (veja o log abaixo). Nenhum outro erro é levantado nos registros de nova e nêutrons.

Eu testei a configuração do LXC localmente iniciando o contêiner diretamente no nó de computação e conecte-se a ele como pretendido. Para isso, o tráfego é enviado diretamente para o contêiner, como aqui . A partir dessa observação, eu concluiria que todos os requisitos do módulo relacionados ao LXC são atendidos (relatórios lxc-checkconfig também). Em seguida, extraí a imagem ( tutorial ) e forneci-a ao OpenStack para contêiner instanciação.

Eu, além disso, tentei rastrear os pacotes transmitidos durante uma tentativa de ping pelo tcpdump. Eles parecem alcançar o nó de controle, mas não são retransmitidos para o nó de cálculo (ou a instância / contêiner). No entanto, eu não entendo onde eles estão realmente perdidos e por quê.

Pergunta:
Como posso descobrir onde está o problema real, ou seja, se é o OpenStack ou se é a rede dentro do contêiner? Eu tenho um problema de galinha e ovo aqui, pois não consigo acessar o contêiner para descobrir se a rede está com defeito, porque eu tenho problemas de rede ...

Antecedentes:
A configuração do OpenStack consiste em um nó de controle no qual todos os serviços de agendamento e de rede estão em execução e (por enquanto) um nó de computação no qual os contêineres são iniciados. A configuração está sendo executada no Ubuntu 16.04 com um kernel personalizado (4.8) no nó de cálculo e usa o OpenStack Newton instalado via devstack.

Configuração:
configuração do devstack no nó de controle:

[[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

configuração do devstack no nó de cálculo:

[[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

Configuração do lxc no nó de cálculo (/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 
    
por Martin 19.04.2017 / 14:19

1 resposta

0

Eu investiguei um pouco mais e finalmente encontrei o problema: Os módulos do kernel vxlan não foram compilados. Adicioná-los resolveu o problema. Também removi o dispositivo de ponte para que o OpenStack use a interface de rede diretamente.

Para referência - no caso de alguém encontrar os mesmos problemas, a nova configuração para devstack:

nó de controle:

[[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

nó de cálculo:

[[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
    
por 24.04.2017 / 13:11