Как настроить Openstack Packstack Juno для работы с внешней сетью на Centos 7

Сначала я отключил NetworkManager и selinux на минимальной установке Centos 7 x86_64.

Я выполнил инструкции Red Hat по развертыванию Openstack с Packstack здесь: https://openstack.redhat.com/Running_an_instance_with_Neutron

После запуска экземпляра Cirros мой плавающий IP-адрес совпадает с пулом DHCP, который я настроил, однако по умолчанию он не назначен для eth0.

Я вошел в виртуальную машину и настроил eth0 в соответствии с плавающим IP-адресом, но он все еще недоступен, даже когда я установил шлюз по умолчанию с маршрутом.

Группа безопасности имеет правила входа для tcp и IMCP на 0.0.0.0/0, поэтому я понимаю, что у меня должен быть доступ к ней, если она была настроена.

Я запустил образ Centos7, но подозреваю, что у него такая же проблема, потому что я не могу подключиться.

Может кто-нибудь дайте мне знать, как я могу это отладить? Я использую нейтрон на этом сервере и следую инструкциям для T

Моя сеть 192.168.1.0/24

# neutron net-show public
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | cfe5a8cc-1ece-4d63-85ea-6bd8803f2997 |
| name                      | public                               |
| provider:network_type     | vxlan                                |
| provider:physical_network |                                      |
| provider:segmentation_id  | 10                                   |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   | 9b14aa61-eea9-43e0-b03c-7767adc4cd62 |
| tenant_id                 | 75505125ed474a3a8e904f6ea8638cf0     |
+---------------------------+--------------------------------------+
# neutron subnet-show public_subnet
+-------------------+----------------------------------------------------+
| Field             | Value                                              |
+-------------------+----------------------------------------------------+
| allocation_pools  | {"start": "192.168.1.100", "end": "192.168.1.220"} |
| cidr              | 192.168.1.0/24                                     |
| dns_nameservers   |                                                    |
| enable_dhcp       | False                                              |
| gateway_ip        | 192.168.1.1                                        |
| host_routes       |                                                    |
| id                | 9b14aa61-eea9-43e0-b03c-7767adc4cd62               |
| ip_version        | 4                                                  |
| ipv6_address_mode |                                                    |
| ipv6_ra_mode      |                                                    |
| name              | public_subnet                                      |
| network_id        | cfe5a8cc-1ece-4d63-85ea-6bd8803f2997               |
| tenant_id         | 75505125ed474a3a8e904f6ea8638cf0                   |
+-------------------+----------------------------------------------------+
# neutron router-show router1
+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                 | Value                                                                                                                                                                                     |
+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| admin_state_up        | True                                                                                                                                                                                      |
| distributed           | False                                                                                                                                                                                     |
| external_gateway_info | {"network_id": "cfe5a8cc-1ece-4d63-85ea-6bd8803f2997", "enable_snat": true, "external_fixed_ips": [{"subnet_id": "9b14aa61-eea9-43e0-b03c-7767adc4cd62", "ip_address": "192.168.1.100"}]} |
| ha                    | False                                                                                                                                                                                     |
| id                    | ce896a71-3d7a-4849-bf67-0e61f96740d9                                                                                                                                                      |
| name                  | router1                                                                                                                                                                                   |
| routes                |                                                                                                                                                                                           |
| status                | ACTIVE                                                                                                                                                                                    |
| tenant_id             |                                                                                                                                                                                           |
+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
# neutron port-list
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
| id                                   | name | mac_address       | fixed_ips                                                                            |
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
| 5dddaf6c-7aa3-4b59-943c-65c7f05f8597 |      | fa:16:3e:b0:8b:29 | {"subnet_id": "9b14aa61-eea9-43e0-b03c-7767adc4cd62", "ip_address": "192.168.1.101"} |
| 6ce2580c-4967-488b-a803-a0f9289fe096 |      | fa:16:3e:50:2f:de | {"subnet_id": "9b14aa61-eea9-43e0-b03c-7767adc4cd62", "ip_address": "192.168.1.100"} |
| 920a7b64-76c0-48a0-a682-5a0051271252 |      | fa:16:3e:85:33:9a | {"subnet_id": "9b14aa61-eea9-43e0-b03c-7767adc4cd62", "ip_address": "192.168.1.102"} |
| 9636c04a-c3b0-4dde-936d-4a9470c9fd53 |      | fa:16:3e:8b:f2:0b | {"subnet_id": "892beeef-0e1c-4b61-94ac-e8e94943d485", "ip_address": "10.0.0.2"}      |
| 982f6394-c188-4eab-87ea-954345ede0a3 |      | fa:16:3e:de:7e:dd | {"subnet_id": "9b14aa61-eea9-43e0-b03c-7767adc4cd62", "ip_address": "192.168.1.103"} |
| d88af8b3-bf39-4304-aeae-59cc39589ed9 |      | fa:16:3e:23:b8:c5 | {"subnet_id": "892beeef-0e1c-4b61-94ac-e8e94943d485", "ip_address": "10.0.0.1"}      |

Я могу пропинговать созданный Neutron шлюз из моей локальной сети здесь:

# ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.437 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=0.063 ms

Однако я не могу пропинговать этот шлюз, когда настраиваю его в гостевой виртуальной машине.

Используя ovsctl, я вижу, что мост есть и его внешний порт правильно настроен на моем втором сетевом адаптере:

[root@server neutron]# ovs-vsctl list-br
br-ex
br-int
br-tun
[root@server neutron]# ovs-vsctl list-ports br-ex
enp6s0f1

person DevOops    schedule 02.03.2015    source источник


Ответы (1)


Во-первых, у вас может быть неправильное представление о том, как это должно работать:

После запуска экземпляра Cirros мой плавающий IP-адрес совпадает с пулом DHCP>, который я настроил, однако по умолчанию он не назначен для eth0.

Плавающие IP-адреса никогда не назначаются напрямую вашим экземплярам. Ваш экземпляр получает адрес из внутренней сети (которую вы создали с помощью neutron net-create, neutron subnet-create и т. Д.).

Когда вы связываете плавающий ip с экземпляром:

nova floating-ip-create <external_network_name>
nova floating-ip-associate <instance_name_or_id> <ip_address>

Этот адрес настраивается внутри нейтронного маршрутизатора, и нейтрон создает правила NAT, которые сопоставляют этот адрес с внутренним адресом вашего экземпляра.

Имея это в виду:

По умолчанию packstack опосредованная установка будет генерировать результат в двух сетях, настроенных на нейтрон, с именами public и private. Экземпляры должны быть подключены к private сети; если вы используете учетные данные для пользователя admin, вам нужно будет сделать это явным, передав --nic net-id=nnnnn команде nova boot.

Если вы запустите экземпляр как demo пользователь, это произойдет автоматически, потому что сеть private принадлежит demo клиенту и является единственной невнешней сетью, видимой этому клиенту.

Ваш экземпляр должен получить IP-адрес из сети private, которая для конфигурации стека пакетов по умолчанию будет сетью 10.0.0.0/24.

Если ваш экземпляр НЕ получает IP-адрес

Где-то существует проблема конфигурации, которая не позволяет запросам DHCP, исходящим от вашего экземпляра, достигать DHCP-сервера для вашей частной сети, который работает на вашем контроллере в сетевом пространстве имен с именем dhcp-nnnn, где nnnn - это UUID сети private. Применение tcpdump в различных точках на пути от экземпляра до пространства имен dhcp - хороший способ диагностировать ситуацию на этом этапе.

Эта статья (отказ от ответственности: я нахожусь в автор) подробно рассказывает о том, как различные компоненты связаны в среде Neutron. Это немного длинновато (например, оно не охватывает новые функции, такие как DVR или маршрутизаторы HA), но все же это хороший обзор того, что к чему подключается.

Если ваш экземпляр ДЕЙСТВИТЕЛЬНО получает IP-адрес

Если ваш экземпляр действительно получает IP-адрес из private сети, вам нужно сосредоточить свое внимание на конфигурации вашего нейтронного маршрутизатора и вашей внешней сети.

Нейтронный маршрутизатор реализован как сетевое пространство имен с именем qrouter-nnnn, где nnnn - это UUID соответствующего нейтронного маршрутизатора. Вы можете проверить это пространство имен с помощью команды ip netns. Например, учитывая:

$ neutron router-list
+--------------------------------------+------------+...
| id                                   | name       |...
+--------------------------------------+------------+...
| 92a5e69a-8dcf-400a-a2c2-46c775aee06b | router-nat |...
+--------------------------------------+------------+...

Вы можете запустить:

# ip netns exec qrouter-92a5e69a-8dcf-400a-a2c2-46c775aee06b ip addr

И смотрите конфигурацию интерфейса для роутера:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
10: qr-416ca0b2-c8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether fa:16:3e:54:51:50 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.255 scope global qr-416ca0b2-c8
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe54:5150/64 scope link 
       valid_lft forever preferred_lft forever
13: qg-2cad0370-bb: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether fa:16:3e:f8:f4:c4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.10/24 brd 192.168.200.255 scope global qg-2cad0370-bb
       valid_lft forever preferred_lft forever
    inet 192.168.200.2/32 brd 192.168.200.2 scope global qg-2cad0370-bb
       valid_lft forever preferred_lft forever
    inet 192.168.200.202/32 brd 192.168.200.202 scope global qg-2cad0370-bb
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fef8:f4c4/64 scope link 
       valid_lft forever preferred_lft forever

Вы также можете использовать ip netns для выполнения таких действий, как ping, из пространства имен маршрутизатора для проверки возможности подключения к внешним адресам. На самом деле, это хорошее место для начала - убедитесь, что у вас есть функциональное исходящее соединение из пространства имен маршрутизатора, прежде чем вы начнете пытаться протестировать что-то из ваших экземпляров Nova.

Вы должны увидеть один или несколько адресов на qg-nnnn интерфейсе, которые находятся в диапазоне CIDR вашей сети с плавающим IP-адресом. Если вы запустите ip route внутри пространства имен:

# ip netns exec qrouter-92a5e69a-8dcf-400a-a2c2-46c775aee06b ip route
default via 192.168.200.1 dev qg-2cad0370-bb 
10.0.0.0/24 dev qr-416ca0b2-c8  proto kernel  scope link  src 10.0.0.1 
192.168.200.0/24 dev qg-2cad0370-bb  proto kernel  scope link  src 192.168.200.10 

Вы должны увидеть маршрут по умолчанию с адресом шлюза, подходящим для вашей сети с плавающим IP.

Я собираюсь сделать паузу здесь. Если вы выполнили некоторые из этих диагностических сообщений и обнаружите проблемы или у вас возникнут вопросы, сообщите мне, и я постараюсь обновить это соответствующим образом.

person larsks    schedule 02.03.2015