在 Oracle® Solaris 中安装和配置 OpenStack (Havana)

退出打印视图

更新时间: 2016 年 5 月
 
 

配置 Neutron L3 代理

本节介绍如何创建代表外部网络的虚拟网络。在此虚拟网络上,不使用 DHCP,而是创建浮动 IP 地址。这些浮动 IP 地址分配给特定的租户,并且可以分配给 Nova VM 实例以供该租户下的用户使用。Neutron L3 代理将自动在分配给 Nova 实例的地址和浮动 IP 地址之间创建一对一的 NAT 映射。

OpenStack Neutron 的 Oracle Solaris 11.2 实现通过专用网络部署模型支持提供商路由器。在此部署模型中,每个租户都有一个或多个专用网络,并且所有租户网络都共享相同的路由器。数据管理员创建、拥有和管理路由器。该路由器在租户的网络拓扑视图中不可见。因为只有一个路由器,所以租户网络无法使用重叠的 IP 地址。管理员代表租户创建专用网络。

缺省情况下,此模型中的路由器禁止在属于同一租户的专用网络之间路由:一个专用网络中的 VM 实例无法与其他专用网络中的 VM 实例通信,即使它们属于同一租户也是如此。要更改此行为,请将 /etc/neutron/l3_agent.ini 配置文件中的 allow_forwarding_between_networks 设置为 True 并重新启动 neutron-l3-agent SMF 服务。

此模型中的路由器为租户 VM 实例提供与外部世界的连接。该路由器在连接路由器与外部网络的接口上执行双向 NAT。租户可以根据需要创建任意数量的浮动 IP(公共 IP),也可以根据浮动 IP 限额进行创建,然后将这些浮动 IP 与需要外部连接的 VM 实例关联。

下图展示了 Oracle Solaris 11.2 Neutron 部署模型。图后面为该图的说明。

图 9  使用专用网络模型的提供商路由器

image:两个租户,每个具有两个内部网络和两个 VM 实例

在上图所示的模型中,每个租户具有两个内部网络和两个 VM 实例。

租户 A
  • 包含子网 192.168.100.0/24 和网关 192.168.100.1 的 HR 网络

  • 包含子网 192.168.101.0/24 和网关 192.168.101.1 的 ENG 网络

  • 通过固定 IP 地址 192.168.100.3 连接到 HR 的 VM1

  • 通过固定 IP 地址 192.168.101.3 连接到 ENG 的 VM2

租户 B
  • 包含子网 192.168.102.0/24 和网关 192.168.102.1 的 IT 网络

  • 包含子网 192.168.103.0/24 和网关 192.168.103.1 的 ACCT 网络

  • 通过固定 IP 地址 192.168.102.3 连接到 IT 的 VM3

  • 通过固定 IP 地址 192.168.103.3 连接到 ACCT 的 VM4

如下表所示配置双向 NAT 表。

内部 IP
浮动 IP
192.168.100.3
10.134.13.40
192.168.101.3
10.134.13.9

所有网关接口在运行 neutron-l3-agent SMF 服务的节点上实例化。虽然云可以具有许多 Neutron 实例,但是每个云只需要一个 neutron-l3-agent

外部网络是与可从外部访问的子网 10.134.13.0/24 关联的提供商网络。租户将从此网络创建浮动 IP 地址,并将这些地址与其 VM 实例关联。VM1 和 VM2 分别与浮动 IP 10.134.13.40 和 10.134.13.9 关联。VM1 和 VM2 可以通过这些 IP 地址从外部进行访问。

下图显示了这些租户资源在网络节点和两个计算节点中的配置方式。图后面为图中所示部分功能的说明。

图 10  Neutron L3 代理配置

image:网络和计算节点中配置的内部网络和 VM 实例
VNIC

虚拟网络接口。

l3e...

L3 代理在执行双向 NAT 的外部 ("e") 网络上创建了 VNIC。

l3i...

L3 代理在具有缺省网关 IP 地址的内部 ("i") 网络上创建了 VNIC。

