[ English | Deutsch | Indonesia | русский | English (United Kingdom) ]

Netzwerke verwalten

Betriebsüberlegungen wie Compliance können die Verwaltung von Netzwerken erforderlich machen. Zum Beispiel das Hinzufügen neuer Provider-Netzwerke zur OpenStack-Ansible Managed Cloud. Die folgenden Abschnitte sind die häufigsten administrativen Aufgaben, die zum Ausführen dieser Aufgaben beschrieben werden.

Weitere allgemeine Informationen zur Fehlerbehebung in Ihrem Netzwerk finden Sie im Kapitel Netzwerk-Fehlerbehebung im Betriebshandbuch.

Weitere Informationen zum Netzwerk finden Sie im Netzwerkhandbuch.

Hinzufügen von Provider-Bridges mithilfe neuer Netzwerkschnittstellen

Fügen Sie jedes Provider-Netzwerk zu Ihrer Cloud hinzu, um es OpenStack-Ansible und dem Betriebssystem mitzuteilen, bevor Sie die erforderlichen Playbooks ausführen können, um die Konfiguration abzuschließen.

OpenStack-Ansible-Konfiguration

Alle Provider-Netzwerke müssen der OpenStack-Ansible-Konfiguration hinzugefügt werden.

Editieren Sie die Datei /etc/openstack_deploy/openstack_user_config.yml und fügen Sie einen neuen Block unter dem Abschnitt provider_networks hinzu:

The container_bridge setting defines the physical network bridge used to connect the veth pair from the physical host to the container. Inside the container, the container_interface setting defines the name at which the physical network will be made available. The container_interface setting is not required when Neutron agents are deployed on bare metal. Make sure that both settings are uniquely defined across their provider networks and that the network interface is correctly configured inside your operating system. group_binds define where this network need to attached to, to either containers or physical hosts and is ultimately dependent on the network stack in use. For example, Linuxbridge versus OVS. The configuration range defines Neutron physical segmentation IDs which are automatically used by end users when creating networks via mainly horizon and the Neutron API. Similar is true for the net_name configuration which defines the addressable name inside the Neutron configuration. This configuration also need to be unique across other provider networks.

Weitere Informationen finden Sie unter Konfigurieren Sie die Bereitstellung im OpenStack-Ansible-Bereitstellungshandbuch.

Aktualisieren des Knotens mit der neuen Konfiguration

Führen Sie die entsprechenden Playbooks aus, abhängig vom Abschnitt group_binds.

Wenn Sie zum Beispiel die Netzwerke aktualisieren, die eine Änderung an allen Knoten mit einem Linux-Bridge-Agenten erfordern, führen Sie Folgendes aus: Wenn Sie Infra-Knoten mit den Namen infra01, infra02 und infra03 haben, führen Sie Folgendes aus:

# openstack-ansible containers-deploy.yml --limit localhost,infra01,infra01-host_containers
# openstack-ansible containers-deploy.yml --limit localhost,infra02,infra02-host_containers
# openstack-ansible containers-deploy.yml --limit localhost,infra03,infra03-host_containers

Aktualisieren Sie dann die Neutron-Konfiguration.

# openstack-ansible os-neutron-install.yml --limit localhost,infra01,infra01-host_containers
# openstack-ansible os-neutron-install.yml --limit localhost,infra02,infra02-host_containers
# openstack-ansible os-neutron-install.yml --limit localhost,infra03,infra03-host_containers

Aktualisieren Sie dann ggf. Ihre Compute-Knoten.

Entfernen Sie Anbieterbrücken von OpenStack

