[ English | Deutsch | русский | English (United Kingdom) | Indonesia ]
Сетевые архитектуры¶
OpenStack-Ansible поддерживает несколько различных сетевых архитектур и может произвести развертывание используя один сетевой интерфейс для тестовых окружений, или использовать несколько сетевых интерфейсов, или агрегированные интерфейсы для рабочих окружений.
Эталонная архитектура OpenStack-Ansible разделяет трафик используя VLAN-ы на нескольких сетевых интерфейсах или агрегациях. Стандартные сети, используемые при развертывании OpenStack-Ansible описаны в следующей таблице:
| Сеть | CIDR | VLAN | 
|---|---|---|
| Управляющая сеть | 172.29.236.0/22 | 10 | 
| Overlay сеть | 172.29.240.0/22 | 30 | 
| Сеть хранилища данных | 172.29.244.0/22 | 20 | 
Сеть управления, также упоминающаяся как сеть контейнеров служит для управления и общения между инфраструктурой и сервисами OpenStack, которые запущены как в контейнерах так и без них. Сеть управления использует выделенный VLAN, обычно подключенный к мосту br-mgmt и может быть использован как основной интерфейс для взаимодействия с сервером по SSH.
Overlay сеть, также называемая туннелированная сеть, обеспечивает связь между хостами с целью туннелирования инкапсулированного трафика с использованием VXLAN, Geneve или других протоколов. Overlay сеть использует выделенный VLAN, обычно подключенный к мосту br-vxlan.
Сеть хранилища данных предоставляет разделенный доступ к блочному хранилищу с таких сервисов OpenStack, как Cinder и Glance. Сеть хранилища данных использует выделенный VLAN, обычно подключенный к мосту br-storage.
Примечание
Указанные для каждой сети CIDR и VLAN приведены в качестве примера и могут отличаться в вашем окружении.
Дополнительные VLAN-ы могут потребоваться для следующих целей:
- Внешние сети провайдера для плавающих IP и инстансов 
- Self-service cети проектов для инстансов 
- Другие сервисы OpenStack 
Сетевые интерфейсы¶
Настройка сетевых интерфейсов¶
OpenStack-Ansible не предписывает какой-либо конкретный метод настройки сетевых интерфейсов на хосте. Вы можете выбрать любой инструмент, например ifupdown, netplan, systemd-networkd, networkmanager или другой инструмент, специфичный для операционной системы. Единственное требование — создание набора функционирующих сетевых мостов и интерфейсов, соответствующих ожидаемым OpenStack-Ansible, а также любых, которые вы укажете для физических интерфейсов neutron.
Выборка файлов примеров конфигурации сети приведена в etc/network и etc/netplan для систем Ubuntu, и ожидается, что их потребуется настроить в соответствии с конкретными требованиями каждого развертывания.
Если вы хотите делегировать управление сетевыми мостами и интерфейсами OpenStack-Ansible, вы можете определить переменные openstack_hosts_systemd_networkd_devices и openstack_hosts_systemd_networkd_networks в group_vars/lxc_hosts, например:
openstack_hosts_systemd_networkd_devices:
  - NetDev:
      Name: vlan-mgmt
      Kind: vlan
    VLAN:
      Id: 10
  - NetDev:
      Name: "{{ management_bridge }}"
      Kind: bridge
    Bridge:
      ForwardDelaySec: 0
      HelloTimeSec: 2
      MaxAgeSec: 12
      STP: off
openstack_hosts_systemd_networkd_networks:
  - interface: "vlan-mgmt"
    bridge: "{{ management_bridge }}"
  - interface: "{{ management_bridge }}"
    address: "{{ management_address }}"
    netmask: "255.255.252.0"
    gateway: "172.29.236.1"
  - interface: "eth0"
    vlan:
      - "vlan-mgmt"
    # NOTE: `05` is prefixed to filename to have precedence over netplan
    filename: 05-lxc-net-eth0
    address: "{{ ansible_facts['eth0']['ipv4']['address'] }}"
    netmask: "{{ ansible_facts['eth0']['ipv4']['netmask'] }}"
Если вам нужно запустить некоторые pre/post хуки для интерфейсов, вам нужно будет настроить для этого службу systemd. Это можно сделать с помощью переменной openstack_hosts_systemd_services, например:
openstack_hosts_systemd_services:
  - service_name: "{{ management_bridge }}-hook"
    state: started
    enabled: yes
    service_type: oneshot
    execstarts:
      - /bin/bash -c "/bin/echo 'management bridge is available'"
    config_overrides:
      Unit:
        Wants: network-online.target
        After: "{{ sys-subsystem-net-devices-{{ management_bridge }}.device }}"
        BindsTo: "{{ sys-subsystem-net-devices-{{ management_bridge }}.device }}"
