案例描述

本案例共讲述了OpenStack高级服务使用案例。具体如下:

1.OpenStack共享文件系统manila服务的安装与使用;

2.OpenStack计费服务cloudkitty的安装与使用;

3.OpenStack密钥管理服务Barbican的安装与使用;

4.OpenStack VPNaaS服务的安装与使用。

案例一:共享文件系统服务

案例准备

规划节点

使用云主机搭建的OpenStack平台。节点规划见表1。

表1 节点规划

IP 主机名 节点
172.30.17.14 controller 控制节点
172.30.17.5 compute 计算节点

基础准备

使用云主机搭建的OpenStack平台作为实验节点,该案例只讲述共享文件系统服务的安装以使用方法方法。

案例实施

OpenStack共享服务介绍

OpenStack共享文件系统服务(manila)提供对共享或分布式文件系统的协调访问。供应和使用共享的方法由共享文件系统驱动程序或多后端配置情况下的驱动程序确定。有多种驱动程序也支持NFS、CIFS、HDFS、GlusterFS、CEPHFS、MAPRFS和其他协议。

共享文件系统API和调度程序服务通常在控制器节点上运行。根据使用的驱动程序,共享服务可以在控制器、计算节点或存储节点上运行。


Manila服务安装

(1)编写环境变量文件

使用命令编辑/etc/openstack/openrc.sh配置文件,添加Manila环境变量参数,SHARE_DISK为存储分区名称。

1
2
3
4
5
6
7
8
9
##--------------------Manila Config----------------##
##Password for Mysql Manila user. exmaple:000000
MANILA_DBPASS=000000

##Password for Keystore Manila user. exmaple:000000
MANILA_PASS=000000

#The NODE Object Disk for Manila. example:md126p5.
SHARE_DISK=vdb3

(2)控制节点安装服务

使用CRT等远程连接工具,连接至172.30.17.14控制节点,执行iaas-install-manila-controller.sh安装脚本。

1
[root@controller ~]# iaas-install-manila-controller.sh

(3)计算节点安装服务

使用CRT等远程连接工具,连接至172.30.17.5计算节点,执行iaas-install-manila-compute.sh安装脚本。

1
[root@compute ~]# iaas-install-manila-compute.sh

等待脚本执行完毕,即服务安装完毕。


使用共享服务

(1)创建文件共享类型

使用Manila命令创建default_share_type共享类型,命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# manila type-create default_share_type False
+----------------------+--------------------------------------+
| Property | Value |
+----------------------+--------------------------------------+
| required_extra_specs | driver_handles_share_servers : False |
| Name | default_share_type |
| Visibility | public |
| is_default | YES |
| ID | 467f8b2b-d1c4-4c79-ae6d-cdbc6ad6f0f8 |
| optional_extra_specs | |
| Description | None |
+----------------------+--------------------------------------+

使用Manila命令查询类型列表信息。命令如下:

1
2
3
4
5
6
7
8
9
[root@controller ~]# manila type-list
+---------------+-----------+----------+----------+-----------------------+------------+-----------+
| ID | Name |visibility|is_default| required_extra_specs | optional_ |Description|
extra_specs
+---------------+-----------+----------+----------+-----------------------+------------+-----------+
| 467f8b2b-d1c4 | default_ | public | YES | driver_handles_share_ | | None |
-4c79-ae6d share_type servers : False
-cdbc6ad6f0f8
+---------------+-----------+----------+----------+-----------------------+------------+-----------+

(2)创建共享文件目录

