安装与配置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-keystoneclientcd python-keystoneclientpip install -r requirements.txt pip install -r test-requirements.txt python setup.py install && cd ..
  • 安装keystonemiddleware
git clone git://git.openstack.org/openstack/keystonemiddlewarecd keystonemiddlewarepip install -r requirements.txtpip install -r test-requirements.txtpython setup.py install && cd ..
  • 安装python-glanceclient
git clone git://git.openstack.org/openstack/python-glanceclientcd python-glanceclientpip install -r requirements.txtpip install -r test-requirements.txtpython setup.py install && cd ..
  • 安装python-novaclient
git clone git://git.openstack.org/openstack/python-novaclientcd python-novaclientpip install -r requirements.txtpip install -r test-requirements.txtpython setup.py install && cd ..
  • 安装python-cinderclient
git clone git://git.openstack.org/openstack/python-cinderclientcd python-cinderclientpip install -r requirements.txtpip install -r test-requirements.txtpython setup.py install && cd ..
  • 安装python-neutronclient
git clone git://git.openstack.org/openstack/python-neutronclientcd python-neutronclientpip install -r requirements.txtpip install -r test-requirements.txtpython setup.py install && cd ..
  • 安装python-openstackclient
git clone git://git.openstack.org/openstack/python-openstackclientcd python-openstackclient/pip install -r requirements.txtpip install -r test-requirements.txt python setup.py install && cd ..

安装keystone

git clone git://git.openstack.org/openstack/keystonecd keystonepip install -r requirements.txtpip install -r test-requirements.txtpython setup.py install

配置keystontone

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

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

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

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

mkdir -p /var/log/keystone

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

useradd keystonechown 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.Providerdriver = 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.confadmin_token = ADMIN_TOKENverbose = truelog_file = /var/log/keystone.logconnection = mysql://keystone:123456@controller/keystoneservers = localhost:11211driver = keystone.contrib.revoke.backends.sql.Revokeprovider = keystone.token.providers.uuid.Providerdriver = 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 5000Listen 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/keystonechmod 755 /var/www/cgi-bin/keystone/*

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

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

Was this helpful?

0 / 0

发表回复 0