Одиночный интерфейс или агрегация¶
OpenStack-Ansible поддерживает использование как и одиночных интерфейсов так и набора агрегированных интерфейсов для обслуживания трафика сервисов OpenStack также как и инстансов.
Open Virtual Network (OVN)¶
Данная диаграмма демонстрирует использование хостами одиночного интерфейса с OVN:
В приведенном ниже сценарии к внешней сети подключен только сетевой узел, а вычислительные устройства не имеют внешнего подключения, поэтому для внешнего подключения необходимы маршрутизаторы:
 
На следующей схеме показан вычислительный узел, выполняющий функции шлюза OVN. Он подключен к публичной сети, что позволяет подключать виртуальные машины к публичным сетям не только через маршрутизаторы, но и напрямую:
 
Open vSwitch¶
На следующей схеме показаны хосты, использующие один интерфейс для сценария OVS:
 
Данная диаграмма демонстрирует использование хостами одного агрегированного интерфейса:
 
На каждом хосте потребуется настроить корректные сетевые мосты. Ниже представлено содержимое файла /etc/network/interfaces для infra1 с использованием одного агрегированного интерфейса.
Примечание
Если в вашем окружении нет интерфейса eth0, но вместо него используется p1p1, либо же какое-нибудь другое имя интерфейса, убедитесь, что все отсылки к eth0 в конфигурационных файлах заменены на подходящее имя. Это же применимо ко всем дополнительным сетевым интерфейсам.
# This is a multi-NIC bonded configuration to implement the required bridges
# for OpenStack-Ansible. This illustrates the configuration of the first
# Infrastructure host and the IP addresses assigned should be adapted
# for implementation on the other hosts.
#
# After implementing this configuration, the host will need to be
# rebooted.
# Assuming that eth0/1 and eth2/3 are dual port NIC's we pair
# eth0 with eth2 for increased resiliency in the case of one interface card
# failing.
auto eth0
iface eth0 inet manual
    bond-master bond0
    bond-primary eth0
auto eth1
iface eth1 inet manual
auto eth2
iface eth2 inet manual
    bond-master bond0
auto eth3
iface eth3 inet manual
# Create a bonded interface. Note that the "bond-slaves" is set to none. This
# is because the bond-master has already been set in the raw interfaces for
# the new bond0.
auto bond0
iface bond0 inet manual
    bond-slaves none
    bond-mode active-backup
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
# Container/Host management VLAN interface
auto bond0.10
iface bond0.10 inet manual
    vlan-raw-device bond0
# OpenStack Networking VXLAN (tunnel/overlay) VLAN interface
auto bond0.30
iface bond0.30 inet manual
    vlan-raw-device bond0
# Storage network VLAN interface (optional)
auto bond0.20
iface bond0.20 inet manual
    vlan-raw-device bond0
# Container/Host management bridge
auto br-mgmt
iface br-mgmt inet static
    bridge_stp off
    bridge_waitport 0
    bridge_fd 0
    bridge_ports bond0.10
    address 172.29.236.11
    netmask 255.255.252.0
    gateway 172.29.236.1
    dns-nameservers 8.8.8.8 8.8.4.4
# OpenStack Networking VXLAN (tunnel/overlay) bridge
#
# Nodes hosting Neutron agents must have an IP address on this interface,
# including COMPUTE, NETWORK, and collapsed INFRA/NETWORK nodes.
#
auto br-vxlan
iface br-vxlan inet static
    bridge_stp off
    bridge_waitport 0
    bridge_fd 0
    bridge_ports bond0.30
    address 172.29.240.16
    netmask 255.255.252.0
# OpenStack Networking VLAN bridge
#
# The "br-vlan" bridge is no longer necessary for deployments unless Neutron
# agents are deployed in a container. Instead, a direct interface such as
# bond0 can be specified via the "host_bind_override" override when defining
# provider networks.
#
#auto br-vlan
#iface br-vlan inet manual
#    bridge_stp off
#    bridge_waitport 0
#    bridge_fd 0
#    bridge_ports bond0
# compute1 Network VLAN bridge
#auto br-vlan
#iface br-vlan inet manual
#    bridge_stp off
#    bridge_waitport 0
#    bridge_fd 0
#
# Storage bridge (optional)
#
# Only the COMPUTE and STORAGE nodes must have an IP address
# on this bridge. When used by infrastructure nodes, the
# IP addresses are assigned to containers which use this
# bridge.
#
auto br-storage
iface br-storage inet manual
    bridge_stp off
    bridge_waitport 0
    bridge_fd 0
    bridge_ports bond0.20
# compute1 Storage bridge
#auto br-storage
#iface br-storage inet static
#    bridge_stp off
#    bridge_waitport 0
#    bridge_fd 0
#    bridge_ports bond0.20
#    address 172.29.244.16
#    netmask 255.255.252.0
Несколько интерфейсов или агрегаций¶
OpenStack-Ansible поддерживает использование как нескольких интерфейсов так и набора агрегированных интерфейсов для обслуживания трафика сервисов OpenStack и инстансов.
Open Virtual Network (OVN)¶
Данная диаграмма демонстрирует использование хостами нескольких агрегированных интерфейсов с OVN:
В приведенном ниже сценарии к внешней сети подключен только сетевой узел, а вычислительные устройства не имеют внешнего подключения, поэтому для внешнего подключения необходимы маршрутизаторы:
 
