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

退出打印视图

更新时间: 2016 年 6 月
 
 

创建外部网络

创建路由器后,接下来配置外部网络。通过外部网络的网关,云的内部网络中的用户可以连接到 Internet。

下图显示了单个路由器如何支持云项目的网络通信。

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

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

该图显示了以下内容:

  • 两个项目(租户 A租户 B

  • 四个 VM(VM1VM2VM3VM4

  • 四个子网(HRENGITACCT

  • 路由器

  • 外部网络

向内部网络提供对外部网络的访问时,VM 的 IP 地址将映射到分配给外部网络的浮动地址中的一个。

如何创建外部网络

此过程介绍了如何创建代表外部网络的虚拟网络。此虚拟网络不使用 DHCP。而是,创建浮动 IP 地址,并将其分配给项目,供这些项目下的 Nova VM 实例使用。这些步骤创建 VLAN 类型的网络,但是此过程适用于创建其他网络类型,例如平面网络。

外部网络的创建可以独立于内部网络的创建。

开始之前

完成弹性虚拟交换机的配置。有关更多信息,请参见如何安装并配置 Neutron,尤其注意配置 EVS 的步骤。

  1. 为 Neutron 设置全局 shell 变量。
    controller# export OS_USERNAME=neutron
    controller# export OS_PASSWORD=service-password
    controller# export OS_PROJECT_NAME=service
    controller# export OS_AUTH_URL=http://$CONTROLLER_ADMIN_NODE:5000/v2.0
  2. (u53ef选) 获取 VLAN 范围。
    controller# evsadm show-controlprop -p vlan-range
  3. 创建外部网络。
    controller# neutron net-create --provider:network_type=vlan \
    --provider:segmentation_id=VLAN-nbr \
    --router:external network-name
    

    此步骤假定根据如何安装并配置 Neutron创建 VLAN 网络。segmentation_id 是在配置 EVS 时定义其范围的 VLAN 网络的 VLAN ID。


    注 -  如果要创建平面网络,则无需指定段 ID。
  4. 创建外部网络的子网。

    分配池由分配给子网的某个范围的浮动 IP 地址组成。

    controller# neutron subnet-create --name subnet-name --disable-dhcp \
       --allocation-pool start=start-IP,end=end-IP \
       network-name subnet-IP
  5. 向路由器添加外部网络。
    controller# neutron router-gateway-set router-name ext-network-ID

    注 -  缺省情况下,发出此命令时启用 SNAT。启用 SNAT 后,专用网络中的 VM 可以访问外部网络。不过,不能从云外部访问实例本身。要禁用 SNAT,请在 neutron router-gateway-set 子命令中指定 –--disable-snat 选项。
  6. (u53ef选) 显示关于路由器的信息。
    controller# neutron router-show router-name
示例 2  创建外部网络

此示例说明如何创建外部网络,并将其准备就绪,以供云中的内部网络使用。

要创建平面网络,另请参见 https://blogs.oracle.com/openstack/tags/juno 的第 2 部分中提供的示例。

controller# export OS_USERNAME=neutron
controller# export OS_PASSWORD=service-password
controller# export OS_PROJECT_NAME=service
controller# export OS_AUTH_URL=http://$CONTROLLER_ADMIN_NODE:5000/v2.0

controller# evsadm show-controlprop -p vlan-range
PROPERTY          PERM VALUE       DEFAULT   HOST
vlan-range        rw   1,200-300   --        --

controller# neutron net-create --router:external \
--provider:network_type=vlan --provider:segmentation_id=1 ext_network
Created a new network:
+--------------------------+--------------------------------------+
| Field                    | Value                                |
+--------------------------+--------------------------------------+
| admin_state_up           | True                                 |
| id                       | 08cf49c8-f28f-49c1-933d-bdb1017e0294 |
| name                     | ext_network                          |
| provider:network_type    | vlan                                 |
| provider:segmentation_id | 1                                    |
| router:external          | True                                 |
| shared                   | False                                |
| status                   | ACTIVE                               |
| subnets                  |                                      |
| project_id               | 7d1caf0854b24becb28df5c5cabf72cc     |
+--------------------------+--------------------------------------+

controller# neutron subnet-create --name ext_subnet --disable-dhcp \
   --allocation-pool start=10.134.10.8,end=10.134.10.254 \
   ext_network 10.134.10.0/24
Created a new subnet:
+-------------------+---------------------------------------------------+
| Field             | Value                                             |
+-------------------+---------------------------------------------------+
| allocation_pools  | {"start": "10.134.10.8", "end": "10.134.10.254"}  |
| cidr              | 10.134.10.0/24                                    |
| dns_nameservers   |                                                   |
| enable_dhcp       | False                                             |
| gateway_ip        | 10.134.13.1                                       |
| host_routes       |                                                   |
| id                | fce503ff-f483-4024-b122-f2524e3edae1              |
| ip_version        | 4                                                 |
| ipv6_address_mode |                                                   |
| ipv6_ra_mode      |                                                   |
| name              | ext_subnet                                        |
| network_id        | 08cf49c8-f28f-49c1-933d-bdb1017e0294              |
| project_id        | 7d1caf0854b24becb28df5c5cabf72cc                  |
+-------------------+---------------------------------------------------+

controller# neutron router-gateway-set ext-router 08cf49c8-f28f-49c1-933d-bdb1017e0294
Set gateway for router ext-router

controller# neutron router-show ext-router
+-----------------------+-------------------------------------------------------+
| Field                 | Value                                                 |
+-----------------------+-------------------------------------------------------+
| admin_state_up        | True                                                  |
| external_gateway_info | {"network_id": "08cf49c8-f28f-49c1-933d-bdb1017e0294",|
|                       | "enable_snat": true,                                  |
|                       | "external_fixed_ips":                                 |
|                       |[{"subnet_id": "fce503ff-f483-4024-b122-f2524e3edae1", |
|                       |"ip_address": "10.134.10.8"}]} |                       |
| id                    | f89b24ed-42dd-48b0-8f4b-fd41887a3370                  |
| name                  | ext-router                                            |
| status                | ACTIVE                                                |
| project_id            | 7d1caf0854b24becb28df5c5cabf72cc                      |
+-----------------------+-------------------------------------------------------+

另请参见

如何向内部网络提供外部连接

使用此过程以允许内部网络访问更广泛的公共网络。此过程假定特定项目已存在内部网络。要使用系统信息显示板创建项目内部网络,请参见创建项目的内部网络

开始之前

在继续操作之前,请获取需要公共访问权限的子网名称。

  1. 为 Neutron 设置全局 shell 变量。
    controller# export OS_USERNAME=neutron
    controller# export OS_PASSWORD=service-password
    controller# export OS_PROJECT_NAME=service
    controller# export OS_AUTH_URL=http://$CONTROLLER_ADMIN_NODE:5000/v2.0
  2. 标识需要外部访问权限的子网的 ID。
    controller# neutron subnet-list | grep subnet-name
  3. (u53ef选) 获取路由器的名称。
    controller# neutron router-list
  4. 添加子网的 ID 作为路由器接口。
    controller# neutron router-interface-add router-name subnetID
示例 3  将内部网络连接到外部网络

此示例使用了在如何为项目配置网络中创建的 HR 内部网络。HR 网络(其子网为 HR_Subnet)需要公共网络访问权限。

controller# neutron subnet-list | grep HR_Subnet
| b6feff42-36aa-4235- | HR_Subnet  | 10.132.30.0/24 | {"start": "10.132.30.2", |
|   9fe0-ac5de6b43af3 |            |                |  "end": "10.132.30.254"} |

controller# neutron router-list
+---------------------  +------------+--------------------------------+
| id                    | name       | external_gateway_info          |
+---------------------  +------------+--------------------------------+
| f89b24ed-42dd-48b0-   | ext-router | {"network_id": "6c4c1823-a203- |
|    8f4b-fd41887a3370  |            |    43b1-9674-ddb5ff4185fc",    |
|                       |            | "enable_snat": true,           |
|                       |            | "external_fixed_ips":          |
|                       |            | [{"subnet_id": "83d9b40f-cc61- |
|                       |            |    4696-b22e-b4cbc2aa3872",    |
|                       |            | "ip_address": "10.132.10.8"}]} |
+----------  -----------+------------+--------------------------------+

controller# neutron router-interface-add ext-router b6feff42-36aa-4235-9fe0-ac5de6b43af3
Added interface b6feff42-36aa-4235-9fe0-ac5de6b43af3 to router ext-router.

如何观察 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.10.8/24
      l3ed527f842_0_0/v4a static     ok      --         10.134.10.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]