安装与配置Keystone

keystone简介

keystone为openstack安全认证服务组件,提供了用户信息管理和完成各个模块认证服务。

  • 认证服务:登录认证,各个组件API的权限控制。
  • 用户信息管理:user/tenant基本信息,tenant管理;

为了能够理解Openstack的认证服务,我们必须了解如下概念:

  • 租户:用于组成或隔离资源的容器,租户会组成或隔离身份对象。一个租户会映射到一个客户,一个账户,一个组织或一个项目。

  • 用户: 如果租户映射到单位,那么用户就是单位中的人,身份认证服务会验证那些生成调用的用户发过来的请求,用户登录且被赋予令牌以访问资源。

  • 凭证:用户身份的确认数据,例如,用户名和密码,用户名和API密钥,或者是一个有身份服务提供的授权令牌。

  • 认证: 确认用户身份的流程,OpenStack身份服务确认过来的请求,即验证由用户提供的凭证。
    这些凭证通常是用户名和密码,或者是用户名和API密钥。当用户的凭证被验证通过,OpenStack身份服务给他一个认证令牌,令牌可以为用户提供随后的请求。

  • 令牌:一个字母数字混合的文本字符串,用户访问OpenStack API和资源,令牌可以随时撤销,以及有一定的时间期限。在Keystone中Token有两种格式PKI 、UUID

  • 服务:计算Nova、存储Swift、镜像管理Glance等都是Openstack中的服务,一个服务能提供一个或多个端点供用户访问

  • 端点:一个当用户访问服务时用到的可访问的网络地址,通常是一个URL地址。如果用户为模板而使用扩展,一个端点可以被创建,它表示模板是为所有可用的跨region的可消费的服务。

  • 角色:定义了一组用户权限的用户,可赋予其执行某些特定的操作。
    在身份服务中,一个令牌所携带用户信息包含了角色列表。服务在被调用是会看用户是什么样的角色,这个角色赋予的权限能够操作什么资源。

下图展示Keystone认证流程 :

配置数据库

登陆控制节点,使用mysql客户端连接数据库,用户名root,密码123456

mysql -u root -p 123456

创建keystone数据库

create database keystone;

为keystone用户授予本地与远程登陆时的所有权限

grant all privileges on keystone.* to 'keystone'@'%' identified by '123456';
grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123456';

安装依赖

安装相关依赖

yum install -y python-pip git python-setuptools gettext python-virtualenv python-lxml python-greenlet-devel python-ldap sqlite-devel openldap-devel python-devel libxslt-devel openssl-devel libffi-devel

安装开发包

yum group install "Development Tools"

升级到最新的pip

pip install --upgrade pip

安装keystoneclient等

  • 安装keystoneclient
git clone git://git.openstack.org/openstack/python-keystoneclient
cd python-keystoneclient
pip install -r requirements.txt 
pip install -r test-requirements.txt 
python setup.py install && cd ..
  • 安装keystonemiddleware
git clone git://git.openstack.org/openstack/keystonemiddleware
cd keystonemiddleware
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
  • 安装python-glanceclient
git clone git://git.openstack.org/openstack/python-glanceclient
cd python-glanceclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
  • 安装python-novaclient
git clone git://git.openstack.org/openstack/python-novaclient
cd python-novaclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
  • 安装python-cinderclient
git clone git://git.openstack.org/openstack/python-cinderclient
cd python-cinderclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
  • 安装python-neutronclient
git clone git://git.openstack.org/openstack/python-neutronclient
cd python-neutronclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
  • 安装python-openstackclient
git clone git://git.openstack.org/openstack/python-openstackclient
cd python-openstackclient/
pip install -r requirements.txt
pip install -r test-requirements.txt 
python setup.py install && cd ..

安装keystone

git clone git://git.openstack.org/openstack/keystone
cd keystone
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install

配置keystontone

  • 新建/etc/keystone文件夹,
mkdir -p /etc/keystone