使用manila命令创建目录大小为2G的共享目录share01,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@controller ~]# manila create NFS 2 --name share01
+---------------------------------------+--------------------------------------+
| Property | Value |
+---------------------------------------+--------------------------------------+
| status | creating |
| share_type_name | default_share_type |
| description | None |
| availability_zone | None |
| share_network_id | None |
| share_server_id | None |
| share_group_id | None |
| host | |
| revert_to_snapshot_support | False |
| access_rules_status | active |
| snapshot_id | None |
| create_share_from_snapshot_support | False |
| is_public | False |
| task_state | None |
| snapshot_support | False |
| id | 6f6bd436-1a64-40bc-acf7-2db3cd0ff892 |
| size | 2 |
| source_share_group_snapshot_member_id | None |
| user_id | 21323bfecbc44df483ac0120154a43bf |
| name | share01 |
| share_type | 467f8b2b-d1c4-4c79-ae6d-cdbc6ad6f0f8 |
| has_replicas | False |
| replication_type | None |
| created_at | 2022-02-16T09:04:25.000000 |
| share_proto | NFS |
| mount_snapshot_support | False |
| project_id | 210b13df4d2e4ca1aaaad8712ebd5290 |
| metadata | {} |
+---------------------------------------+--------------------------------------+

使用manila命令查询所创建的共享目录列表信息,命令代码如下所示:

1
2
3
4
5
6
7
8
9
[root@controller ~]# manila list
+--------------+-------+----+------+---------+---------+--------------+----------------+-------------+
| ID | Name |Size|Share | Status |Is Public| Share Type | Host |Availability |
Proto Name Zone
+--------------+-------+----+------+---------+---------+--------------+----------------+-------------+
|6f6bd436-1a64 |share01| 2 | NFS |available| False |default_share |compute@lvm#lvm |nova |
-40bc-acf7 _type -single-pool
-2db3cd0ff892
+--------------+-------+----+------+---------+---------+--------------+----------------+-------------+

(3)挂载共享目录

使用manila命令开放share01目录对OpenStack管理网段使用权限,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@controller ~]# manila access-allow share01 ip 172.30.17.0/24 --access-level rw
+--------------+--------------------------------------+
| Property | Value |
+--------------+--------------------------------------+
| access_key | None |
| share_id | 6f6bd436-1a64-40bc-acf7-2db3cd0ff892 |
| created_at | 2022-02-16T09:14:52.000000 |
| updated_at | None |
| access_type | ip |
| access_to | 172.30.17.0/24 |
| access_level | rw |
| state | queued_to_apply |
| id | 0dceae9c-c1a9-4df9-bea9-2ba809374b84 |
| metadata | {} |
+--------------+--------------------------------------+

查看share01目录共享目录权限及开放网段,命令如下所示:

1
2
3
4
5
6
7
8
[root@controller ~]# manila access-list share01
+--------------+-----------+--------------+------------+------+----------+----------------+----------+
| id |access_type| access_to |access_level|state |access_key| created_at |updated_at|
+------------- +-----------+--------------+------------+------+----------+----------------+----------+
| 0dceae9c-c1a9| ip |172.30.17.0/24| rw |active| None | 2022-02-16T09: |None |
-4df9-bea9 14:52.000000
-2ba809374b84
+--------------+-----------+--------------+------------+------+----------+----------------+----------+

查看share01共享文件目录的访问路径,命令代码如下所示:

1
2
[root@controller ~]#  manila show share01 | grep path | cut -d'|' -f3
path = 172.30.17.5:/var/lib/manila/mnt/share-c3f5a9fc-a8e7-40a6-a43b-56cfd1738724

在OpenStack控制节点将share01共享目录挂载至/mnt目录下,命令如下所示:

1
[root@controller ~]# mount -t nfs 172.30.17.5:/var/lib/manila/mnt/share-c3f5a9fc-a8e7-40a6-a43b-56cfd1738724 /mnt/

在控制节点查询挂载信息,可以看到share01共享路径挂载至/mnt目录下。命令如下所示:

1
2
3
4
5
6
7
8
9
[root@controller ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 5.8G 0 5.8G 0% /dev
tmpfs tmpfs 5.8G 68K 5.8G 1% /dev/shm
tmpfs tmpfs 5.8G 592M 5.3G 10% /run
tmpfs tmpfs 5.8G 0 5.8G 0% /sys/fs/cgroup
/dev/vda1 xfs 50G 8.1G 42G 17% /
tmpfs tmpfs 1.2G 0 1.2G 0% /run/user/0
172.30.17.5:/var/lib/manila/mnt/share-c3f5a9fc-a8e7-40a6-a43b-56cfd1738724 nfs4 2.0G 6.0M 1.8G 1% /mnt

至此,Manila共享文件服务安装完成。在生产环境中,Manila共享文件服务所能提供的存储空间足够满足用户使用,这里因是实验环境,只创建一个2G共享空间用于演示。Manila给用户和服务提供一个共享文件存储空间,与Cinder和Swift服务并不一样。

案例二:OpenStack计费服务

案例准备

规划节点

使用云主机搭建的OpenStack平台。节点规划见表2。

表2 节点规划

IP 主机名 节点
172.30.17.14 controller 控制节点
172.30.17.5 compute 计算节点

基础准备

使用云主机搭建的OpenStack平台作为实验节点,该案例只讲述OpenStack平台中cloudkitty组件的安装和使用方法。

案例实施

cloudkitty服务介绍

当前版本cloudkitty可以完成虚拟机实例(compute),云硬盘(volume),镜像(image),网络进出流量(network.bw.in,network.bw.out),浮动IP(network.floating)的计费。得益于Cloudkitty的巧妙而优秀的设计,软件插件化思想更是体现的淋漓尽致,使得添加新的计费源异常容易,版本升级十分方便。同样也能方便将cloudkitty用于cloudstack,VMWare等环境中。

Cloudkitty主要依赖于遥测相关的项目,包括ceilometer和gnocchi,甚至是将要使用panko;计费策略和hashmap计费模型是其核心;模块插件化是其设计灵魂;


Cloudkitty服务安装

(1)编写环境变量文件

使用命令编辑/etc/openstack/openrc.sh配置文件,添加Cloudkitty环境变量参数。

1
2
3
4
5
6
##--------------------Cloudkitty Config----------------##
##Password for Mysql Cloudkitty user. exmaple:000000
CLOUDKITTY_DBPASS=000000

##Password for Keystore Cloudkitty user. exmaple:000000
CLOUDKITTY_PASS=000000

(2)控制节点安装服务

使用CRT等远程连接工具,连接至172.30.17.14控制节点,执行iaas-install- cloudkitty.sh安装脚本。

1
[root@controller ~]# iaas-install-cloudkitty.sh

使用Cloudkitty服务

(1)类型规格费用

创建云主机服务instance_test,通过命令创建service服务。命令代码如下所示:

1
2
3
4
5
6
7
[root@controller ~]# openstack rating hashmap service create instance_test
+---------------+--------------------------------------+
| Name | Service ID |
+---------------+--------------------------------------+
| instance_test | cf8029bf-dc35-4e40-b8fd-5af4a4d25a30 |
+---------------+--------------------------------------+
[root@controller ~]#

并对其创建名为flavor_name的fields,使用命令代码如下所示:

1
2
3
4
5
6
[root@controller ~]# openstack rating hashmap field create cf8029bf-dc35-4e40-b8fd-5af4a4d25a30 flavor_name
+-------------+--------------------------------------+--------------------------------------+
| Name | Field ID | Service ID |
+-------------+--------------------------------------+--------------------------------------+
| flavor_name | b2f0d485-df20-4f2e-bd44-d3696971cb8f | cf8029bf-dc35-4e40-b8fd-5af4a4d25a30 |
+-------------+--------------------------------------+--------------------------------------+

并设置规格为m1.small的云主机单价为1元,使用命令如下所示:

1
2
3
4
5
6
7
[root@controller ~]# openstack rating hashmap mapping create  --field-id b2f0d485-df20-4f2e-bd44-d3696971cb8f  -t flat --value  m1.small 1
+--------------------+--------+----------+----+--------------------+----------+--------+----------+
| Mapping ID |Value |Cost |Type| Field ID |Service ID|Group ID|Project ID|
+--------------------+--------+----------+----+--------------------+----------+--------+----------+
| c1b7d4db-c1d2-4488 |m1.small|1.00000000|flat| b2f0d485-df20-4f2e | None | None | None |
-ac46-1a8eb70d76e4 -bd44-d3696971cb8f
+--------------------+--------+----------+----+--------------------+----------+--------+----------+

(2)镜像服务费用

创建镜像收费服务image_size_test,命令代码如下所示:

1
2
3
4
5
6
[root@controller ~]# openstack rating hashmap service create image_size_test
+-----------------+--------------------------------------+
| Name | Service ID |
+-----------------+--------------------------------------+
| image_size_test | 80a098cf-d793-47cf-b63e-df6cbd56e88d |
+-----------------+--------------------------------------+

并为该服务单价设置为0.8元,命令代码如下所示:

1
2
3
4
5
6
7
[root@controller ~]# openstack rating hashmap mapping create -s  80a098cf-d793-47cf-b63e-df6cbd56e88d   -t flat 0.8 
+--------------------+-------+------------+------+----------+--------------------+--------+----------+
| Mapping ID | Value | Cost | Type | Field ID | Service ID |Group ID|Project ID|
+--------------------+-------+------------+------+----------+--------------------+--------+----------+
| 64952e70-6e37-4c8a | None | 0.80000000 | flat | None | 80a098cf-d793-47cf | None | None |
-9d3a-b4c70de1fb87 -b63e-df6cbd56e88d
+--------------------+-------+------------+------+----------+--------------------+--------+----------+

(3)创建优惠服务

创建名为dis_tests的服务,命令代码如下所示:

1
2
3
4
5
6
[root@controller ~]# openstack rating hashmap service create dis_tests
+-----------+--------------------------------------+
| Name | Service ID |
+-----------+--------------------------------------+
| dis_tests | b6190077-80ff-4e1f-9938-ddaff11c3506 |
+-----------+--------------------------------------+

为dis_tests服务设置单价为0.8元,命令代码如下所示:

1
2
3
4
5
6
7
[root@controller ~]# openstack rating hashmap mapping create -s  b6190077-80ff-4e1f-9938-ddaff11c3506  -t flat 0.8
+--------------------+-------+------------+----+--------+--------------------+----------+------------+
| Mapping ID | Value | Cost |Type|Field ID| Service ID | Group ID | Project ID |
+--------------------+-------+------------+----+--------+--------------------+----------+------------+
| f5a51b26-82f8-45a4 | None | 0.80000000 |flat| None | b6190077-80ff-4e1f | None | None |
-8784-f7f131c2e4cd -9938-ddaff11c3506
+--------------------+-------+------------+----+--------+--------------------+----------+------------+

并设置dis_tests服务使用量超过10000时提供8折优惠,命令代码如下所示:

1
2
3
4
5
6
7
8
[root@controller ~]# openstack rating hashmap threshold create -s b6190077-80ff-4e1f-9938-ddaff11c3506 -t rate 10000 0.8

+-------------------+--------------+----------+----+--------+--------------------+--------+----------+
| Threshold ID | Level |Cost |Type|Field ID| Service ID |Group ID|Project ID|
+-------------------+--------------+----------+----+--------+--------------------+--------+----------+
|11be2ecb-b7fa-42cd |10000.00000000|0.80000000|rate| None | b6190077-80ff-4e1f | None | None |
-a8d1-a0b679181912 -9938-ddaff11c3506
+-------------------+--------------+----------+----+--------+--------------------+--------+----------+

Cloudkitty计费服务安装完成,在上述实验中,只对应熟悉Cloudkitty计费服务所使用的环境操作。

案例三:OpenStack秘钥管理器服务

案例准备

规划节点

使用云主机搭建的OpenStack平台。节点规划见表3。

表3 节点规划

IP 主机名 节点
172.30.17.14 controller 控制节点
172.30.17.5 compute 计算节点

基础准备

使用云主机搭建的OpenStack平台作为实验节点,本案例只讲述Barbican服务的安装与使用方法。

案例实施

Barbican服务介绍

Key Manager 服务 (barbican) 提供机密数据的安全存储、配置和管理。这包括密钥材料,例如对称密钥、非对称密钥、证书和原始二进制数据。

Barbican 是 OpenStack 的key管理组件,定位在提供 REST API 来安全存储、提供和管理“秘密”。

Barbican最常用的功能是作为OpenStack环境中的密钥生成器,为各种加解密操作提供支持;同时,Barbican还可以保存OpenStack环境中的用户机密数据。


Barbican服务安装

(1)编写环境变量文件

使用命令编辑/etc/openstack/openrc.sh配置文件,添加Barbican环境变量参数。

1
2
3
4
5
6
##--------------------Barbican Config----------------##
##Password for Mysql Barbican user. exmaple:000000
BARBICAN_DBPASS=000000

##Password for Keystore Barbican user. exmaple:000000
BARBICAN_PASS=000000

(2)控制节点安装服务

使用CRT等远程连接工具,连接至172.30.17.14控制节点,执行iaas-install-barbican.sh安装脚本

1
[root@controller ~]# iaas-install-barbican.sh

使用Barbican服务

使用openstack命令创建一个名为secret01的secret,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@controller ~]# openstack secret store --name secret01 --payload secretkey
+---------------+------------------------------------------------------------------------+
| Field | Value |
+---------------+------------------------------------------------------------------------+
| Secret href | http://controller:9311/v1/secrets/08e96ae0-b727-4583-afd9-8ab9de507d4a |
| Name | secret01 |
| Created | None |
| Status | None |
| Content types | None |
| Algorithm | aes |
| Bit length | 256 |
| Secret type | opaque |
| Mode | cbc |
| Expiration | None |
+---------------+------------------------------------------------------------------------+