На следующей схеме показан вычислительный узел, выполняющий функции шлюза OVN. Он подключен к публичной сети, что позволяет подключать виртуальные машины к публичным сетям не только через маршрутизаторы, но и напрямую:
 
Open vSwitch¶
На следующей схеме показаны хосты, использующие несколько интерфейсов для сценария OVS:
 
Данная диаграмма демонстрирует использование хостами нескольких агрегаций:
 
На каждом хосте потребуется настроить корректные сетевые мосты. Ниже представлено содержимое файла /etc/network/interfaces для infra1 с использованием нескольких агрегированных интерфейсов.
Примечание
Если в вашем окружении нет интерфейса eth0, но вместо него используется p1p1, либо же какое-нибудь другое имя интерфейса, убедитесь, что все отсылки к eth0 в конфигурационных файлах заменены на подходящее имя. Это же применимо ко всем дополнительным сетевым интерфейсам.
# This is a multi-NIC bonded configuration to implement the required bridges
# for OpenStack-Ansible. This illustrates the configuration of the first
# Infrastructure host and the IP addresses assigned should be adapted
# for implementation on the other hosts.
#
# After implementing this configuration, the host will need to be
# rebooted.
# Assuming that eth0/1 and eth2/3 are dual port NIC's we pair
# eth0 with eth2 and eth1 with eth3 for increased resiliency
# in the case of one interface card failing.
auto eth0
iface eth0 inet manual
    bond-master bond0
    bond-primary eth0
auto eth1
iface eth1 inet manual
    bond-master bond1
    bond-primary eth1
auto eth2
iface eth2 inet manual
    bond-master bond0
auto eth3
iface eth3 inet manual
    bond-master bond1
# Create a bonded interface. Note that the "bond-slaves" is set to none. This
# is because the bond-master has already been set in the raw interfaces for
# the new bond0.
auto bond0
iface bond0 inet manual
    bond-slaves none
    bond-mode active-backup
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
# This bond will carry VLAN and VXLAN traffic to ensure isolation from
# control plane traffic on bond0.
auto bond1
iface bond1 inet manual
    bond-slaves none
    bond-mode active-backup
    bond-miimon 100
    bond-downdelay 250
    bond-updelay 250
# Container/Host management VLAN interface
auto bond0.10
iface bond0.10 inet manual
    vlan-raw-device bond0
# OpenStack Networking VXLAN (tunnel/overlay) VLAN interface
auto bond1.30
iface bond1.30 inet manual
    vlan-raw-device bond1
# Storage network VLAN interface (optional)
auto bond0.20
iface bond0.20 inet manual
    vlan-raw-device bond0
# Container/Host management bridge
auto br-mgmt
iface br-mgmt inet static
    bridge_stp off
    bridge_waitport 0
    bridge_fd 0
    bridge_ports bond0.10
    address 172.29.236.11
    netmask 255.255.252.0
    gateway 172.29.236.1
    dns-nameservers 8.8.8.8 8.8.4.4
# OpenStack Networking VXLAN (tunnel/overlay) bridge
#
# Nodes hosting Neutron agents must have an IP address on this interface,
# including COMPUTE, NETWORK, and collapsed INFRA/NETWORK nodes.
#
auto br-vxlan
iface br-vxlan inet static
    bridge_stp off
    bridge_waitport 0
    bridge_fd 0
    bridge_ports bond1.30
    address 172.29.240.16
    netmask 255.255.252.0
# OpenStack Networking VLAN bridge
#
# The "br-vlan" bridge is no longer necessary for deployments unless Neutron
# agents are deployed in a container. Instead, a direct interface such as
# bond1 can be specified via the "host_bind_override" override when defining
# provider networks.
#
#auto br-vlan
#iface br-vlan inet manual
#    bridge_stp off
#    bridge_waitport 0
#    bridge_fd 0
#    bridge_ports bond1
# compute1 Network VLAN bridge
#auto br-vlan
#iface br-vlan inet manual
#    bridge_stp off
#    bridge_waitport 0
#    bridge_fd 0
#
# Storage bridge (optional)
#
# Only the COMPUTE and STORAGE nodes must have an IP address
# on this bridge. When used by infrastructure nodes, the
# IP addresses are assigned to containers which use this
# bridge.
#
auto br-storage
iface br-storage inet manual
    bridge_stp off
    bridge_waitport 0
    bridge_fd 0
    bridge_ports bond0.20
# compute1 Storage bridge
#auto br-storage
#iface br-storage inet static
#    bridge_stp off
#    bridge_waitport 0
#    bridge_fd 0
#    bridge_ports bond0.20
#    address 172.29.244.16
#    netmask 255.255.252.0
Дополнительные ресурсы¶
Больше информации как правильно настроить сетевые интерфейсы и файлы конфигурации OpenStack-Ansible для различных сценариев развертывания вы можете найти по ссылкам:
Для сетевого агента и сетевой топологии контейнеров, пожалуйста, см.:
