0

我首先在 Centos 7 x86_64 最小安装上禁用了 NetworkManager 和 selinux。

我已按照 Red Hat 说明在此处使用 Packstack 部署 Openstack: https ://openstack.redhat.com/Running_an_instance_with_Neutron

启动 Cirros 实例后,我的浮动 ip 与我设置的 DHCP 池匹配,但默认情况下它没有分配给 eth0。

我登录了虚拟机,并配置了 eth0 以匹配浮动 ip,但它仍然无法访问,即使我使用路由设置了默认网关。

安全组在 0.0.0.0/0 上有 tcp 和 IMCP 的入口规则,因此我的理解是,如果已配置,我应该能够访问它。

我已经启动了一个 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"}      |

我可以从我的本地网络 ping 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

但是,当我在来宾 vm 中配置它时,我无法 ping 这个网关。

使用 ovsctl,我看到网桥在那里,并且在我的第二个 NIC 上正确设置了它的外部端口:

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

1 回答 1

2

首先,您可能对它应该如何工作有一个误解:

启动 Cirros 实例后,我的浮动 ip 与我设置的 DHCP > 池匹配,但默认情况下它没有分配给 eth0。

浮动 IP 地址永远不会直接分配给您的实例。您的实例接收来自内部网络的地址(您使用 、 等创建的neutron net-createneutron subnet-create

当您将浮动 ip 与实例关联时:

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

该地址在 neutron 路由器内部配置,neutron 创建 NAT 规则,将该地址映射到您的实例的内部地址。

考虑到这一点:

默认的packstack中介设置将在 neutron 中配置的两个网络中生成结果,命名为publicprivate. 实例应连接到private网络;如果您为用户使用凭据,则需要通过传递给命令来admin明确这一点。--nic net-id=nnnnnnova boot

如果您以demo用户身份启动实例,这将自动发生,因为private网络归demo租户所有,并且是该租户唯一可见的非外部网络。

您的实例应该从private网络接收到一个 ip 地址,对于默认的 packstack 配置,该地址将是 10.0.0.0/24 网络。

如果您的实例没有收到 IP 地址

某处存在配置问题,阻止源自您的实例的 dhcp 请求到达您的专用网络的 dhcp 服务器,该专用网络在您的控制器上名为 的网络命名空间中运行dhcp-nnnn,其中网络nnnn的 UUID 是privatetcpdump在从实例到 dhcp 命名空间的路径上的各个点应用是此时诊断问题的好方法。

本文(免责声明:我在作者中)详细介绍了在 Neutron 环境中如何连接各种组件。它有点长(例如,它不包括像 DVR 或 HA 路由器这样的新功能),但它仍然很好地概述了什么连接到什么。

如果您的实例确实收到了 IP 地址

如果您的实例确实收到来自private网络的 IP 地址,那么您需要将注意力集中在中子路由器和外部网络的配置上。

一个中子路由器被实现为一个名为 的网络命名空间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您应该会在您的浮动 IP 网络的 CIDR 范围内的接口上看到一个或多个地址。如果您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 网络的网关地址的默认路由。

我要在这里停下来。如果您通过其中一些诊断程序并发现问题或有疑问,请告诉我,我会尝试适当地更新它。

于 2015-03-02T22:06:26.633 回答