查询secret列表信息,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
[root@controller ~]# openstack secret list
+------------------+--------+---------+------+--------------+---------+------+-------+----+----------+
| Secret href | Name | Created |Status| Content types|Algorithm|Bit |Secret |Mode|Expiration|
length type
+------------------+--------+---------+------+--------------+---------+------+-------+----+----------+
|http://controller:|secret01|2022-02- |ACTIVE|{u'default': | aes | 256 | opaque|cbc | None |
9311/v1/secrets/0 17T09:03 u'text/plain'}
8e96ae0-b727-4583 :20+00:00
-afd9-8ab9de507d4a
+------------------+--------+---------+------+--------------+---------+------+-------+----+----------+

使用命令获取secret01密钥的元数据,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@controller ~]# openstack secret get http://controller:9311/v1/secrets/08e96ae0-b727-4583-afd9-8ab9de507d4a
+---------------+------------------------------------------------------------------------+
| Field | Value |
+---------------+------------------------------------------------------------------------+
| Secret href | http://controller:9311/v1/secrets/08e96ae0-b727-4583-afd9-8ab9de507d4a |
| Name | secret01 |
| Created | 2022-02-17T09:03:20+00:00 |
| Status | ACTIVE |
| Content types | {u'default': u'text/plain'} |
| Algorithm | aes |
| Bit length | 256 |
| Secret type | opaque |
| Mode | cbc |
| Expiration | None |
+---------------+------------------------------------------------------------------------+

通过命令获取secret01密钥的数据,命令代码如下所示:

1
2
3
4
5
6
[root@controller ~]# openstack secret get http://controller:9311/v1/secrets/08e96ae0-b727-4583-afd9-8ab9de507d4a --payload
+---------+-----------+
| Field | Value |
+---------+-----------+
| Payload | secretkey |
+---------+-----------+

使用openstack命令生成并存储密钥,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@controller ~]# openstack secret order create --name secret02 --algorithm aes --bit-length 256 --mode cbc --payload-content-type application/octet-stream key
+----------------+-----------------------------------------------------------------------+
| Field | Value |
+----------------+-----------------------------------------------------------------------+
| Order href | http://controller:9311/v1/orders/421a8256-79d2-4e53-80ee-c493d4a81317 |
| Type | Key |
| Container href | N/A |
| Secret href | None |
| Created | None |
| Status | None |
| Error code | None |
| Error message | None |
+----------------+-----------------------------------------------------------------------+

通过命令显示生成的密钥列表,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
[root@controller ~]# openstack secret order list
+-------------------------+----+---------+------------------------+----------+------+------+-------+
| Order href |Type|Container| Secret href | Created |Status|Error |Error |
href code message
+-------------------------+----+---------+------------------------+----------+------+------+-------+
|http://controller:9311/v1| Key| N/A |http://controller:9311/v|2022-02-09|ACTIVE| None | None |
/orders/798791cb-297c-4a 1/secrets/f77fcc45-750e T08:36:30+
3d-a8c7-30f6a4dfdd3a -4ed2-903d-9af076c26586 00:00
|http://controller:9311/v1| Key| N/A |http://controller:9311/v|2022-02-17|ACTIVE| None | None |
/orders/5675a750-bf8f-46 1/secrets/81b7a19b-2975 T09:13:29+
68-862c-cb8eedcbb42a -4ff0-99a5-ccd5581d1cfa 00:00
+-------------------------+----+---------+------------------------+----------+------+------+-------+