Ähnlich wie beim Hinzufügen eines Provider-Netzwerks wird beim Entfernen derselbe Vorgang verwendet, jedoch in umgekehrter Reihenfolge. Die Neutron-Ports müssen vor dem Entfernen der OpenStack-Ansible-Konfiguration entfernt werden.

  1. Zuweisung aller neutron floating IPs aufheben:

    Bemerkung

    Exportieren Sie das Neutron-Netzwerk, das als einzelne UUID entfernt werden soll.

    export NETWORK_UUID=<uuid>
    for p in $( neutron port-list -c id --device_owner compute:nova --network_id=${NETWORK_UUID}| awk '/([A-Fa-f0-9]+-){3}/ {print $2}' ); do
      floatid=$( neutron floatingip-list -c id --port_id=$p | awk '/([A-Fa-z0-9]+-){3}/ { print $2 }' )
      if [ -n "$floatid" ]; then
        echo "Disassociating floating IP $floatid from port $p"
        neutron floatingip-disassociate $floatid
      fi
    done
    
  2. Entfernen Sie alle Neutron-Ports von den Instanzen:

    export NETWORK_UUID=<uuid>
    for p in $( neutron port-list -c id -c device_id --device_owner compute:nova --network_id=${NETWORK_UUID}| awk '/([A-Fa-f0-9]+-){3}/ {print $2}' ); do
      echo "Removing Neutron compute port $p"
      neutron port-delete $p
    done
    
  3. Entfernen Sie die Router-Ports und DHCP-Agenten von Neutron:

    export NETWORK_UUID=<uuid>
    for line in $( neutron port-list -c id -c device_id --device_owner network:router_interface --network_id=${NETWORK_UUID}| awk '/([A-Fa-f0-9]+-){3}/ {print $2 "+" $4}' ); do
      p=$( echo "$line"| cut -d'+' -f1 ); r=$( echo "$line"| cut -d'+' -f2 )
      echo "Removing Neutron router port $p from $r"
      neutron router-interface-delete $r port=$p
    done
    
    for agent in $( neutron agent-list -c id --agent_type='DHCP Agent' --network_id=${NETWORK_UUID}| awk '/([A-Fa-f0-9]+-){3}/ {print $2}' ); do
      echo "Remove network $NETWORK_UUID from Neutron DHCP Agent $agent"
      neutron dhcp-agent-network-remove "${agent}" $NETWORK_UUID
    done
    
  4. Entferne das Neutron-Netzwerk:

    export NETWORK_UUID=<uuid>
    neutron net-delete $NETWORK_UUID
    
  5. Entfernen Sie das Provider-Netzwerk aus der Konfiguration provider_networks der OpenStack-Ansible-Konfiguration /etc/openstack_deploy/openstack_user_config.yml und führen Sie die folgenden Playbooks erneut aus:

    # openstack-ansible lxc-containers-create.yml --limit infra01:infra01-host_containers
    # openstack-ansible lxc-containers-create.yml --limit infra02:infra02-host_containers
    # openstack-ansible lxc-containers-create.yml --limit infra03:infra03-host_containers
    # openstack-ansible os-neutron-install.yml --tags neutron-config
    

Starten Sie einen Container für den Netzwerkagenten neu

Unter bestimmten Umständen, bei der Konfiguration oder bei temporären Problemen, muss ein bestimmter oder alle Neutronenagenten-Container neu gestartet werden.

Dies kann mit mehreren Befehlen erreicht werden:

  1. Beispiel für das Neustarten von noch zugänglichen Containern.

    In diesem Beispiel wird der Container mit dem Namen neutron_agents_container_hostname_name von innen gestartet:

    # ansible -m shell neutron_agents_container_hostname_name -a 'reboot'
    
  2. Beispiel für das Neustarten eines einzelnen Containers im Abstand von 60 Sekunden:

    # ansible -m shell neutron_agents_container -a 'sleep 60; reboot' --forks 1
    
  3. Wenn der Container nicht antwortet, kann er vom physischen Netzwerkhost neu gestartet werden:

    # ansible -m shell network_hosts -a 'for c in $(lxc-ls -1 |grep neutron_agents_container); do lxc-stop -n $c && lxc-start -d -n $c; done' --forks 1