VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Настройка внешней сети

Платформа поддерживает варианты сетей:

  • VLAN.
  • VxLAN внутри тенанта.
  • VxLAN с анонсом через BGP.

Создание внешней сети с доступом в корпоративную сеть

В этом разделе приведена краткая инструкция по созданию внешней VLAN-сети с использованием команд OpenStack CLI.

Для реализации данной задачи на уровне Neutron создается связка Network-Subnet, которая будет выходить в корпоративную сеть в виде инкапсулированного VLAN-трафика.

Чтобы создать внешнюю сеть:

  1. Измените настройки в конфигурационных файлах, расположенных в директории <vkcloud>/group_vars/ на деплой-ноде:

    1. В файле <vkcloud>/vars.yml задайте параметры конфигурации для внешней Neutron-сети:

      external_networks_extend:  "172.25.120.0/24": # адрес внешней подсети    vlan: 2013 # Номер VLAN во внешней подсети    project_id: "e01b26b84caa463f9c1691720fba5d53" # ID проекта "admin"; можно узнать через команду `openstack project show admin`    network_name: "ext-net" # Название сети (будет отображаться в веб-интерфейсе под этим именем)    shared: "True" # Всегда True
    2. В следующих файлах задайте настройки мостов для выхода ВМ во внешнюю сеть: br-vlan интерфейс для выхода с VLAN, br-ex интерфейс для выхода без VLAN (создается как дополнение, без какого-либо присвоенного IP):

      • <vkcloud>_compute/vars.yml — файл с настройками вычислительных узлов, на которых будут запускаться ВМ.

        compute_network_ifcfg_vlan: |  DEVICE=br-vlan  DEVICETYPE=ovs  TYPE=OVSBridge  BOOTPROTO=none  ONBOOT=yes  NOZEROCONF=yes  OVS_EXTRA="add-port br-vlan bond0"compute_network_ifcfg_external: |  DEVICE=br-ex  DEVICETYPE=ovs  TYPE=OVSBridge  BOOTPROTO=static  ONBOOT=yes  NOZEROCONF=yes  {% for gw_ip in networks.external | ipaddr('-2') %}  IPADDR{{ loop.index }}={{ gw_ip | ipaddr('address') }}  NETMASK{{ loop.index }}=255.255.255.255  {% endfor %}
      • <vkcloud>_dhcp/vars.yml — файл с настройками DHCP:

        neutron_dhcp_ifcfg_external: |  DEVICE=br-ex  DEVICETYPE=ovs  TYPE=OVSBridge  BOOTPROTO=static  ONBOOT=yes  NOZEROCONF=yes  {% for gw_ip in networks.external | ipaddr('-2') %}  IPADDR{{ loop.index }}={{ gw_ip | ipaddr('address') }}  NETMASK{{ loop.index }}=255.255.255.255  {% endfor %}neutron_dhcp_ifcfg_vlan: |  DEVICE=br-vlan  DEVICETYPE=ovs  TYPE=OVSBridge  BOOTPROTO=none  ONBOOT=yes  NOZEROCONF=yes  OVS_EXTRA="add-port br-vlan bond0"
      • <vkcloud>_octavia/vars.yml — файл с настройками балансировщика Octavia:

        octavia_network_ifcfg_external: |   DEVICE=br-ex   DEVICETYPE=ovs   TYPE=OVSBridge   BOOTPROTO=static   ONBOOT=yes   NOZEROCONF=yes   {% for gw_ip in networks.external | ipaddr('-2') %}   IPADDR{{ loop.index }}={{ gw_ip | ipaddr('address') }}   NETMASK{{ loop.index }}=255.255.255.255   {% endfor %}octavia_network_ifcfg_vlan: |   DEVICE=br-vlan   DEVICETYPE=ovs   TYPE=OVSBridge   BOOTPROTO=none   ONBOOT=yes   NOZEROCONF=yes   OVS_EXTRA="add-port br-vlan bond0"
      • <vkcloud>_network/vars.yml — файл с настройками Neutron-сети:

        neutron_network_ifcfg_external: |  DEVICE=br-ex  DEVICETYPE=ovs  TYPE=OVSBridge  BOOTPROTO=static  ONBOOT=yes  NOZEROCONF=yes  {% for gw_ip in networks.external | ipaddr('-2') %}  IPADDR{{ loop.index }}={{ gw_ip | ipaddr('address') }}  NETMASK{{ loop.index }}=255.255.255.255  {% endfor %}neutron_network_ifcfg_vlan: |  DEVICE=br-vlan  DEVICETYPE=ovs  TYPE=OVSBridge  BOOTPROTO=none  ONBOOT=yes  NOZEROCONF=yes  OVS_EXTRA="add-port br-vlan bond0"
  2. Задайте название окружения и запустите плейбуки:

    $ cd ~/inventory/vkcloud/$ ansible-playbook --diff -i vkcloud.yml -e env=vkcloud -e bootstrap=yes ../ansible-openstack/playbooks/neutron-controller-deploy.yml | $ tee ~/neutron-controller-deploy$ ansible-playbook --diff -i vkcloud.yml -e env=vkcloud -e bootstrap=yes ../ansible-openstack/playbooks/neutron-network-deploy.yml | tee ~/neutron-network-deploy$ ansible-playbook --diff -i vkcloud.yml -e env=vkcloud -e bootstrap=yes ../ansible-openstack/playbooks/compute-deploy.yml | tee ~/compute-deploy$ ansible-playbook --diff -i vkcloud.yml -e env=vkcloud -e bootstrap=yes ../ansible-openstack/playbooks/neutron-dhcp-deploy.yml | tee ~/neutron-dhcp-deploy$ ansible-playbook --diff -i vkcloud.yml -e env=vkcloud -e bootstrap=yes ../ansible-openstack/playbooks/octavia-deploy.yml | tee ~/octavia-deploy
  3. Создайте внешнюю сеть, через которую будет осуществляться взаимодействие приватных пользовательских сетей с внешними сетями организации:

    $ openstack network create --provider-network-type vlan --external --provider-physical-network vlan --provider-segment <VLAN_ID> --share <НАЗВАНИЕ_ВНЕШНЕЙ_СЕТИ>
  4. Создайте подсеть в только что созданной сети:

    $ openstack subnet create --network <НАЗВАНИЕ_ВНЕШНЕЙ_СЕТИ> --subnet-range <ПОДСЕТЬ> --allocation-pool <ПУЛ_АДРЕСОВ> --dhcp --gateway <IP_АДРЕС_ШЛЮЗА> --dns-nameserver <АДРЕС_DNS_СЕРВЕРА> <НАЗВАНИЕ_ПОДСЕТИ>

    Здесь:

    • <ПОДСЕТЬ> — адрес подсети, которую вам выдали в этом VLAN. Например, 172.25.120.0/24.
    • <ПУЛ_АДРЕСОВ> — пул IP-адресов для ВМ (не забудьте оставить место для шлюза и двух DHCP-серверов). Например, start=172.25.120.4,end=172.25.120.245.