下面的列表显示了 IP 地址在本示例配置中的使用方式。

10.134.13.1

缺省网关

10.134.13.2 - 10.134.13.7

为向租户公开 OpenStack API(例如 Nova、Cinder、Glance)而留出的 IP 地址

10.134.13.9 - 10.134.13.254

租户 VM 实例的浮动 IP 地址

如何配置 Neutron L3 代理

此过程介绍如何使用 service 租户创建将由数据中心内的所有租户使用的路由器、外部网络和外部子网。

此过程由数据中心管理员执行。必须使用命令行配置共享的单个路由器并关联来自不同租户的网络和子网,因为 OpenStack 系统信息显示板仅允许您一次管理一个租户的资源。

执行以下步骤时,请参阅图 10

开始之前

必须先完成内部网络的配置,然后再执行此过程。

  1. 启用 Solaris IP 过滤器功能。
    network# svcadm enable ipfilter
  2. 在整台主机上启用 IP 转发。
    network# ipadm set-prop -p forwarding=on ipv4
    network# ipadm set-prop -p forwarding=on ipv6
  3. 确保 EVS 配置正确且具有外部网络所需的 VLAN ID。

    在以下示例中,VLAN ID 和范围值均基于Step 9 完成的 EVS 配置。

    network# evsadm show-controlprop -p vlan-range,l2-type
    PROPERTY     PERM    VALUE         DEFAULT    HOST
    l2-type      rw      vlan          vlan       --
    vlan-range   rw      13,1000-2000  --         --
    
  4. 确保 service 租户存在。
    network# keystone tenant-list
  5. 创建提供商路由器。

    提供商路由器创建为 service 租户下的 OpenStack neutron 用户。

    请注意新路由器的 UUID (id)。您将在下一步中使用此 UUID。

    network# export OS_USERNAME=neutron
    network# export OS_PASSWORD=neutron-password
    network# export OS_TENANT_NAME=service
    network# export OS_AUTH_URL=http://controller-name:5000/v2.0
    network# neutron router-create provider_router
    Created a new router:
    +-----------------------+--------------------------------------+
    | Field                 | Value                                |
    +-----------------------+--------------------------------------+
    | admin_state_up        | True                                 |
    | external_gateway_info |                                      |
    | id                    | 181543df-40d1-4514-ea77-fddd78c389ff |
    | name                  | provider_router                      |
    | status                | ACTIVE                               |
    | tenant_id             | f164220cb02465db929ce520869895fa     |
    +-----------------------+--------------------------------------+
  6. 更新 L3 代理配置文件。

    使用之前步骤中的路由器 UUID (id) 更新 /etc/neutron/l3_agent.ini 文件中 router_id 的值。

    router_id = 181543df-40d1-4514-ea77-fddd78c389ff  
  7. 启用 neutron-l3-agent SMF 服务。
    network# svcadm enable neutron-l3-agent
  8. 创建外部网络。

    虚拟网络创建为 service 租户下的 OpenStack neutron 用户。

    network# neutron net-create --provider:network_type=vlan \
    --provider:segmentation_id=13 --router:external=true external_network
    Created a new network:
    +--------------------------+--------------------------------------+
    | Field                    | Value                                |
    +--------------------------+--------------------------------------+
    | admin_state_up           | True                                 |
    | id                       | f67f0d72-0ddf-11e4-9d95-e1f29f417e2f |
    | name                     | external_network                     |
    | provider:network_type    | vlan                                 |
    | provider:segmentation_id | 13                                   |
    | router:external          | True                                 |
    | shared                   | False                                |
    | status                   | ACTIVE                               |
    | subnets                  |                                      |
    | tenant_id                | f164220cb02465db929ce520869895fa     |
    +--------------------------+--------------------------------------+
  9. 将子网与外部网络关联。

    为外部网络创建关联的子网网络,指定禁用 DHCP 并将该子网用于外部路由。指定从其分配浮动 IP 地址的可路由 IP 子网。在本示例中,该子网与 VLAN ID 13 关联。

    network# neutron subnet-create  --enable-dhcp=False \
    --allocation-pool start=10.134.13.8,end=10.134.13.254 \
    --name external_subnet  external_network 10.134.13.0/24
    Created a new subnet:
    
    +------------------+--------------------------------------------------+
    | Field            | Value                                            |
    +------------------+--------------------------------------------------+
    | allocation_pools | {"start": "10.134.13.8", "end": "10.134.13.254"} |
    | cidr             | 10.134.13.0/24                                   |
    | dns_nameservers  |                                                  |
    | enable_dhcp      | False                                            |
    | gateway_ip       | 10.134.13.1                                      |
    | host_routes      |                                                  |
    | id               | 5d9c8958-0de0-11e4-9d96-e1f29f417e2f             |
    | ip_version       | 4                                                |
    | name             | external_subnet                                  |
    | network_id       | f67f0d72-0ddf-11e4-9d95-e1f29f417e2f             |
    | tenant_id        | f164220cb02465db929ce520869895fa                 |
    +------------------+--------------------------------------------------+
  10. 向路由器添加外部网络。

    在下面的命令中,第一个 UUID 是 provider_router UUID,而第二个 UUID 是 external_network UUID。

    network# neutron router-gateway-set \
    181543df-40d1-4514-ea77-fddd78c389ff \
    f67f0d72-0ddf-11e4-9d95-e1f29f417e2f
    Set gateway for router 181543df-40d1-4514-ea77-fddd78c389ff
    network# neutron router-list -c name -c external_gateway_info
    +-----------------+--------------------------------------------------------+
    | name            | external_gateway_info                                  |
    +-----------------+--------------------------------------------------------+
    | provider_router | {"network_id": "f67f0d72-0ddf-11e4-9d95-e1f29f417e2f"} |
    +-----------------+--------------------------------------------------------+
  11. 向路由器添加租户的专用网络。

    neutron net-list 命令显示的网络之前已配置。

    network# keystone tenant-list
    +----------------------------------+---------+---------+
    |                id                |   name  | enabled |
    +----------------------------------+---------+---------+
    | 511d4cb9ef6c40beadc3a664c20dc354 |   demo  |   True  |
    | f164220cb02465db929ce520869895fa | service |   True  |
    +----------------------------------+---------+---------+
    network# neutron net-list --tenant-id=511d4cb9ef6c40beadc3a664c20dc354
    +-------------------------------+------+------------------------------+
    | id                            | name | subnets                      |
    +-------------------------------+------+------------------------------+
    | c0c15e0a-0def-11e4-9d9f-      | HR   | c0c53066-0def-11e4-9da0-     |
    |  e1f29f417e2f                 |      | e1f29f417e2f 192.168.100.0/24|   
    | ce64b430-0def-11e4-9da2-      | ENG  | ce693ac8-0def-11e4-9da3-     |
    |  e1f29f417e2f                 |      | e1f29f417e2f 192.168.101.0/24|
    +-------------------------------+------+------------------------------+

    在下面的命令中,第一个 UUID 是 provider_router UUID,而第二个 UUID 是 HR 子网 UUID。

    network# neutron router-interface-add  \
    181543df-40d1-4514-ea77-fddd78c389ff \
    c0c53066-0def-11e4-9da0-e1f29f417e2f       (HR subnet UUID)
    Added interface 7843841e-0e08-11e4-9da5-e1f29f417e2f to router 181543df-40d1-4514-ea77-fddd78c389ff.

    在下面的命令中,第一个 UUID 是 provider_router UUID,而第二个 UUID 是 ENG 子网 UUID。

    network# neutron router-interface-add \
    181543df-40d1-4514-ea77-fddd78c389ff \
    ce693ac8-0def-11e4-9da3-e1f29f417e2f
    Added interface 89289b8e-0e08-11e4-9da6-e1f29f417e2f to router 181543df-40d1-4514-ea77-fddd78c389ff.

