openstack-5

Keystone组件

keystone作为openstack的核心模块,为Nova(计算)、Glance(镜像)、Swift(对象存储)、Cinder(块存储)、Neutron(网络)以及Horizon(Dashboard)提供认证服务。
##图 keystone架构
openstack-5_第1张图片

除了涉及到keystone模块之外,还有KeystoneMiddleware子项目,它是对keystone提供的对令牌合法性进行验证的中间件,缓存了相关的证书和令牌信息。

keystone项目本身,除了后端的数据库,主要包含了一个处理RestFful请求的API服务进程,这些API涵盖了Identity、Token、Catalogy和Plolicy提供的各种各样服务,不同的服务都是有相应的后端Driver(BackendDriver)来实现。

Keystone的基本概念

  • User

    User即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,如密码、API Keys等)进行验证。

  • Tenant
    Tenant即租户,它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Neutron中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上

  • Role
    Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的或租户的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。

  • Service
    Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。

  • Endpoint
    Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板,这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。

  • Token
    Token是访问资源的钥匙。它是通过Keystone验证后的返回值,在之后的与其他服务交互中只需要携带Token值即可。每个Token都有一个有效期,Token只在有效期内是有效的。

各种概念之间的关系如下图
openstack-5_第2张图片
1、租户下,管理着一堆用户(人,或程序)。
2、每个用户都有自己的credentials(凭证)用户名+密码或者用户名+API key,或其他凭证。
3、用户在访问其他资源(计算、存储)之前,需要用自己的credential去请求keystone服务,获得验证信息(主要是Token信息)和服务信息(服务目录和它们的endpoint)。
4、用户拿着Token信息,就可以去访问特点的资源了。


keystone在Openstack中的工作流程实例
1) keystone在OpenStack中的工作流程
openstack-5_第3张图片

2)手动搭建keystone
a. controller控制节点上进行创建keystone库操作,操作完成后退出。

MariaDB [(none)]> create database keystone   //创建keystone库
    -> ;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| keystone           |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]>  GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'  IDENTIFIED BY 'openstack'; 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';    //
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> 

b.安装相关软件包并配置

yum install    -y     openstack-keystone httpd mod_wsgi 

安装完成后修改配置文件如下
vim /etc/keystone/keystone.conf
openstack-5_第4张图片
openstack-5_第5张图片

c. 初始化数据库,并创建数据结构

su -s /bin/sh -c "keystone-manage db_sync" keystone

登录数据库进行验证,能在keystone库下查看到44个表则说明一切正常,退出数据库
openstack-5_第6张图片

d.初始化femet密钥存储库

#keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 
#keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

无任何输出说明正确

e. 创建keystone的服务端口

keystone-manage bootstrap --bootstrap-password openstack --bootstrap-admin-url http://controller:35357/v3/  --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url  http://controller:5000/v3/  --bootstrap-region-id RegionOne

无任何输出说明正确

f. 配置http服务
vim /etc/httpd/conf/httpd.conf
openstack-5_第7张图片

给/usr/share/keystone/wsgi-keystone.conf创建一个软连接

ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

openstack-5_第8张图片

服务启动并设置开机自启

systemctl enable httpd.service &&  systemctl start httpd.service

openstack-5_第9张图片

g.创建管理员账号
vim /var/log/admin-openrc

export OS_USERNAME=admin   
export OS_PASSWORD=openstack
export OS_PROJECT_NAME=admin 
export OS_USER_DOMAIN_NAME=Default 
export OS_PROJECT_DOMAIN_NAME=Default 
export OS_AUTH_URL=http://controller:35357/v3 
export OS_IDENTITY_API_VERSION=3

保存退出执行source admin-openrc

h. 创建域、项目、用户和角色
1)创建2个项目(租户)

openstack project create --domain default --description "Service Project" service

openstack project create --domain default --description "Demo Project" demo

openstack-5_第10张图片
openstack-5_第11张图片
2)创建用户并设置密码

#openstack user create --domain default --password-prompt demo     (123456)

openstack-5_第12张图片
3)创建普通用户
openstack-5_第13张图片

验证
1)解除环境变量

unset OS_AUTH_URL OS_PASSWORD

openstack-5_第14张图片

2)获取admin的token(使用35357端口)

openstack --os-auth-url http://controller:35357/v3 \
--os-project-domain-name Default \
--os-user-domain-name Default \
--os-project-name admin  \
--os-username admin token issue   //回车输入admin的密码  openstack

openstack-5_第15张图片

3)获取普通用户demo的token(5000端口)

openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default \
--os-user-domain-name Default \
--os-project-name demo --os-username demo token issue  //回车输入demo的密码 123456

openstack-5_第16张图片

创建openstack客户端的脚本环境
1)创建管理员的账号

openstack-5_第17张图片

2)查看获取到token的值是否与之前admin用户获取到的token相同,注意它有时效性,下次获取可能就不相同了。

openstack-5_第18张图片

3)创建demo用户的账号

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://controller:5000/v3 
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

4)验证
openstack-5_第19张图片

5)使用脚本验证

source admin-openrc
openstack token issue
可获取token admin用户的token

source demo-openrc
openstack token issue
可以获取token demo用户的token

你可能感兴趣的:(openstack-5)