以下笔记根据腾讯专家讲解的《云计算与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密码,例如设置为123456,安装完成可使用
sudo service mysql status
查看MySQL服务器状态。
查看mysql服务状态(2)使用数据库客户端以root用户连接到数据库中,命令如下:
mysql -u root -p
此时需要输入root用户的密码。
root登陆mysql
(3)然后,创建KeyStone数据库,命令如下:
CREATE DATABASE keystone;创建keystone数据库
(4)接着,为root用户授权,使其在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
此外,memcached是高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。通过在内存中缓存数据和对象来减少读取数据库的次数,提高动态、数据库驱动网站的速度。memcached是基于存储键值对的Hashmap。其守护进程daemon是用C语言写的,但是客户端可用任何语言来写,并通过memcached协议与守护进程通信。 python-memcache是使用Python语言开发的memcached内存守护进程通信的接口程序。 安装keystone和apache及memcache
这里,python-openstackclient是使用Python开发的openstack的客户端工具,可以用这个工具连接和测试keystone的服务。apache2是安装apache的http服务器。libapache2-mod-wsgi 指的是,而 wsgi指的是 Web Server Gateway Interface,是Python应用程序与Web服务器之间的一种接口,定义了一套接口来实现服务器与应用端的通信规范。
修改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=Trueverbose=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端点
配置项目、用户和角色
校验安装
创建OpenStack客户端脚本
标签:--,数据库,token,memcache,keystone,KeyStone,conf,OpenStack From: https://www.cnblogs.com/heubj/p/18087828