另请参见

如何创建浮动 IP 地址并将其关联为租户用户

此过程由租户用户使用 OpenStack Horizon 系统信息显示板执行。

  1. 登录 OpenStack 系统信息显示板。

    使用租户用户的凭证按照如何访问 OpenStack 系统信息显示板中的说明登录。

  2. 选择 "Project"(项目)> "Access & Security"(访问 & 安全性)> "Floating IPs"(浮动IP)。
  3. 选择 external_network
  4. 单击 "Allocate IP"(分配IP)按钮。

    "Floating IPs"(浮动IP)选项卡显示浮动 IP 地址 10.134.13.9 已分配。

  5. 单击 "Associate"(关联)按钮。
  6. 从下拉菜单中选择 VM 实例的端口。

    "Project"(项目)> "Instances"(云主机)窗口显示该浮动 IP 地址已与 VM 实例关联。

    如果您在启动 VM 实例时选择了密钥对(SSH 公钥),则系统会为 VM 实例中的 root 用户将该 SSH 密钥添加到 authorized_keys 文件中。

  7. 登录正在运行的 VM 实例。
    global# ssh root@10.134.13.9
    Last login: Fri Jul 18 00:37:39 2014 from 10.132.146.13
    Oracle Corporation      SunOS 5.11      11.2     June 2014
    root@host-192-168-101-3:~# uname -a
    SunOS host-192-168-101-3 5.11 11.2 i86pc i386 i86pc
    root@host-192-168-101-3:~# zoneadm list -cv
    ID NAME              STATUS      PATH                 BRAND      IP    
     2 instance-00000001 running     /                    solaris    excl 
    root@host-192-168-101-3:~# ipadm
    NAME             CLASS/TYPE STATE     UNDER      ADDR
    lo0              loopback   ok        --         --
       lo0/v4        static     ok        --         127.0.0.1/8
       lo0/v6        static     ok        --         ::1/128
    net0             ip         ok        --         --
       net0/dhcp     inherited  ok        --         192.168.101.3/24

