Einrichten eines Netzwerks für LXC-Container in OpenStack

698
Martin

Ich arbeite an einem Setup von OpenStack, das LXC-Container für die Virtualisierung verwendet. Ich kann Instanzen starten (zumindest die Instanzprotokollberichte). Ich kann sie jedoch weder per Ping senden noch über ssh mit ihnen verbinden, und das Instanzprotokoll meldet, dass die Netzwerkschnittstellen nicht ordnungsgemäß ausgelöst werden konnten (siehe Protokoll unten). In den Nova- und Neutronenprotokollen werden keine weiteren Fehler angezeigt.

Ich habe das LXC-Setup getestet, indem der Container lokal direkt auf dem Rechenknoten gestartet und wie beabsichtigt eine Verbindung zu ihm hergestellt wurde. Zu diesem Zweck wird der Verkehr wie hier direkt zum Container gebrückt . Aus dieser Beobachtung würde ich schlussfolgern, dass alle LXC-relevanten Modulanforderungen erfüllt sind (lxc-checkconfig berichtet auch). Dann extrahierte ich das Image ( Tutorial ) und stellte es OpenStack zur Container-Instantiierung zur Verfügung.

Außerdem habe ich versucht, die Pakete zu verfolgen, die während eines Ping-Versuchs von tcpdump übertragen wurden. Sie scheinen den Steuerknoten zu erreichen, werden jedoch nicht an den Rechenknoten (oder die Instanz / den Container) weitergeleitet. Ich verstehe jedoch nicht, wo sie eigentlich verloren sind und warum.

Frage:
Wie kann ich herausfinden, wo das eigentliche Problem liegt, dh ob es sich um OpenStack handelt oder ob es sich um ein Netzwerk innerhalb des Containers handelt? Ich habe hier ein bisschen ein Hühnerei-Problem, da ich mich nicht in den Container einloggen kann, um herauszufinden, ob das Netzwerk dort fehlerhaft ist, weil ich Netzwerkprobleme habe ...

Hintergrund:
Das OpenStack-Setup besteht aus einem Kontrollknoten, auf dem alle Planungs- und Netzwerkdienste ausgeführt werden, und (vorerst) einem Rechenknoten, auf dem die Container gestartet werden. Das Setup läuft unter Ubuntu 16.04 mit einem benutzerdefinierten Kernel (4.8) auf dem Rechenknoten und verwendet OpenStack Newton, das über devstack installiert wird.

Konfiguration:
Devstack-Konfiguration auf dem Kontrollknoten:

[[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-Konfiguration auf dem Rechenknoten:

[[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-Konfiguration auf dem Rechenknoten (/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 Antwort auf die Frage

0
Martin

Ich grub weiter und fand schließlich das eigentliche Problem: Die vxlanKernelmodule wurden nicht kompiliert. Durch das Hinzufügen dieser Probleme wurde das Problem gelöst. Ich habe auch das Bridge-Gerät entfernt, damit der OpenStack die Netzwerkschnittstelle direkt verwendet.

Als Referenz - für den Fall, dass jemand die gleichen Probleme hat, die neue Konfiguration für devstack:

Steuerknoten:

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

Rechenknoten:

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