OpenStack部署
- 1. 流程介绍
- 1.1 模块关联
- 1.2 虚拟机创建流程
- 2. 部署
- 2.1 服务器规划
- 2.2 环境整备
- 1. 配置控制节点域名/计算节点解析
- 2. 关闭控制节点/计算节点selinux和防火墙
- 3. 安装与配置控制节点/计算节点的时间同步服务
- 4. 在控制节点/计算节点执行命令验证时间同步服务
- 5. 在控制节点/计算节点添加yum源
- 6. 在控制节点安装MySQL数据库服务并配置
- 7. 在控制节点安装RabbitMQ消息队列并配置
- 3. KeyStone
- 3.1 创建KeyStone数据库并授权
- 3.2 yum安装KeyStone和Memcached
- 3.3 启动Memcached并设置开机自启
- 3.4 生成一个admin_token
- 3.5 配置keystone.conf文件
- 3.6 初始化身份认证服务的数据库
- 3.7 初始化Fernet keys
- 3.8 配置Apache HTTP服务器
- 3.9 启动Apache HTTP并设置开机自启
- 3.10 设置OpenStack环境变量
- 3.11 创建服务实体和身份认证服务
- 3.12 创建认证服务的 API 端点
- 3.13 创建default域
- 3.14 创建admin项目
- 3.15 创建admin用户并设置密码
- 3.16 创建admin角色
- 3.17 添加admin角色到admin项目和用户上
- 3.18 创建service项目
- 3.19 创建demo项目
- 3.20 创建demo用户并设置密码
- 3.21 创建user角色
- 3.22 添加user角色到demo项目和用户
- 3.23 验证操作
- 3.24 创建 OpenStack 客户端环境脚本
- 3.25 **常用命令**
OpenStack它是一个开源云计算管理平台项目,由几个主要组件组合而成。OpenStack支持几乎所有类型的云环境,项目目标是提供简单、大规模扩展、丰富、统一的云计算管理平台。OpenStack基础设施即服务通过各种互补服务提供(IaaS)每项服务提供的解决方案API集成。常见组件:
- Dashboard(web又名控制台Horizon)
- Keystone(权限管理为各组件提供认证和授权功能)
- Nova(管理虚拟机)
- Nova-network(Neutron,管理网络流量和ip)
- Glance(镜像管理,提供安装镜像)
- Cinder(磁盘管理,云盘)
- Swift(网盘,对象存储)
1. 流程介绍
1.1 模块关联
1.2 虚拟机创建流程
虚拟机创建流程:
第一阶段
:
-
- 通过登录界面或命令行通过RESTful API向keystone获取认证信息。
-
- keystone通过用户要求认证信息并生成auth-token返回相应的认证请求。
-
- 界面或命令通过RESTful API向nova-api发送一个boot instance请求(携带auth-token)。
-
- nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
-
- keystone验证token是否有效,如果有效,返回有效的认证和相应的角色(注:有些操作需要角色权限)。
第二阶段
:
-
- 通过认证后nova-api与数据库通信。
-
- 新建虚拟机的初始数据库记录。
-
- nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
-
- nova-scheduler进程侦听消息队列获取nova-api的请求。
-
- nova-scheduler通过查询nova在数据库中计算资源,并通过调度算法计算满足虚拟机创建需要的主机。
-
- 有符合虚拟机创建的主机,nova-scheduler在数据库中更新虚拟机对应的物理主机信息。
-
- nova-scheduler通过rpc.cast向nova-compute发送创建虚拟机请求的相应信息。
-
- nova-compute创建虚拟机请求的消息将从相应的消息队列中获取。
-
- nova-compute通过rpc.call向nova-conductor请求获取虚拟机信息(Flavor)。
-
- nova-conductor从消息队列中获得nova-compute请求消息。
-
- nova-conductor查询虚拟机对应的信息。
-
- nova-conductor虚拟机对应的信息从数据库中获取。
-
- nova-conductor通过消息将虚拟机信息发送到消息队列。
-
- nova-compute从相应的信息队列中获取虚拟机信息。
第三阶段
:
-
- nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需的镜像。
-
- glance-api向keystone认证token是否有效,并返回验证结果。
-
- token验证通过,nova-compute获取虚拟机镜像信息(URL)。
-
- nova-compute通过keystone的RESTfull API获得认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需的网络信息。
-
- neutron-server向keystone认证token是否有效,并返回验证结果。
-
- token验证通过,nova-compute获取虚拟机网络信息。
-
- nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需的持久存储信息。
-
- cinder-api向keystone认证token是否有效,并返回验证结果。
-
- token验证通过,nova-compute获取虚拟机持久存储信息。
-
- nova-compute根据instance创建虚拟机的信息调用配置的虚拟驱动。
https://www.cnblogs.com/Studywith/p/17069263.html
2. 部署
本教程使用的是Openstack Queens版本,其他版本也大致与之相同
Openstack版本
OpenStack版本 | 发布时间 | 及其组件 |
---|---|---|
Austin | 2010.10 | Nova、Glance、Keystone、Horizon、Swift、Quantum |
Bexar | 2011.02 | Nova、Glance、Keystone、Horizon、Swift、Quantum |
Cactus | 2011.04 | Nova、Glance、Keystone、Horizon、Swift、Quantum |
Diablo | 2011.09 | Nova、Glance、Keystone、Horizon、Swift、Quantum、Cinder |
Essex | 2012.04 | Nova、Glance、Keystone、Horizon、Swift、Quantum、Cinder、OpenStack Dashboard、Ceilometer |
Folsom | 2012.09 | Nova、Glance、Keystone、Horizon、Swift、Quantum、Cinder、OpenStack Dashboard、Ceilometer |
Grizzly | 2013.04 | Nova、Glance、Keystone、Horizon、Swift、Quantum、Cinder、OpenStack Dashboard、Heat、Ceilometer |
Havana | 2013.10 | Nova、Glance、Keystone、Horizon、Swift、Quantum、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna |
Icehouse | 2014.04 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila |
Juno | 2014.10 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic |
Kilo | 2015.04 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican |
Liberty | 2015.10 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano |
Mitaka | 2016.04 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar |
Newton | 2016.10 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight |
Ocata | 2017.02 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer |
Pike | 2017.08 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari |
Queens | 2018.02 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari、Cyborg、Blazar |
Rocky | 2018.08 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari、Cyborg、Blazar、Watcher |
Stein | 2019.04 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari、Cyborg、Blazar、Watcher、Airship |
Train | 2019.10 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari、Cyborg、Blazar、Watcher、Airship、Octavia、Karbor |
Ussuri | 2020.05 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari、Cyborg、Blazar、Watcher、Airship、Octavia、Karbor、Dragonflow、Vitrage |
Victoria | 2020.10 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari、Cyborg、Blazar、Watcher、Airship、Octavia、Karbor、Dragonflow、Vitrage、StarlingX |
Wallaby | 2021.04 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari、Cyborg、Blazar、Watcher、Airship、Octavia、Karbor、Dragonflow、Vitrage、StarlingX、Xena |
Yocto | 2021.10 | Nova、Glance、Keystone、Horizon、Swift、Neutron、Cinder、OpenStack Dashboard、Heat、Ceilometer、Trove、Savanna、Manila、Ironic、Designate、Barbican、Magnum、Murano、Zaqar、Congress、Searchlight、Freezer、Masakari、Cyborg、Blazar、Watcher、Airship、Octavia、Karbor、Dragonflow、Vitrage、StarlingX、Xena、Zun |
2.1 服务器规划
D | 主机名 | 角色 | 系统信息 | IP | PORT | 组件配置 |
---|---|---|---|---|---|---|
1 | controller | 控制节点 | centos7 | 192.168.71.251 | 8022->22 | MariaDB、身份认证、镜像服务、网络服务、SQL数据库、消息队列 |
2 | compute01 | 计算节点 | centos7 | 192.168.71.252 | 8122->22 | - |
2.2 环境整备
1. 配置控制节点域名/计算节点解析
[root@node-251 tmp]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.71.251 node-251
192.168.71.252 node-252
2. 关闭控制节点/计算节点selinux和防火墙
[root@openstack ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
SELINUXTYPE=targeted
[root@openstack ~]# systemctl stop firewalld.service
[root@openstack ~]# systemctl disbale firewalld.service
3. 安装与配置控制节点/计算节点的时间同步服务
Chrony与NTP对比
[root@node-251 tmp]# yum install -y chrony
...
[root@node-251 tmp]# systemctl enable chronyd.service
[root@node-251 tmp]# systemctl start chronyd.service
[root@node-251 tmp]# timedatectl set-timezone Asia/Shanghai
[root@node-251 tmp]# date
Mon Jun 5 08:49:57 CST 2023
4. 在控制节点/计算节点执行命令验证时间同步服务
[root@node-251 tmp]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp8.flashdance.cx 2 6 37 45 +10ms[ +11ms] +/- 103ms
^- time.neu.edu.cn 1 6 17 110 -1169us[+1587us] +/- 1932us
^* stratum2-1.ntp.mow01.ru.> 2 6 253 37 -2841us[-2719us] +/- 57ms
^+ time.cloudflare.com 3 6 37 45 -3414us[-3167us] +/- 93ms
[root@node-251 tmp]# date
Mon Jun 5 08:51:48 CST 2023
5. 在控制节点/计算节点添加yum源
[root@node-251 openstack]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
...
2023-06-05 08:54:15 (358 KB/s) - ‘/etc/yum.repos.d/CentOS-Base.repo’ saved [2523/2523]
[root@node-251 openstack]# yum install -y centos-release-openstack-queens.noarch
...
Complete!
6. 在控制节点安装MySQL数据库服务并配置
[root@node-251 openstack]# yum install -y mariadb mariadb-server MySQL-python
...
也可参考 MySQL
这里密码笔者设置为Admin@123
为了保证数据库服务的安全性,运行mysql_secure_installation
脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码,可以使用openssl rand -hex 10
生成一个10位的密码(笔者这里跳过了)
7. 在控制节点安装RabbitMQ消息队列并配置
yum install -y rabbitmq-server
[root@node-251 ~]# systemctl enable rabbitmq-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
[root@node-251 ~]# systemctl start rabbitmq-server.service
[root@node-251 ~]# rabbitmqctl add_user openstack 1735e32955b2ef18362e
Creating user "openstack"
[root@node-251 ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"
[root@node-251 ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@node-251... started 6 plugins.
[root@node-251 ~]# systemctl restart rabbitmq-server.service
访问:http://192.168.71.251:15672
,账号/密码:guest/guest
3. KeyStone
keystone的主要功能
- 身份认证(Authentication):令牌的发放和校验
- 用户授权(Authorization):授予用户在一个服务中所拥有权限
- 用户管理(Account):管理用户账户
- 服务目录(Service Catalog):提供可用服务的API端点
keystone相关概念
- user:指使用openstack service的用户
- Project(Tenant):可以理解为一个人或者服务所拥有的资源集合
- Role:用户划分权限。通过给user指定role,使user获得role对应操作权限
- Authentication:确定用户身份的过程
- Token:是一个字符串表示,作为访问资源的令牌。Token包含了在指定范围和有效时间内,可以被访问的资源Credentials:用于确认用户身份的凭证,用户的用户名和密码,或者是用户名和API密钥,或者身份管理服务提供的认证令牌
- Service:openstack service,即openstack中运行的组件服务,如nova、swif、glance、neutron、cinder等
- Endpoint:一个可以通过网络来访问和定位某个openstack service的地址,通常是一个URL 小结下:因为组件点到点的交互是通过API来完成的,API是由Apache所承载的,Apache提供了一个URL,所以说API和API的对接,也可以认为是URL与URL的对接
认证流程
3.1 创建KeyStone数据库并授权
[root@node-251 ~]# openssl rand -hex 10
caf482c375233aa2e42b
[root@openstack ~]# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE keystone;
use mysql;
CREATE USER keystone@'%' IDENTIFIED BY 'caf482c375233aa2e42b';
Grant all privileges on keystone.* to 'keystone'@'%';
flush privileges;
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| keystone | % |
| root | % |
| zsr2 | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
3.2 yum安装KeyStone和Memcached
[root@openstack ~]# yum install -y openstack-keystone python-openstackclient httpd mod_wsgi memcached python-memcached
Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。
Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:
- 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
- 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相>- 应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
- 各服务器间彼此无视:不在服务器间进行数据同步;
- O(1)的执行效率;
- 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长。
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰
如果出现包兼容问题,例如
Error: Package: python2-qpid-proton-0.22.0-1.el7.x86_64 (centos-openstack-queens)
Requires: qpid-proton-c(x86-64) = 0.22.0-1.el7
Available: qpid-proton-c-0.14.0-2.el7.x86_64 (extras)
qpid-proton-c(x86-64) = 0.14.0-2.el7
Available: qpid-proton-c-0.17.0-4.el7.x86_64 (centos-openstack-queens)
qpid-proton-c(x86-64) = 0.17.0-4.el7
Available: qpid-proton-c-0.22.0-1.el7.x86_64 (centos-openstack-queens)
qpid-proton-c(x86-64) = 0.22.0-1.el7
Installing: qpid-proton-c-0.35.0-1.el7.x86_64 (epel)
qpid-proton-c(x86-64) = 0.35.0-1.el7
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
包冲突导致的兼容错误,单独选定需要的版本进行安装即可
yum install -y python2-qpid-proton-0.22.0-1.el7.x86_64
版本兼容,安装后重新安装报错上一步代码即可
3.3 启动Memcached并设置开机自启
systemctl enable memcached.service
systemctl start memcached.service
3.4 生成一个admin_token
[root@node-251 ~]# openssl rand -hex 10
40f04375888cf2554840
3.5 配置keystone.conf文件
[root@node-251 ~]# vim /etc/keystone/keystone.conf
[DEFAULT] #定义初始管理令牌的值
admin_token = 40f04375888cf2554840
[database] #配置数据库访问
connection = mysql+pymysql://keystone:caf482c375233aa2e42b@127.0.0.1/keystone
[revoke] #配置回滚驱动
driver = sql
[token] #配置Fernet UUID令牌的提供者
provider = fernet
3.6 初始化身份认证服务的数据库
[root@node-251 ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
3.7 初始化Fernet keys
[root@node-251 ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
3.8 配置Apache HTTP服务器
openstack的各个组件,包括API都是用python写的,但访问的是apache,apache会把请求转发给python去处理,这些包只安装在controler节点
[root@openstack ~]# vim /etc/httpd/conf/httpd.conf
ServerName node-251
[root@openstack ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
3.9 启动Apache HTTP并设置开机自启
systemctl enable httpd.service
systemctl start httpd.service
3.10 设置OpenStack环境变量
export OS_TOKEN=40f04375888cf2554840
export OS_URL=http://192.168.71.251:35357/v3
export OS_IDENTITY_API_VERSION=3
域名解析里面加上openstack.if010.com
[root@node-251 ~]# cat /etc/hosts
...
192.168.71.251 openstack.if010.com
3.11 创建服务实体和身份认证服务
[root@node-251 ~]# openstack service create --name keystone --description "OpenStack Identity" identity
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | 922a955e70904b409e0cebff36f5f764 |
| name | keystone |
| type | identity |
+-------------+----------------------------------+
3.12 创建认证服务的 API 端点
[root@node-251 ~]# openstack endpoint create --region RegionOne identity public http://openstack.if010.com:5000/v3
+--------------+------------------------------------+
| Field | Value |
+--------------+------------------------------------+
| enabled | True |
| id | 5909adff4f7b462686c57c0080825e8e |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 922a955e70904b409e0cebff36f5f764 |
| service_name | keystone |
| service_type | identity |
| url | http://openstack.if010.com:5000/v3 |
+--------------+------------------------------------+
[root@node-251 ~]# openstack endpoint create --region RegionOne identity internal http://openstack.if010.com:5000/v3
+--------------+------------------------------------+
| Field | Value |
+--------------+------------------------------------+
| enabled | True |
| id | 1fdfdd82539c4dbf982c5916b67850ed |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 922a955e70904b409e0cebff36f5f764 |
| service_name | keystone |
| service_type | identity |
| url | http://openstack.if010.com:5000/v3 |
+--------------+------------------------------------+
[root@node-251 ~]# openstack endpoint create --region RegionOne identity admin http://openstack.if010.com:35357/v3
+--------------+-------------------------------------+
| Field | Value |
+--------------+-------------------------------------+
| enabled | True |
| id | 8c60ca51800e444884e031346e2db11b |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 922a955e70904b409e0cebff36f5f764 |
| service_name | keystone |
| service_type | identity |
| url | http://openstack.if010.com:35357/v3 |
+--------------+-------------------------------------+
3.13 创建default域
[root@node-251 ~]# openstack domain create --description "Default Domain" default
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Default Domain |
| enabled | True |
| id | f4e5187c3aef4288b6b2d97c292a69a2 |
| name | default |
| tags | [] |
+-------------+----------------------------------+
3.14 创建admin项目
[root@node-251 ~]# openstack project create --domain default --description "Admin Project" admin
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Admin Project |
| domain_id | f4e5187c3aef4288b6b2d97c292a69a2 |
| enabled | True |
| id | 2aaf4155b00749b0a333a039c17c131c |
| is_domain | False |
| name | admin |
| parent_id | f4e5187c3aef4288b6b2d97c292a69a2 |
| tags | [] |
+-------------+----------------------------------+
3.15 创建admin用户并设置密码
[root@node-251 ~]# openstack user create --domain default --password-prompt admin
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | f4e5187c3aef4288b6b2d97c292a69a2 |
| enabled | True |
| id | 063ef7b979334fa5a86420952a141d32 |
| name | admin |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
密码:123456
3.16 创建admin角色
[root@node-251 ~]# openstack role create admin
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 25045c151e6e4642bd5b9c61ec56ac6f |
| name | admin |
+-----------+----------------------------------+
3.17 添加admin角色到admin项目和用户上
[root@node-251 ~]# openstack role add --project admin --user admin admin
3.18 创建service项目
[root@node-251 ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | f4e5187c3aef4288b6b2d97c292a69a2 |
| enabled | True |
| id | a541e3766c284cb9b1a3ee77467309d4 |
| is_domain | False |
| name | service |
| parent_id | f4e5187c3aef4288b6b2d97c292a69a2 |
| tags | [] |
+-------------+----------------------------------+
3.19 创建demo项目
[root@node-251 ~]# openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | f4e5187c3aef4288b6b2d97c292a69a2 |
| enabled | True |
| id | 97ecef33235f473ba5f252af76bb89bb |
| is_domain | False |
| name | demo |
| parent_id | f4e5187c3aef4288b6b2d97c292a69a2 |
| tags | [] |
+-------------+----------------------------------+
3.20 创建demo用户并设置密码
[root@node-251 ~]# openstack user create --domain default --password-prompt demo
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | f4e5187c3aef4288b6b2d97c292a69a2 |
| enabled | True |
| id | 93913e9669f34ea8a5db74256da105ec |
| name | demo |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
密码:123456
3.21 创建user角色
[root@node-251 ~]# openstack role create user
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | f3ce47e14e0141daada5c405b0db68d5 |
| name | user |
+-----------+----------------------------------+
3.22 添加user角色到demo项目和用户
[root@node-251 ~]# openstack role add --project demo --user demo user
3.23 验证操作
[root@node-251 ~]# unset OS_TOKEN OS_URL
[root@node-251 ~]# openstack --os-auth-url http://openstack.if010.com:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
Password:
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2023-06-05T11:04:52+0000 |
| id | gAAAAABkfbNEhCAyAi8qLO7DejIkLnJ3-3nK7NU-HCVwRrDniTGWtrRE0sw40bgGZkeD1KIB1BaVDwJPes2rLhb4ym_LkbnaWWKWGIrA-YJ9-ywUaN6E-X9ICQ3-FdpeVyx6GfP8KlB93oYZ-dtmEuLIFEV3JULnw6tBFnOIrMDEQKp0vD-mmkA |
| project_id | 2aaf4155b00749b0a333a039c17c131c |
| user_id | 063ef7b979334fa5a86420952a141d32 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
[root@node-251 ~]# openstack --os-auth-url http://node-251:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue
Password:
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2023-06-05T11:05:50+0000 |
| id | gAAAAABkfbN-qCLdLdphBmQeZS1Laqf9K4lKW8jLBPB2kt9OjEGuPBZ72FcfN0oK4FbJ1hQyAe7297O4W3Sof_QHGONJby4vSeHSmfMM1dR4tOHDtEwfKtQRJfoaXSV2f9OyPDycaW4_NLrlHMoCvrjXF2MXO-CUrYOHNnyDmHGQ_LvBHP_TxkE |
| project_id | 97ecef33235f473ba5f252af76bb89bb |
| user_id | 93913e9669f34ea8a5db74256da105ec |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3.24 创建 OpenStack 客户端环境脚本
[root@node-251 openstack]# vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_AUTH_URL=http://openstack.if010.com:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
[root@node-251 openstack]# vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=123456
export OS_AUTH_URL=http://openstack.if010.com:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
[root@node-251 openstack]# source admin-openrc
[root@node-251 openstack]# openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2023-06-06T02:09:25+0000 |
| id | gAAAAABkfodFFSQac25fPoUWNxyjSrJCS1FvonrWqe2-q_LL2ZV2A1TpwqPVAJuFO3pOpRIVCWxO4uzTCtVsLSdhUBnN6iOd_ATHy0nDycwYUiIcmDPxPUPz_s1_HpmRTh2hMd30dCCQKhcnHWwyBmyW8dqb5BYoQMx0Xw3P1xxAKC4YAOSmKWA |
| project_id | 2aaf4155b00749b0a333a039c17c131c |
| user_id | 063ef7b979334fa5a86420952a141d32 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3.25 常用命令
创建一个项目(project),创建在指定的domain(域)中,指定描述信息,project名称为service(可使用openstack domain list 查询)
openstack project create --domain default --description "Service Project" service
创建角色(可使用openstack role list查看)
openstack role create user
查看openstack 角色列表
[root@node-251 openstack]# openstack role list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 25045c151e6e4642bd5b9c61ec56ac6f | admin |
| f3ce47e14e0141daada5c405b0db68d5 | user |
+----------------------------------+-------+
查看是否可以不指定密码就可以获取到token信息(验证认证服务)
openstack token issue