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

Сетевые архитектуры

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 и инстансов

  • Собственные сети проектов/тенантов для инстансов

  • Другие сервисы 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 - Gateway узлы

На следующей схеме показан вычислительный узел, выполняющий функции шлюза OVN. Он подключен к публичной сети, что позволяет подключать виртуальные машины к публичным сетям не только через маршрутизаторы, но и напрямую:

Схема сетевых интерфейсов - одна агрегация

Open vSwitch и Linux Bridge

Данная диаграмма демонстрирует использование хостами одиночного интерфейса для сценариев OVS и Linux Bridge:

Схема сетевых интерфейсов - один интерфейс

Данная диаграмма демонстрирует использование хостами одного агрегированного интерфейса:

Схема сетевых интерфейсов - одна агрегация

На каждом хосте потребуется настроить корректные сетевые мосты. Ниже представлено содержимое файла /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 - Gateway узлы

На следующей схеме показан вычислительный узел, выполняющий функции шлюза OVN. Он подключен к публичной сети, что позволяет подключать виртуальные машины к публичным сетям не только через маршрутизаторы, но и напрямую:

Схема сетевых интерфейсов - несколько агрегаций

Open vSwitch и Linux Bridge

Данная диаграмма демонстрирует использование хостами нескольких интерфейсов для сценариев OVS и Linux Bridge:

Схема сетевых интерфейсов - несколько интерфейсов

Данная диаграмма демонстрирует использование хостами нескольких агрегаций:

Схема сетевых интерфейсов - несколько агрегаций

На каждом хосте потребуется настроить корректные сетевые мосты. Ниже представлено содержимое файла /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 для различных сценариев развертывания вы можете найти по ссылкам:

Для сетевого агента и сетевой топологии контейнеров, пожалуйста, см.: