Настройка внешней сети
Платформа поддерживает варианты сетей:
VLAN.VxLANвнутри тенанта.VxLANс анонсом черезBGP.
В этом разделе приведена краткая инструкция по созданию внешней VLAN-сети с использованием команд OpenStack CLI.
Для реализации данной задачи на уровне Neutron создаётся связка Network-Subnet, которая будет выходить в корпоративную сеть в виде инкапсулированного VLAN-трафика.
Чтобы создать внешнюю сеть:
-
Измените настройки в конфигурационных файлах, расположенных в директории
<vkcloud>/group_vars/на деплой-ноде:-
В файле
<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 -
В следующих файлах задайте настройки мостов для выхода ВМ во внешнюю сеть: br-vlan интерфейс для выхода с VLAN, br-ex интерфейс для выхода без VLAN (создаётся как дополнение, без какого-либо присвоенного IP):
-
<vkcloud>_compute/vars.yml— файл с настройками вычислительных узлов, на которых будут запускаться ВМ.compute_network_ifcfg_vlan: |DEVICE=br-vlanDEVICETYPE=ovsTYPE=OVSBridgeBOOTPROTO=noneONBOOT=yesNOZEROCONF=yesOVS_EXTRA="add-port br-vlan bond0"compute_network_ifcfg_external: |DEVICE=br-exDEVICETYPE=ovsTYPE=OVSBridgeBOOTPROTO=staticONBOOT=yesNOZEROCONF=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-exDEVICETYPE=ovsTYPE=OVSBridgeBOOTPROTO=staticONBOOT=yesNOZEROCONF=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-vlanDEVICETYPE=ovsTYPE=OVSBridgeBOOTPROTO=noneONBOOT=yesNOZEROCONF=yesOVS_EXTRA="add-port br-vlan bond0" -
<vkcloud>_octavia/vars.yml— файл с настройками балансировщика Octavia:octavia_network_ifcfg_external: |DEVICE=br-exDEVICETYPE=ovsTYPE=OVSBridgeBOOTPROTO=staticONBOOT=yesNOZEROCONF=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-vlanDEVICETYPE=ovsTYPE=OVSBridgeBOOTPROTO=noneONBOOT=yesNOZEROCONF=yesOVS_EXTRA="add-port br-vlan bond0" -
<vkcloud>_network/vars.yml— файл с настройками Neutron-сети:neutron_network_ifcfg_external: |DEVICE=br-exDEVICETYPE=ovsTYPE=OVSBridgeBOOTPROTO=staticONBOOT=yesNOZEROCONF=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-vlanDEVICETYPE=ovsTYPE=OVSBridgeBOOTPROTO=noneONBOOT=yesNOZEROCONF=yesOVS_EXTRA="add-port br-vlan bond0"
-
-
-
Задайте название окружения и запустите плейбуки:
$ 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 -
Создайте внешнюю сеть, через которую будет осуществляться взаимодействие приватных пользовательских сетей с внешними сетями организации:
$ openstack network create --provider-network-type vlan --external --provider-physical-network vlan --provider-segment <VLAN_ID> --share <НАЗВАНИЕ_ВНЕШНЕЙ_СЕТИ> -
Создайте подсеть в только что созданной сети:
$ 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.
- <ПОДСЕТЬ> — адрес подсети, которую вам выдали в этом VLAN. Например,
Чтобы обеспечить доступ ВМ в пользовательских внутренних сетях во внешнюю сеть, задайте внешнюю сеть как шлюз для маршрутизатора внутренней:
-
Войдите в Портал самообслуживания с использованием учётной записи Администратора Платформы.
-
Перейдите в раздел Виртуальные сети → Маршрутизаторы.
-
Нажмите кнопку Добавить маршрутизатор.
- Укажите название пользовательской сети.
- Включите флажок Подключение к внешней сети.
- Выберите подсеть в раскрывающемся списке Список подсетей.
-
Нажмите кнопку Создать.
-
Перейдите в раздел Виртуальные сети → Сети.
-
Нажмите кнопку Создать.
-
Укажите название сети при необходимости, в списке Маршрутизатор выберите ранее созданный маршрутизатор.
-
В области Список подсетей нажмите на значок ••• справа от названия подсети и выберите пункт Редактировать подсеть. Включите параметр Включить DHCP.
-
Отключите параметр Приватный DNS и укажите используемые DNS-серверы.
-
Нажмите кнопку Создать.
-
Нажмите кнопку Добавить сеть.
После подключения внутренней сети к внешней для ВМ во внутренней сети появится возможность назначения внешнего 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 <НАЗВАНИЕ_ВНУТРЕННЕЙ_СЕТИ> <НАЗВАНИЕ_ВНУТРЕННЕЙ_ПОДСЕТИ>
Чтобы для каждого проекта создать внешнюю сеть, доступную только в нём:
-
Отключите использование внешней глобальной сети. В файле
<vkcloud>/group_vars/vkcloud/vars.ymlзадайте параметруcreate_external_networkзначениеfalse. -
В файле
<vkcloud>/group_vars/vkcloud/vars.ymlв переменнойpostdeploy_provider_networkзадайте параметры новых сетей.Пример фрагмента файла `vars.yml`# Описание провайдерских сетей для каждого проектаpostdeploy_provider_network:# Название проекта, в котором будет создана сеть- project_name: "ProjectX"# Имя новой сети в OpenStackname: "projectX_provider_net1"type: "vlan"# VLAN ID новой сетиsegmentation_id: 1001# Cеть будет создана с флагом --external (внешняя)external: true# Cеть будет создана с флагом --shared и не будет доступна для редактирования пользователю Портала самообслуживанияshared: true# Описание подсетиsubnet:name: "provider_subnet1"dns_nameservers: "x.x.x.x" # Адрес внешнего DNS-сервераgateway: "d.d.d.1" # Адрес default gatewaycidr: "d.d.d.0/24" # Блок адресов в формате CIDRallocation_pools:start: "d.d.d.100"end: "d.d.d.200"enable_dhcp: false -
Запустите плейбук:
$ cd ~/inventory/vkcloud/$ ansible-playbook --diff -i vkcloud.yml -e env=vkcloud -t provider_net ../ansible-openstack/playbooks/post-deploy.yml
Чтобы создать внешнюю сеть для проекта при помощи OpenStack CLI:
-
Выполните подготовительные операции (подробнее — в разделе Вход для Администратора Платформы).
-
Выполните команду (подробнее — в разделе Создание сети):
Пример команды создания внешней сети$ openstack network create --project <НАЗВАНИЕ_ПРОЕКТА> --enable --external <НАЗВАНИЕ_ВНЕШНЕЙ_СЕТИ>
Чтобы отредактировать внешнюю сеть, выполните команду OpenStack CLI из раздела Изменение сети.
- В Портале администратора перейдите в раздел Сетевая подсистема → Порты.
- Установите флажки для портов, у которых в столбце Подключенное устройство указано значение compute.
- Нажмите кнопку удаления справа от кнопки Добавить.
Удалять внешние сети можно при помощи 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