将在第4步时从github中克隆过来的keystone/etc文件夹的配置文件拷贝到/etc/keystone文件夹,然后在/etc/keystone中将keystone.conf.example复制一份为keystone.conf,相关命令如下

cd ./etc
cp * /etc/keystone
cd /etc/keystone
cp keystone.conf.sample keystone.conf
  • 编辑 /etc/keystone/keystone.conf ,并完成下列操作:

首先,若/var/log/keystone文件夹不存在,则新建

mkdir -p /var/log/keystone

并且将其改为keystone用户 keystone用户组,若keystone用户不存在,则创建

useradd keystone
chown keystone:keystone -R /var/log/keystone

在 [DEFAULT] 段中,对管理员令牌进行配置,配置log_file

[DEFAULT] 
... 
admin_token = ADMIN_TOKEN 
...
 log_file = /var/log/keystone/keystone.log

为了安全起见,使用openssl rand -hex 10命令生产一个随机数代替ADMIN_TOKEN

在 [database] 段,配置数据库访问相关参数:

[database]
...
connection = mysql://keystone:KEYSTONE_DBPASS@控制器/keystone

将 KEYSTONE_DBPASS 替换为实际的数据库用户的密码。

在 [memcache] 部分,配置Memcache服务:

[memcache]
...
servers = localhost:11211

在 [token] 部分,设置 UUID 令牌的提供者和 Memcached 驱动:

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

在 [revoke] 部分,配置 SQL 的撤回驱动:

[revoke]
...
driver = keystone.contrib.revoke.backends.sql.Revoke

(可选配置)可以在 [DEFAULT] 段中开启详细日志配置,为后期的故障排除提供帮助

[DEFAULT]
...
verbose = True

运行命令grep ‘^[a-z]’ /etc/keystone/keystone.conf的结果为

[root@localhost keystone]# grep '^[a-z]' /etc/keystone/keystone.conf
admin_token = ADMIN_TOKEN
verbose = true
log_file = /var/log/keystone.log
connection = mysql://keystone:123456@controller/keystone
servers = localhost:11211
driver = keystone.contrib.revoke.backends.sql.Revoke
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.memcache.Token

其中ADMIN_TOKEN为用户自己的值

  • 新建keystone用户,然后初始化keystone数据库

初始化keystone数据库

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

输入如下命令应该能查看数据库中的表项

mysql -h controller -ukeystone -p123456 -e 'use keystone;show tables'

查看的结果如下

+------------------------+
| Tables_in_keystone     |
+------------------------+
| access_token           |
| assignment             |
| config_register        |
| consumer               |
| credential             |
| domain                 |
| endpoint               |
| endpoint_group         |
| federation_protocol    |
| group                  |
| id_mapping             |
| identity_provider      |
| idp_remote_ids         |
| mapping                |
| migrate_version        |
| policy                 |
| policy_association     |
| project                |
| project_endpoint       |
| project_endpoint_group |
| region                 |
| request_token          |
| revocation_event       |
| role                   |
| sensitive_config       |
| service                |
| service_provider       |
| token                  |
| trust                  |
| trust_role             |
| user                   |
| user_group_membership  |
| whitelisted_config     |
+------------------------+

安装配置 Apache HTTP 服务器

若没有http服务器,则安装

yum install -y httpd

若没有安装Python在apache服务器中的WSGI接口,则安装mod_wsgi.x86_64

yum -y install mod_wsgi

编辑/etc/httpd/conf/httpd.conf 文件,参考控制节点配置ServerName 选项:

ServerName controller

使用以下内容创建文件/etc/httpd/conf.d/wsgi-keystone.conf

Listen 5000
Listen 35357


    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /var/www/cgi-bin/keystone/main
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    LogLevel info
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined



    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    LogLevel info
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

创建WSGI组件的目录结构;

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

从上游仓库拷贝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

调整这个目录及其中文件的所有者和权限:

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

完成安装,重启Apache HTTP服务器

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

Was this helpful?

0 / 0

发表回复 0