使用命令显示生成的密钥,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@controller ~]# openstack secret order get http://controller:9311/v1/orders/5675a750-bf8f-4668-862c-cb8eedcbb42a
+----------------+------------------------------------------------------------------------+
| Field | Value |
+----------------+------------------------------------------------------------------------+
| Order href | http://controller:9311/v1/orders/5675a750-bf8f-4668-862c-cb8eedcbb42a |
| Type | Key |
| Container href | N/A |
| Secret href | http://controller:9311/v1/secrets/81b7a19b-2975-4ff0-99a5-ccd5581d1cfa |
| Created | 2022-02-17T09:30:14+00:00 |
| Status | ACTIVE |
| Error code | None |
| Error message | None |
+----------------+------------------------------------------------------------------------+

显示生成的密钥的元数据,命令代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@controller ~]# openstack secret get http://controller:9311/v1/secrets/81b7a19b-2975-4ff0-99a5-ccd5581d1cfa 
+---------------+------------------------------------------------------------------------+
| Field | Value |
+---------------+------------------------------------------------------------------------+
| Secret href | http://controller:9311/v1/secrets/81b7a19b-2975-4ff0-99a5-ccd5581d1cfa |
| Name | secret01 |
| Created | 2022-02-17T09:30:14+00:00 |
| Status | ACTIVE |
| Content types | {u'default': u'application/octet-stream'} |
| Algorithm | aes |
| Bit length | 256 |
| Secret type | symmetric |
| Mode | cbc |
| Expiration | None |
+---------------+------------------------------------------------------------------------+

至此,barbican密钥管理器服务安装完成,上述实验中,只对应熟悉barbican密钥服务所使用的环境操作。

案例四:OpenStack VPNaaS服务

案例准备

规划节点

使用云主机搭建的OpenStack平台。节点规划见表4。

表4节点规划

IP 主机名 节点
172.30.17.14 controller 控制节点
172.30.17.5 compute 计算节点

基础准备

使用云主机搭建的OpenStack平台作为实验节点,本案例只讲述VPNaaS服务的安装和使用方法。

案例实施

VPNaaS服务介绍

在Openstack的Havana版本中,Neutron增加的一个功能就是VPNaas,将VPN功能引入到了Neutron中,虽然在Havana版中只支持IPSec协议的VPN,功能还比较弱,但这个关键特性已经有了,后续会不断加强该特性。

VPN可以通过在L2或L3层建立一条逻辑链路,让广域网上多个内网能够相互访问。VPN的实现方式很多,有基于租用专用物理线路实现的,也有基于以太网的虚连接的实现方式。


VPNaaS服务安装

(1)控制节点安装服务

使用CRT等远程连接工具,连接至172.30.17.14控制节点,执行iaas-install-fwaas-and-vpnaas.sh安装脚本 。

1
[root@controller ~]# iaas-install-fwaas-and-vpnaas.sh

VPNaaS服务使用

(1)VPNaaS服务网络拓扑

我们可以在单个集群中的不同租户(admin和demo租户)内,分别创建内部网络net1和net2,并分别给网络net1和net2添加到路由route1和route2中,通过一个共享的外网网络ext-net来完成VPNaas的隧道构建,使处于不同租户网络的实例网络可以互通。

验证网络拓扑如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(100.0.1.0/24 – admin租户)
|
| 100.0.1.1
[route1]
| 100.0.0.11
|
[ext-net]
|-------------------VPNaas服务
[ext-net]
|
| 100.0.0.22
[ route2]
| 10.2.0.1
|
(100.0.2.0/24 demo租户)

