安装OpenStack认证服务组件KeyStone--笔记

     以下笔记根据腾讯专家讲解的《云计算与OpenStack》网络课程,地址:1 KeyStone 简介_哔哩哔哩_bilibili,整理并亲手操作,特此感谢

 

OpenStack框架图

 

KeyStone简介

    早期的OpenStack版本,并没有KeyStone身份认证模块。用户、消息、API调用的认证都是放在Nova模块中的。随着OpenStack中加入了各种各样的模块,安全认证涉及的面越来越广泛,如用户登录、用户消息传递、服务注册等。处理这些不同的安全认证变得越来越复杂,所以就需要一个专门的模块来负责安全认证,于是KeyStone就产生了。

    KeyStone为整个OpenStack提供了安全认证服务,是必须首先安装也是OpenStack最关键的组件之一。

    其安装过程大致包括:

    1)安装和配置KeyStone数据库

    2)安装KeyStone

    3)通过配置文件配置KeyStone

    4)创建服务实体和API端点

    5)创建项目、用户和角色

 

安装和配置KeyStone数据库

(1)安装MySQL,使用以下命令:

 

sudo apt-get install mysql-server

 

安装过程中,需要设置root密码,例如设置为dtc123,安装完成可使用 

sudo service mysql status

查看MySQL服务器状态。

查看mysql服务状态

(2)使用数据库客户端以root用户连接到数据库中,命令如下:

mysql -u root -p

 此时需要输入root用户的密码。

root登陆mysql

 

(3)然后,创建KeyStone数据库,命令如下:

CREATE DATABASE keystone;
创建keystone数据库

 

(4)接着,为用户keystone授权,使其在keystone数据库中拥有全部的权限,.*表示全部权限,'username'@'localhost'中的username表示创建的数据库的用户名。KEYSTONE_DBPASS是需要指定的密码,要换成自己设置的密码,dtc123。命令如下:

GRANT ALL PRIVILEGES ON keystone.* TO 'username'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
 

对用户control授予keystone数据库的全部权限

(5)接着,希望用户control能够从任何主机连接到本机的keystone数据库的全部权限,命令如下,其中%表示主机部分:

GRANT ALL PRIVILEGES ON keyston.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';

最后,执行FLUSH PRIVILEGES;使更改的权限生效。

 

以上步骤完成了keystone数据库的安装和授权,接下来就可以安装keystone了。

 

安装KeyStone

KeyStone服务的监听端口是5000和35357,配置Apache Http服务监听这两个端口。为避免端口冲突,在Ubuntu上禁止KeyStone开机自动启动。

首先切换到root用户, sudo su root,然后,命令如下:

echo "manual" > /etc/init/keystone.override 
 

安装与KeyStone相关的软件包,命令如下:

sudo apt-get install keystone python-openstackclient apache2 libapache2-mod-wsgi memcached python-memcache

这里,
python-openstackclient是使用Python开发的openstack的客户端工具,可以用这个工具连接和测试keystone的服务。apache2是安装apache的http服务器。libapache2-mod-wsgi 指的是,而 wsgi指的是 Web Server Gateway Interface,是Python应用程序与Web服务器之间的一种接口,定义了一套接口来实现服务器与应用端的通信规范。
     此外,memcached是高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。通过在内存中缓存数据和对象来减少读取数据库的次数,提高动态、数据库驱动网站的速度。memcached是基于存储键值对的Hashmap。其守护进程daemon是用C语言写的,但是客户端可用任何语言来写,并通过memcached协议与守护进程通信。
     python-memcache是使用Python语言开发的memcached内存守护进程通信的接口程序。
安装keystone和apache及memcache

 

修改KeyStone的配置keystone.conf

原始的keystone.conf的部分内容,带有很多注释的行

由于keystone.conf中有大量的注释,不方便查找和修改配置。

因此,先将以 # 开头的注释的行删掉。

首先做一个文件备份。然后,打开备份文件,再过滤掉#开头的行,把内容写入 keystone.conf文件。

sudo su root
mv keystone.conf keystone.conf.bak cat keystone.conf.bak
| grep -v "^#" > keystone.conf

 

 

