一、实验说明

按照官方文档搭建queens版本openstack,拓扑如下图所示:
初识openstack之5——安装Keystone_第1张图片

二、Identity介绍

identity是一个集合了认证、授权和为open stack其他服务编录的项目,代码名为keystone。当一个终端用户发起请求时,他先找到identity进行认证,通过认证后允许用户访问其权限内openstack的其他组件,同样其他组件也会对用户身份进行确认,并从identity处获得其他组件的访问地址。keystone可以集成像LDAP等外部认证机制。
keystone中的catalog里记录了openstack中所有可用服务的地址信息,供用户和其他服务使用。每个服务由一个或者多个访问路径,可以分为:admin、internal、public三类,在生产环境中,不同的访问路径可以放置不同的网段中。例如:用户可以通过公网使用public API管理他们的云机构,组件之间可以通过inernal API网络通信,管理员则通过admin API进行管理。openstack支持多区域以便扩展。简单起见,实验中使用管理网络承载所有的访问路径,并使用默认区域RegionOne。catalog由区域、服务和访问路径一起构成。
identity server有以下三个组件构成:

  1. server
    使用RESTful接口提供同一个认证和授权
  2. drivers
    集中管理务驱动或后端服务,主要用于为OpenStack访问外部存储库中提供标识信息
  3. modules
    中间件模块运行在openstack的地址空间中,对用户和服务的请求进行验证和授权,它与openstack组件见通过phython网关接口进行通信

三、安装配置过程

创建数据库

  1. 创建数据库并授权
    [root@controller ~]# mysql -u root -p;    
    MariaDB [(none)]> create database keystone;  
    MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'password1!';  
    MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'password1!';  
  2. 安装并配置keystone
    [root@controller ~]# yum install openstack-keystone httpd mod_wsgi
    [root@controller ~]# vim /etc/keystone/keystone.conf
    [database]
    # ...
    connection = mysql+pymysql://keystone:password1!@controller/keystone  
    [token]
    # ...
    provider = fernet

    [database]段如有多余的connection配置项,要删除

  3. 填充identity数据库,并验证
    [root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
    [root@controller ~]# mysql
    MariaDB [(none)]> show databases;
    初识openstack之5——安装Keystone_第2张图片
    MariaDB [(none)]> use keystone;
    MariaDB [keystone]> show tables;
    初识openstack之5——安装Keystone_第3张图片
  4. 初始化Fernet密钥存储库
    [root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone  
    [root@controller ~]#  keystone-manage credential_setup --keystone-user keystone --keystone-group keystone  
  5. 启动identity服务
    [root@controller ~]# keystone-manage bootstrap --bootstrap-password password1!   --bootstrap-admin-url http://controller:5000/v3/   --bootstrap-internal-url http://controller:5000/v3/   --bootstrap-public-url http://controller:5000/v3/   --bootstrap-region-id RegionOne

    在queens之前的版本中keystone需要侦听在2个不同的端口,其中3357端口只能是admin使用,queens之后不再是2个端口,统一使用3357端口对外提供服务

配置apache服务

  1. 修改配置文件
    [root@controller ~]# vim /etc/httpd/conf/httpd.conf
    ServerName controller
  2. 创建软连接
    [root@controller ~]# ln -sv /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/  
  3. 启动httpd服务
    [root@controller ~]# systemctl enable httpd.service   
    [root@controller ~]# systemctl start httpd.service  
  4. 配置管理员账号
    export OS_USERNAME=admin;export OS_PASSWORD='password1!';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

    此处OS_PASSWORD的密码要和之前“启动identity服务”中--bootstrap-password选项处设置的密码一致

创建域、项目、用户和角色
identity server向openstack中所有组件提供认证服务,认证包括域、项目、用户和角色,需要先安装python2-openstackclient包

  1. 尽管default域在启动identity服务阶段就已存在,此处再演示创建一个新域
    [root@controller ~]# openstack domain create --description "An Example Domain" example  

    初识openstack之5——安装Keystone_第4张图片

  2. 在default域中创建一个名为server的项目
    [root@controller ~]# openstack project create --domain default   --description "Service Project" service  

    初识openstack之5——安装Keystone_第5张图片

  3. 普通(非特权)任务应该使用非特权项目和用户,此处创建一个daemon的项目和用户
    3.1 创建daemo项目
    [root@controller ~]# openstack project create --domain default   --description "Demo Project" demo  

    初识openstack之5——安装Keystone_第6张图片
    3.2 创建daemon用户

    [root@controller ~]# openstack user create --domain default   --password-prompt demo  

    初识openstack之5——安装Keystone_第7张图片
    注意:不能通过重复使用此步骤向daemon项目添加额外的用户
    3.3 创建user角色

    [root@controller ~]# openstack role create user  

    初识openstack之5——安装Keystone_第8张图片
    3.4 将user角色赋予daemon项目和daemon用户

    [root@controller ~]# openstack role add --project demo --user demo user  

    此步骤无输出信息

验证结果
在controller节点进行以下验证操作:

  1. 取消 OS_AUTH_URL 和 OS_PASSWORD 临时环境变量值
    [root@controller ~]# unset OS_AUTH_URL OS_PASSWORD  
  2. 为admin用户申请一个认证令牌
    [root@controller ~]# 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  

    初识openstack之5——安装Keystone_第9张图片

  3. 为daemon用户申请一个认证令牌
    [root@controller ~]# 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  

    初识openstack之5——安装Keystone_第10张图片
    此处的5000端口仅作为identity服务的普通(非特权)访问API

创建环境变量脚本
在客户端为admin和demo项目和用户创建不同的环境变量

  1. 创建admin变量
    [root@controller ~]# 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=password1!
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2   
  2. 创建demo变量
    [root@controller ~]# 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=password1!
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2

使用脚本
加载admin和demo项目和用户变量,进行测试,此处以admin为例

[root@controller ~]# . admin-openrc 
[root@controller ~]# openstack token issue