Подключение пользовательских сетей к внешней сети

Чтобы обеспечить доступ ВМ в пользовательских внутренних сетях во внешнюю сеть, задайте внешнюю сеть как шлюз для маршрутизатора внутренней:

  1. Войдите в Портал самообслуживания с использованием учетной записи Администратора Платформы.

  2. Перейдите в раздел Виртуальные сетиМаршрутизаторы.

  3. Нажмите кнопку Добавить маршрутизатор.

    1. Укажите название пользовательской сети.
    2. Включите флажок Подключение к внешней сети.
    3. Выберите подсеть в раскрывающемся списке Список подсетей.
  4. Нажмите кнопку Создать.

  5. Перейдите в раздел Виртуальные сетиСети.

  6. Нажмите кнопку Создать.

  7. Укажите название сети при необходимости, в списке Маршрутизатор выберите ранее созданный маршрутизатор.

  8. В области Список подсетей нажмите на значок ••• справа от названия подсети и выберите пункт Редактировать подсеть. Включите параметр Включить DHCP.

  9. Отключите параметр Приватный DNS и укажите используемые DNS-серверы.

  10. Нажмите кнопку Создать.

  11. Нажмите кнопку Добавить сеть.

После подключения внутренней сети к внешней для ВМ во внутренней сети появится возможность назначения внешнего IP-адреса.

Чтобы пройти аналогичные шаги в OpenStack CLI выполните подготовительные операции для использования OpenStack CLI (подробнее — в разделе Вход для Администратора Платформы), затем — команды:

# openstack router create <НАЗВАНИЕ_РОУТЕРА># openstack network create <НАЗВАНИЕ_ВНУТРЕННЕЙ_СЕТИ># openstack subnet create <НАЗВАНИЕ_ВНУТРЕННЕЙ_ПОДСЕТИ> --network <НАЗВАНИЕ_ВНУТРЕННЕЙ_СЕТИ> --subnet-range 192.168.100.0/24 --dns-nameserver 10.14.0.12# openstack router set <НАЗВАНИЕ_РОУТЕРА> --external-gateway <НАЗВАНИЕ_ВНЕШНЕЙ_СЕТИ># openstack router add subnet <НАЗВАНИЕ_ВНУТРЕННЕЙ_СЕТИ> <НАЗВАНИЕ_ВНУТРЕННЕЙ_ПОДСЕТИ>

Создание дополнительных внешних сетей для проектов

Создайте провайдерскую внешнюю сеть, доступную только в рамках одного проекта, одним из способов:

  • Внесите изменения вручную в Inventory-файл vars.yml и запустите Ansible-плейбуки (подробнее — в разделе Inventory и Ansible).
  • Используйте команды OpenStack CLI (подробнее — в разделе OpenStack CLI).

Inventory и Ansible

  1. Отключите использование внешней глобальной сети. В файле <vkcloud>/group_vars/vkcloud/vars.yml задайте параметру create_external_network значение false.

  2. В файле <vkcloud>/group_vars/vkcloud/vars.yml в переменной postdeploy_provider_network задайте параметры новых сетей.

    Пример фрагмента файла `vars.yml`
    # Описание провайдерских сетей для каждого проекта  postdeploy_provider_network:      # Название проекта, в котором будет создана сеть    - project_name: "ProjectX"      # Имя новой сети в OpenStack      name: "projectX_provider_net1"      type: "vlan"      # VLAN ID новой сети      segmentation_id: 1001      # Сеть будет создана с флагом --external (внешняя)      external: true      # Сеть будет создана с флагом --shared и не будет доступна для редактирования пользователю Портала самообслуживания      shared: true      # Описание подсети      subnet:        name: "provider_subnet1"        dns_nameservers: "x.x.x.x"  # Адрес внешнего DNS-сервера        gateway: "d.d.d.1"  # Адрес default gateway        cidr: "d.d.d.0/24"  # Блок адресов в формате CIDR        allocation_pools:          start: "d.d.d.100"          end: "d.d.d.200"        enable_dhcp: false
  3. Запустите плейбуки:

    $ cd ~/inventory/vkcloud/$ ansible-playbook -i vkcloud.yml --diff -e env=vkcloud -t provider_net ../ansible-openstack/playbooks/post-deploy.yml$ ansible-playbook -i vkcloud.yml --diff -e env=vkcloud -e serial=20 ../ansible-openstack/playbooks/public_haproxy.yml$ ansible-playbook -i vkcloud.yml --diff -e env=vkcloud -e serial=20 ../ansible-openstack/playbooks/private_haproxy.yml

OpenStack CLI

  1. Выполните подготовительные операции (подробнее — в разделе Вход для Администратора Платформы).

  2. Создайте внешнюю сеть (подробнее — в разделе Создание сети):

    $ openstack network create \    --project <ID_ПРОЕКТА> \    --provider-network-type vlan \    --external \    --provider-physical-network vlan \    --provider-segment <СЕГМЕНТ_СЕТИ> \    --no-share \    <НАЗВАНИЕ_ВНЕШНЕЙ_СЕТИ>
  3. Выведите список RBAC-правил созданной сети:

    $ openstack network rbac list --long | grep <ID_ВНЕШНЕЙ_СЕТИ>
  4. Отредактируйте RBAC-правило внешней сети, чтобы выдать доступ нужному проекту:

    $ openstack network rbac set --target-project <ID_ПРОЕКТА> <ID_RBAC-ПРАВИЛА>
  5. Создайте RBAC-правило для внешней сети с параметром access_as_shared, чтобы сеть и её подсеть были доступны только указанному проекту:

    $ openstack network rbac create \     --target-project <ID_ПРОЕКТА> \     --type network \    --action access_as_shared \    <ID_ВНЕШНЕЙ_СЕТИ>

Чтобы через внешнюю сеть, созданную с помощью OpenStack CLI, работали PaaS-сервисы:

  1. Пропишите внешнюю сеть в файл <vkcloud>/group_vars/vkcloud/vars.yml.

  2. Запустите плейбуки:

    $ ansible-playbook -i vkcloud.yml --diff -e env=vkcloud -e serial=20 ../ansible-openstack/playbooks/public_haproxy.yml$ ansible-playbook -i vkcloud.yml --diff -e env=vkcloud -e serial=20 ../ansible-openstack/playbooks/private_haproxy.yml

Редактирование внешней сети

Чтобы отредактировать внешнюю сеть, выполните команду OpenStack CLI из раздела Изменение сети.

Удаление сетей и сетевых подключений

  1. В Портале администратора перейдите в раздел Сетевая подсистемаПорты.
  2. Установите флажки для портов, у которых в столбце Подключенное устройство указано значение compute.
  3. Нажмите кнопку удаления справа от кнопки Добавить.

Удалять внешние сети можно при помощи OpenStack CLI, выполнив команду из раздела Удаление сети.

Добавление нового сегмента внешних адресов

Чтобы добавить подсеть адресов во внешнюю сеть, создайте новую подсеть в этой внешней сети (подробнее — в разделе Создание подсети).

Пример выполнения команды
$ openstack subnet create --network ext-net --subnet-range 203.0.114.0/24 --allocation-pool start=203.0.114.1,end=203.0.114.253 --gateway 203.0.114.254 ext-net-subnet2