(1)随机生成一个16进制的token,Token(令牌)是文本形式的字母-数字字符串,一种用户身份验证机制,用户在访问受保护的服务资源时,仅仅需要提供token,不需要提供用户名和密码。OpenSSL是一个强大的套接字层密码库,包括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议。

openssl rand -hex 10
 用openssl生成16进制token

 此处生成的token为 40159ae1ca859cc7c9a8,下一步要用到。

 

(2)修改default部分,配置初始的令牌管理,ADMIN_TOKEN就是上一步生成的16进制的token。

admin_token=ADMIN_TOKEN 
设置admin_token

(3)修改 database 部分,配置数据库的连接

connection=mysql://keystone:KEYSTONE_DBPASS@hostname/keystone

这里,第一个keystone是前面创建的数据库的用户名,KEYSTONE_DBPASS是keystone数据库的root密码,本文密码是dtc123,hostname指的是主机名称,这里将虚拟机命名为localhost,即控制节点的意思。最后一个keystone是数据库名称。

测试本机能否ping通

配置数据库连接

(4) 修改 memcache 部分,配置memcache 服务。11211是memcache服务器的默认端口

servers=localhost:11211

server 运行在控制节点上,也就是本地节点上。 本文所有的操作都是在控制节点上进行的。

设置memcache服务端口

如果想查看memcache是否启动,可以通过查看端口11211是否处于监听的状态。

查看memcache的端口11211是否处于监听状态

 

(5)修改token部分。配置UUID令牌的提供者和memcached的持久化驱动

provider=keystone.token.providers.uuid.Provider
driver=keystone.token.persistence.backends.memcache.Token

keystone支持UUID和PKI的令牌提供者。UUID是通用唯一识别码,让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来辨别咨询的指定。每个人都可以建立与其他人不冲突与的UUID。

keystone.token.persistence.backends.memcache_pool.Token 基于memcached池进行令牌的持久化存储,如果使用eventlet(用Python编写的为高并发的网络编程而涉及的库)来部署keystone建议选此值。

keystone.token.persistence.backends.sql.Token:默认配置,使用基于SQL的信息持久化引擎。

keystone.token.persistence.backends.memcache.Token 使用memcached服务器作为后端驱动的持久化存储,使用apachemod_wsgi选此值(本文安装的方式是apache2 libapache2-mod-wsgi

配置token部分UUID和持久化驱动

(6)在  revoke 部分,配置SQL的撤回驱动

driver=keystone.contrib.revoke.backends.sql.Revoke
在revoke部分配置数据库撤回驱动

(7)为了方便做问题诊断,在 DEFAULT 部分,配置详细的日志输出。

verbose=True
verbose=True详细日志

(8)以root的身份为keystone数据库填充数据,最后一个 keystone 表示使用数据库。

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

 

配置Apache HTTP Server

(1)编辑 /etc/apache2/apache2.conf,配置 ServerName 为控制节点

ServerName control

 

(2)创建 /etc/apache2/sites-available/wsgi-keystone.conf,并添加如下内容:

Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /var/www/cgi-bin/keystone/main
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    <IfVersion >= 2.4>
        ErrorLogFormat "%{cu}t %M"
    </IfVersion>
    LogLevel info
    ErrorLog /var/log/apache2/keystone-error.log
    CustomLog /var/log/apache2/keystone-access.log combined
</VirtualHost>

 

 (3)启用认证服务的虚拟主机

ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled

 

(4)为WSGI组件创建目录结构

mkdir -p /var/www/cgi-bin/keystone

 

(5)拷贝WSGI组件到创建好的目录下

curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin

 

(6)设置目录和文件的权限

chown -R keystone:keystone /var/www/cgi-bin/keystone
chmod 755  /var/www/cgi-bin/keystone

 

(7)重启 apache http server

service apache2 restart

 

(8)删除 Ubuntu 默认创建的SQLite 数据库

rm -f /var/lib/keystone/keystone.db

 

 

配置服务实体和API端点

认证服务KeyStone提供了OpenStack服务和位置的一个目录,

OpenStack的所有服务在KeyStone提供的目录中必须要有一个服务实例service entity和几个API端点endpoint

OpenStack为每个服务提供了三种API端点:

     (1)admin(管理端点),允许修改用户和租户

     (2)internal(内部端点)、(3)public(公共端点)——这两种端点不允许修改用户和租户

在生产环境中,处于安全的考虑,这三种不同的API端点位于不同的网络以服务不同类型的用户

例如,public API网络用于云环境外的管理工具的连接,而admin API网络可用于内部连接各主机进行管理操作

 

配置认证服务的服务实体

设置操作系统临时环境变量:校验令牌,即前面用openssl生成16进制token

export OS_TOKEN=ADMIN_TOKEN

设置操作系统临时环境变量:端点URL

这里的control是将hostname重新命名的,命令是 hostnamectl set-hostname control

export OS_URL=http://control:35357/v2.0

为认证服务创建服务实体

openstack service create --name keystone --description "OpenStack Identity" identity

 

配置认证服务的API端点

openstack endpoint create --publicurl http://controller:5000/v2.0 --internalurl http://controller:5000/v2.0 --adminurl http://controller:35357/v2.0 --region RegionOne identity

 

配置项目、用户和角色

身份认证服务为OpenStack的所有服务提供了校验的服务

校验服务会联合使用域名、项目(租户)、用户和角色完成校验

 

项目和租户

在OpenStack用户界面和一些文档中,有时会看到“项目”是指一组用户,而有时也会用来代替“租户”,这两个术语是可以通用的。

最初OpenStack计算服务(nova)有自己的身份验证系统,使用的术语是“项目”。认证系统独立成为OpenStack身份认证服务KeyStone项目后,新项目使用“租户”代指一个用户组。

 

创建管理项目、用户和角色

创建管理项目

openstack project create --description "Admin Project" admin

创建管理用户

openstack user create --password-prompt admin

创建管理角色

openstack role create admin

为管理项目和管理用户添加管理角色

openstack role add --project admin --user admin admin

 

创建服务项目

为其它的OpenStack服务创建服务项目(service project)

openstack project create --description "Service Project" service

 

创建普通项目和用户

 创建demo项目

openstack project create --description "Demo Project" demo

创建demo用户

openstack user create --password-prompt demo

创建user角色

openstack role create user

为demo项目和demo用户添加user角色

openstack role add --project demo --user demo user

 

校验安装

(1)基于安全的原因,先临时禁止校验令牌的机制

编辑文件/etc/keystone/keystone-paste.ini,从[pipeline:public_api]、[pipeline:admin_api]和[pipeline:api_v3]三部分删除

admin_token_auth

(2)取消设置的操作系统环境变量 

 

unset OS_TOKEN OS_URL

 

(3)使用admin用户校验安装

以admin用户,从2.0版本的认证API申请一个校验令牌

openstack --os-auth-url http://control:35357 --os-project-name admin --os-username admin --os-auth-type password token issue

3.0版本的认证API支持域名,以admin用户申请一个校验令牌

openstack --os-auth-url http://control:35357 --os-project-domain-id default --os-user-domain-id default --os-project-name  admin --os-username admin --os-auth-type password token issue

 

检验admin用户是否有权限查看认证服务中包含的项目

openstack --os-auth-url http://control:35357 --os-project-name admin --os-username admin --os-auth-type password project list

 

以admin用户,查看认证服务中的用户是否创建成功

openstack --os-auth-url http://control:35357 --os-project-name admin --os-username admin --os-auth-type password user list

以admin用户,查看认证服务中的角色是否创建成功

openstack --os-auth-url http://control:35357 --os-project-name admin --os-username admin --os-auth-type password role list

 

接着,用 demo 用户检验安装

以demo用户,从v3版本的认证API中申请校验令牌

openstack --os-auth-url http://control:35357 --os-project-domain-id default --os-user-domain-id default --os-project-name demo --os-username demo --os-auth-type password token issue

以demo用户,尝试能否执行只有管理用户才能执行的查看用户的操作

openstack --os-auth-url http://control:35357 --os-project-name demo --os-username demo --os-auth-type password user list

 

 

 

 

 

创建OpenStack客户端脚本

 

posted @ 2024-03-23 21:09  三月风  阅读(1033)  评论(0)    收藏  举报