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

Управление сетями

Эксплуатационные соображения, такие как гибкость, могут привести к необходимости управления сетями. Например, добавление новых сетей провайдера в управляемое облако OpenStack-Ansible. В следующих разделах приведены наиболее распространенные административные задачи, изложенные для выполнения этих задач.

For more generic information on troubleshooting your network, see the Network Troubleshooting chapter in the Operations Guide.

Более подробную информацию о работе в сети см. в `Руководстве по работе в сети<https://docs.openstack.org/neutron/latest/admin/>`_.

Добавьте мосты провайдера, используя новые сетевые интерфейсы

Add each provider network to your cloud to be made known to OpenStack-Ansible and the operating system before you can execute the necessary playbooks to complete the configuration.

Конфигурация OpenStack-Ansible

Все сети провайдера необходимо добавить в конфигурацию OpenStack-Ansible.

Отредактируйте файл /etc/openstack_deploy/openstack_user_config.yml и добавьте новый блок под разделом provider_networks:

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.

Для получения дополнительной информации см. Конфигурация развертывания в Руководстве по развертыванию OpenStack-Ansible.

Обновление узла с новой конфигурацией

Запустите соответствующие сценарии в зависимости от раздела group_binds.

For example, if you update the networks requiring a change in all nodes with a linux bridge agent, assuming you have infra nodes named infra01, infra02, and infra03, run:

# 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

Затем обновите конфигурацию neutron.

# 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

Затем при необходимости обновите вычислительные узлы.

Удалить мосты провайдера из OpenStack

Подобно добавлению сети провайдера, процесс удаления использует ту же процедуру, но в обратном порядке. Порты Neutron необходимо будет удалить перед удалением конфигурации OpenStack-Ansible.

  1. Отменить назначение всех плавающих IP-адресов Neutron:

    Примечание

    Экспортируйте сеть Neutron, которая будет удалена, как один UUID.

    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. Удалить все порты Neutron из инстансов:

    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. Удалить порты маршрутизатора Neutron и DHCP-агенты:

    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. Удалить сеть Neutron:

    export NETWORK_UUID=<uuid>
    neutron net-delete $NETWORK_UUID
    
  5. Remove the provider network from the provider_networks configuration of the OpenStack-Ansible configuration /etc/openstack_deploy/openstack_user_config.yml and re-run the following playbooks:

    # 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
    

Перезапустите контейнер сетевого агента

Under some circumstances, configuration or temporary issues, one specific or all neutron agents container need to be restarted.

Это можно сделать с помощью нескольких команд:

  1. Пример перезагрузки все еще доступных контейнеров.

    В этом примере будет выполнена перезагрузка контейнера с именем neutron_agents_container_hostname_name изнутри:

    # ansible -m shell neutron_agents_container_hostname_name -a 'reboot'
    
  2. Пример перезагрузки одного контейнера за раз с интервалом в 60 секунд:

    # ansible -m shell neutron_agents_container -a 'sleep 60; reboot' --forks 1
    
  3. Если контейнер не отвечает, его можно перезапустить с физического сетевого хоста:

    # 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