如何观察 L3 代理配置

您可以使用诸如 ipfippoolipnat 等 IP 过滤器命令以及诸如 dladmipadm 等网络命令观察 neturon-l3-agent 执行的配置并对其进行故障排除。

  1. 显示 neutron-l3-agent 创建的 VNIC。
    network# dladm show-vnic
    LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE VIDS
    l3i7843841e_0_0     net1         1000   2:8:20:42:ed:22   fixed       200
    l3i89289b8e_0_0     net1         1000   2:8:20:7d:87:12   fixed       201
    l3ed527f842_0_0     net0         100    2:8:20:9:98:3e    fixed       0
  2. 显示 neutron-l3-agent 创建的 IP 地址。
    network# ipadm
    NAME                  CLASS/TYPE STATE   UNDER      ADDR
    l3ed527f842_0_0       ip         ok      --         --
      l3ed527f842_0_0/v4  static     ok      --         10.134.13.8/24
      l3ed527f842_0_0/v4a static     ok      --         10.134.13.9/32
    l3i7843841e_0_0       ip         ok      --         --
      l3i7843841e_0_0/v4  static     ok      --         192.168.100.1/24
    l3i89289b8e_0_0       ip         ok      --         --
      l3i89289b8e_0_0/v4  static     ok      --         192.168.101.1/24
  3. 显示 IP 过滤器规则。
    network# ipfstat -io
    empty list for ipfilter(out)
    block in quick on l3i7843841e_0_0 from 192.168.100.0/24 to pool/4386082
    block in quick on l3i89289b8e_0_0 from 192.168.101.0/24 to pool/8226578
    network# ippool -l
    table role = ipf type = tree number = 8226578
    { 192.168.100.0/24; };
    table role = ipf type = tree number = 4386082
    { 192.168.101.0/24; };
  4. 显示 IP NAT 规则。
    network# ipnat -l
    List of active MAP/Redirect filters:
    bimap l3ed527f842_0_0 192.168.101.3/32 -> 10.134.13.9/32
    List of active sessions:
    BIMAP 192.168.101.3  22  <- -> 10.134.13.9  22 [10.132.146.13 36405]