03.OpenStack认证服务Keystone
徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208
1.认证服务概述
OpenStack的身份服务提供了集成的管理身份验证,授权和服务目录服务的单点。其他的OpenStack服务使用的身份服务作为一个通用统一的API。此外,提供有关用户的信息,但该服务不包括开栈(如LDAP服务)可以被集成到一个预先存在的基础设施。
为了从身份服务中受益,其他的OpenStack服务需要与它合作。当一个开栈服务从用户接收请求时,它检查与用户是否被授权作出该请求的标识服务。
身份服务包含以下组件:
- 服务器 中央服务器提供了一种使用RESTful接口验证和授权服务。
- 驱动程序 驱动程序或服务后端被集成到中央服务器。它们被用于在库外的OpenStack访问身份信息,并且可以在开栈中部署(例如,SQL数据库或LDAP服务器)的基础设施已经存在。
- 模块 中间件模块中正在使用该标识服务的开栈组件的地址空间中运行。这些模块拦截服务请求,提取用户凭据,并将它们发送到中央服务器进行授权。中间件模块和OpenStack的组件之间的集成使用Python的Web服务器网关接口。 当安装OpenStack的身份服务,您必须在您的OpenStack安装注册的每个服务。然后身份服务可以跟踪安装哪些开栈的服务,并且它们的位置在网络上。
OpenStack的身份服务提供了集成的管理身份验证,授权和服务目录服务的单点。
用户与认证:用户权限与用户行为追踪。
服务目录:提供一个服务目录,包括所有服务项与相关Api的端点
用户认证
User:用户、Tenant:租户项目、Token:令牌、Role:角色
服务目录
Service:服务、Endpoint:端口
2.Keystone安装配置
本节将介绍如何安装和配置OpenStack的身份服务,代号为梯形,本指南部署至控制节点
2.1认证服务先决条件
配置OpenStack的认证服务之前,你必须创建一个数据库和管理令牌。
1.创建Keystone数据库,赋予数据库梯形权限,完成以下操作
mysql -u root -p123456 -e "CREATE DATABASE keystone;"
mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON \
keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';"
mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON \
keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';"
2.2安装和配置Keystoen
默认的配置文件由分布有所不同。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,在配置片段省略号(...)表示应保留潜在的默认配置选项。
本指南使用的Apache HTTP服务器mod_wsgi的服务端口5000和35357.默认标识服务请求,服务基石仍然监听这些端口。
1.运行以下命令安装Openstack Keystone认证服务
[root@linux-node1 ~]# yum install openstack-keystone httpd mod_wsgi -y
2.编辑/etc/keystone/keystone.conf
文件并完成以下操作:
在 [database]
部分中,配置数据库访问
[database]
...
connection = mysql://keystone:keystone@192.168.56.11/keystone
在 [memcache]
部分中,配置缓存服务
[memcache]
...
servers = 192.168.56.11:11211
在 [token]
部分中,配置token的fernet
[token]
...
provider = fernet
3.初始化keyston数据库,并检查数据库
[root@linux-node1 ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@linux-node1 ~]# mysql -uroot -p123456 -e "use keystone;show tables;"|wc -l
38
4.初始化fernet密钥库
[root@linux-node1 ~]# keystone-manage fernet_setup \
--keystone-user keystone --keystone-group keystone
[root@linux-node1 ~]# keystone-manage credential_setup \
--keystone-user keystone --keystone-group keystone
5.创建身份服务API端点
[root@linux-node1 ~]# keystone-manage bootstrap --bootstrap-password admin \
--bootstrap-admin-url http://192.168.56.11:35357/v3/ \
--bootstrap-internal-url http://192.168.56.11:35357/v3/ \
--bootstrap-public-url http://192.168.56.11:5000/v3/ \
--bootstrap-region-id RegionOne
2.3配置Apache HTTP Server
1.编辑/etc/httpd/conf/httpd.conf
中的文件配置ServerName
ServerName 192.168.56.11:80
2.创建一个文件链接至/usr/share/keystone/wsgi-keystone.conf
[root@linux-node1 ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
2.4完成认证服务安装
1.启动Apache HTTP服务,并将其配置为启动系统时启动
[root@linux-node1 ~]# systemctl enable httpd memcached
[root@linux-node1 ~]# systemctl start httpd.service memcached.service
2.检查#keystone相关配置,5000服务调用端口,35357管理端口
[root@linux-node1 ~]# netstat -lntp|grep "httpd"
tcp6 0 0 :::5000 :::* LISTEN 90577/httpd
tcp6 0 0 :::80 :::* LISTEN 90577/httpd
tcp6 0 0 :::35357 :::* LISTEN 90577/httpd
3.执行如下命令,配置管理帐户
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.56.11:35357/v3
export OS_IDENTITY_API_VERSION=3
3.创建项目用户和角色
身份服务为每OpenStack的服务提供认证服务。认证服务使用域,项目(租户),用户和角色的组合。
本指南使用一个服务项目,该项目包含一个您添加到您的环境中的每个服务的唯一用户。
1.创建服务项目
[root@linux-node1 ~]# openstack project create --domain default \
--description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | b512727322e64c8a9fe03577e03c144e |
| is_domain | False |
| name | service |
| parent_id | default |
+-------------+----------------------------------+
2.非管理员的任务应该使用一个普通的项目和用户。作为一个例子,本指南创建demo项目和用户。
[root@linux-node1 ~]# openstack project create --domain default \
--description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | 7f005d2fc6fa46cab5a700d3b2ff94bf |
| is_domain | False |
| name | demo |
| parent_id | default |
+-------------+----------------------------------+
创建demo用户
[root@linux-node1 ~]# openstack user create --domain default \
--password=demo demo
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | c5923120d10c43eb875da6f9491d64b2 |
| name | demo |
| password_expires_at | None |
+---------------------+----------------------------------+
创建普通用户角色
[root@linux-node1 ~]# openstack role create user
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 8c3c43c034a148a08c17d41869fcb758 |
| name | user |
+-----------+----------------------------------+
"demo" 用户加入 "demo" 项目,赋予 "user" 角色
[root@linux-node1 ~]# openstack role add --project demo --user demo user
4.验证Keystone操作
安装其他服务之前,验证服务的运行。出于安全原因,禁止临时身份验证令牌机制.
1.取消临时OS_URL
环境变量
[root@linux-node1 ~]# unset OS_URL
2.admin用户,请求身份验证令牌
[root@linux-node1 ~]# openstack --os-auth-url http://192.168.56.11:35357/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name admin --os-username admin token issue
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2016-10-09 06:41:27+00:00 |
| id | gAAAAABX-diHHH3KKszyA_LWcXQgAphV4PSKtMiGYSLYcfQgiuFH4hWbbciOaTlo1wKOhyeXGeBWhEGm-u6x-0tqY3YvcI8b42b_cqU0GWLCo1ZUT2K3OIFRABJYzTb- |
| | L9XwmYBa6G42NKgUh7Chcamr31watRCwr5m6dq_iSqrjMQ8gnvb40iw |
| project_id | 0ec016bd5701495ab9cf2b7ffbea28b9 |
| user_id | c32a1641c2a343eeae1c156892bc05ea |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
3.demo用户,请求身份验证令牌
[root@linux-node1 ~]# openstack --os-auth-url http://192.168.56.11:5000/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name demo --os-username demo --os-password demo token issue
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2016-10-09 06:42:48+00:00 |
| id | gAAAAABX-djY05lRv5-91KilWj0Qr9GuZCW_LhGzv7YZkpkVqw-z4Q_MM6K36-3mdUOBm35jXdxwaUyGmLADL1f27dnEMm0kiI_m3ZusSIV7Hbl- |
| | bIhyjRMDR0NfwG51mi5VIWKbueJcXnFG76sYRBxkSCS7CY75tc2UjwMA0o4YUKclF2jBc98 |
| project_id | 7f005d2fc6fa46cab5a700d3b2ff94bf |
| user_id | c5923120d10c43eb875da6f9491d64b2 |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
5.创建OpenStack的客户端环境的脚本
在上一节中使用的环境变量和命令选项的组合,以经由开栈客户身份服务进行交互。为了提高客户运营效率,OpenStack的支持简单的客户端脚本环境也被称为OpenRC的文件。这些脚本通常包含的所有客户端常用的选项,还支持独特的选项。欲了解更多信息,请参阅OpenStack的最终用户指南。
5.1创建脚本
创建admin和demo用户的项目和客户端环境的脚本。该指南的未来部分引用这些脚本加载客户端操作相应的凭据。
1.编辑admin-openrc
的文件,并添加以下内容
[root@linux-node1 ~]# 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=admin
export OS_AUTH_URL=http://192.168.56.11:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
2.编辑demo-openrc
的文件,并添加以下内容
[root@linux-node1 ~]# vim demo-openrc
export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=demo
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://192.168.56.11:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
6.2使用脚本
1.加载 admin-openrc 文件来填充环境变量的身份服务和管理项目和用户凭据的位置
[root@linux-node1 ~]# chmod +x admin-openrc demo-openrc
2.申请认证令牌
[root@linux-node1 ~]# source admin-openrc
[root@linux-node1 ~]# openstack token issue
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2016-10-09 06:43:38+00:00 |
| id | gAAAAABX-dkKw5oES9dNceaTqUSd7xhikm1DLNML0u_cJF7wCN43lUip1J2BtLjzjozRka_-8UlhX4zVKGstuGxm2R- |
| | m8Y3ElIDwIj8a5pKBOmebQ9aH9fShkE4w5hWIg9odsnoy5WsrGxrD2dujdVfAC5zuyOc3m3Zdtie5W2Ig35S0Y094fDI |
| project_id | 0ec016bd5701495ab9cf2b7ffbea28b9 |
| user_id | c32a1641c2a343eeae1c156892bc05ea |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+