(2)创建路由网络

在控制节点/root/目录下编写路由网络创建脚本route-net-build.sh,脚本内容如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#/bin/bash

#admin租户创建路由网络
source /etc/keystone/admin-openrc.sh
#创建vxlan外网网络
openstack network create --external --share ext-net
openstack subnet create --subnet-range 100.0.0.0/24 --gateway 100.0.0.1 --network ext-net ext-subnet
#创建vxlan内网网络net1
openstack network create net1
openstack subnet create --subnet-range 100.0.1.0/24 --gateway 100.0.1.1 --network net1 net1
#创建路由route1,网关100.0.0.11,添加内网net1
openstack router create route1
openstack router set --external-gateway ext-net --fixed-ip subnet=ext-subnet,ip-address=100.0.0.11 route1
openstack router add subnet route1 net1

#demo租户创建路由网络
source /etc/keystone/demo-openrc.sh
#创建vxlan内网网络net2
openstack network create net2
openstack subnet create --subnet-range 100.0.2.0/24 --gateway 100.0.2.1 --network net2 net2
#创建路由route2,网关100.0.0.22,添加内网net2
openstack router create route2
source /etc/keystone/admin-openrc.sh
openstack router add subnet route2 net2
openstack router set --external-gateway ext-net --fixed-ip subnet=ext-subnet,ip-address=100.0.0.22 route2

赋予脚本route-net-build.sh执行权限。命令如下。

1
[root@controller ~]# chmod +x route-net-build.sh

执行脚本route-net-build.sh,完成路由网络的创建。命令如下。

1
[root@controller ~]# ./route-net-build.sh

(3)构建VPN连接

在admin租户创建vpn连接,–peer-address为demo租户的路由route2网关地址100.0.0.22。命令如下。

1
2
3
4
5
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# openstack vpn ike policy create ikepolicy1
[root@controller ~]# openstack vpn ipsec policy create ipsecpolicy1
[root@controller ~]# openstack vpn service create --router route1 --subnet net1 vpn1
[root@controller ~]# openstack vpn ipsec site connection create vpnconnectiona --vpnservice vpn1 --ikepolicy ikepolicy1 --ipsecpolicy ipsecpolicy1 --peer-address 100.0.0.22 --peer-id 100.0.0.22 --peer-cidr 100.0.2.0/24 --psk secret

在demo租户创建vpn连接,–peer-address为admin租户的路由route1网关地址100.0.0.11。命令如下。

1
2
3
4
5
[root@controller ~]# source /etc/keystone/demo-openrc.sh
[root@controller ~]# openstack vpn ike policy create ikepolicy2
[root@controller ~]# openstack vpn ipsec policy create ipsecpolicy2
[root@controller ~]# openstack vpn service create --router route2 --subnet net2 vpn2
[root@controller ~]# openstack vpn ipsec site connection create vpnconnectionb --vpnservice vpn2 --ikepolicy ikepolicy2 --ipsecpolicy ipsecpolicy2 --peer-address 100.0.0.11 --peer-id 100.0.0.11 --peer-cidr 100.0.1.0/24 --psk secret

(4)验证vpn连接

查看vpn连接状态(如果状态为PENDING_CREATE,请稍微等待几分钟)。命令如下。

1
2
3
4
5
6
7
8
[root@controller ~]# source /etc/keystone/admin-openrc.sh 
[root@controller ~]# openstack vpn ipsec site connection list
+------------------------------------+--------------+------------+------------------------+--------+
| ID |Name |Peer Address|Authentication Algorithm| Status |
+------------------------------------+--------------+------------+------------------------+--------+
|20db9a99-f7dd-46bb-81fa-f6ce1fdcb996|vpnconnectiona| 100.0.0.22 | psk | ACTIVE |
|c74e2cb8-5f0a-4f13-bf60-95915641baed|vpnconnectionb| 100.0.0.11 | psk | ACTIVE |
+------------------------------------+--------------+------------+------------------------+--------+