您的位置:首页 > 运维架构

Openstack kilo指南安装与实践(3)

2015-11-22 19:58 288 查看

Openstack kilo指南安装与实践(3)

OpenStack的验证概念

OpenStack的验证服务执行有如下的功能:


跟踪用户及其权限。

提供一个拥有API端点的可用服务的目录。

当安装OpenStack验证服务时,你必须在你的OpenStack安装注册每一个服务。验证服务可以跟踪哪一个服务被安装和在网络中他们被安装在什么地方。

为了理解OpenStack的验证,你必须了解接下来的概念。

名词解释
User使用OpenStack云端服务的一个人或系统或服务的数字化表达。传入请求的身份验证生效是由用户提出请求时调用的。用户已经登录,可以分配令牌访问资源。用户可以直接分配给特定的租户,表现得好像他们是租户一样。
Credentials确认用户身份的数据。例如:用户名和密码,用户名和API键,或者授权的由身份验证服务生成的令牌
Authentication确认用户身份的过程。OpenStack验证确认传入的请求是通过验证由用户所提供的一系列有效验证凭据。这些凭证最初是通过密码和用户名或者用户名与API码。当用户证书生效时,OpenStack验证问题由后续请求的身份验证令牌的用户提供。
Token一个字符-数字组成的字符串用来访问OpenStack API和资源。一个令牌可能随时撤销,有效期为一个有限的时间。虽然OpenStack身份验证支持基于令牌的身份验证在本版本中,其目的是为了在未来支持额外的协议。其主要目的是集成服务,而不是渴望成为一个成熟的身份存储和管理解决方案。
Tenant一个容器用于组织或孤立的资源。租户还组或隔离标识对象。根据服务运营商,租户可以映射到一个客户,账户,组织,或项目。
ServiceOpenStack服务,如计算(nova),对象存储(swift),或镜像服务(glance)。它提供了一个或多个端点的用户可以访问资源和执行操作。
Endpoint你可以访问服务的一个可访问网络的地址,通常一个URL地址。如果你使用一个扩展模板,模板可以创建一个端点,它代表了模板的所有可用的可消费的服务区域。
Role一个人物有一组定义的用户权利和特权来执行特定的操作。在标识服务,令牌发给用户包括角色的列表。被用户调用的服务决定他们如何与一组角色交流和每个角色允许的操作和资源访问权。
Keystone ClientOpenStack身份的命令行接口API。例如,用户可以运行keystone service-create和* keystone endpoint-create*命令在其OpenStack安装注册服务。
接下来的图表展示了OpenStack验证过程的流程:



安装和配置

本节介绍如何在控制节点上安装和配置OpenStack标识服务,代号为keystone。为了更好的性能,这个配置部署Apache HTTP服务器处理请求和分布式去存储令牌而不是采用SQL数据库。


配置预备知识

在你配置OpenStack的身份验证之前,你必须创建一个数据库和管理员令牌。


1.为了创建数据库,完成以下步骤:

a.使用数据库访问客户端去连接数据库服务以root用户身份:

mysql -u root -p

b.创建Keystone数据库:

CREATE DATABASE keystone;

c.对keystone数据库授予合适的访问控制:

GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ \

IDENTIFIED BY ‘KEYSTONE_DBPASS’;

GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ \

IDENTIFIED BY ‘KEYSTONE_DBPASS’;

用合适的密码去替换KEYSTONE_DBPASS。

d.编辑数据库访问客户端

2.生成一个随机值作为管理令牌在初始配置:

openssl rand -hex 10

安装和配置身份验证的组件

笔记

默认的配置文件因为版本的不同而不同。您可能需要添加这些部分和选项而不是修改现有的部分和选项。而且,一个省略号(…)在配置代码片段显示了你应该保留可能的默认配置选项。

笔记

在kilo,这个keystone项目反对Eventlet支持WSGI服务器。这个指南使用Apache的有mod_wsgi的HTTP服务器去服务keystone在端口5000和35357的请求。默认情况下,keystone服务依旧会监听端口5000和35357.因此这个指南不能使用keystone服务。

1.在安装完后,不能使keystone服务自动启动。

# echo “manual” > /etc/init/keystone.override

2.运行下面的命令行去安装下面的包:

# apt-get install keystone python-openstackclient apache2 libapache2-modwsgi memcached python-memcache

3.编辑/etc/keystone/keystone.conf文件完成接下来的步骤:

a.在[DEFAULT]的部分中,定义初始化管理员令牌的值:

[DEFAULT]



admin_token = ADMIN_TOKEN

用你刚刚前面步骤生成的随机值去取代ADMIN_TOKEN

b.在[database]的部分中,配置数据库访问:

[database]



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

使用你选择的数据库的密码去替换KEYSTONE_DAPASS

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

[memcache]



servers = localhost:11211

d.在[token]部分,配置UUID令牌提供者和Memcached驱动:

[token]



provider = keystone.token.providers.uuid.Provider

driver = keystone.token.persistence.backends.memcache.Token

e.在[revoke]部分,配置SQL revocation驱动:

[revoke]



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

f.(可选择的)为了协助故障排除,在[DEFAULT]部分是verbose可以登记:

[DEFAULT]



verbose = True

4.Populate the Identity service database:

# su -s /bin/sh -c “keystone-manage db_sync” keystone

配置Apache HTTP服务器

1.编辑/etc/apache2/apache2.conf文件和配置ServerName 引用控制节点:

ServerName controller

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>

< VirtualHost *:35357>

WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone

display-name=%{GROUP}

WSGIProcessGroup keystone-admin

WSGIScriptAlias / /var/www/cgi-bin/keystone/admin

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>

PS:< /VirtualHost>由于CSDN博客的原因,我还没找到如何使得< 与其后文字不用空格隔开无法显示的解决办法,所以有< 的地方,麻烦如果复制的话,请把空格去掉。

3.启用虚拟hosts的验证服务:

# 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/*

完成安装

1.重启Apache HTTP服务:

# service apache2 restart

2.默认情况下,ubuntu的包会创建一个SQLite的数据库。

因为这个配置使用了SQL数据库的服务器,你可以移除SQLite数据库文件:

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

创建服务实体和API端点

这个验证服务提供了服务和他们所在位置的目录。每一个你添加到你的OpenStack环境的服务需要一个服务实体和服务的API端点在这个目录中。


配置预备知识

默认情况下,身份服务的数据库不包含有关于支持传统证明和目录服务的信息。你必须使用在前面"安装和配置"部分你所创建的临时可证明的令牌去为身份服务初始化服务的实体和API的端点。
你必须使把可证明令牌的值用--os-token参数或者设置OS_TOKEN环境变量传给openstack命令。相似的,你也必须把身份服务的URL值给openstack的命令行通过--os-url参数或者设置OS_URL环境变量。这个指南使用的环境变量去减少命令行的长度。


警告

为了安全起见,临时证明令牌不要长于初始化身份服务的所需要的长度。

1.配置证明令牌:

$ export OS_TOKEN=ADMIN_TOKEN

用在前面”安装与配置”生成的证明令牌替换ADMIN_TOKEN.例如:

$ export OS_TOKEN=294a4c8a8a475f9b9836

2.配置端点的URL:

$ export OS_URL=http://controller:35357/v2.0

创建服务实体和API端点

1.身份服务管理在你的OpenStack环境的服务目录。服务使用这个目录去决定其他服务在你的环境中有效。

为身份服务去创建服务实体:

$ openstack service create \

–name keystone –description “OpenStack Identity” identity



笔记

OpenStack动态地生成id,那么您将会看到不同的值的示例命令输出。

2.身份服务管理目录与服务相关的API端点在你的OpenStack环境中。服务使用这个目录来决定如何在您的环境中与其他服务交流。

OpenStack使用三个API端点-(管理,内部,和公共)对每个服务而不同。管理API端点在默认情况下允许修改用户和租户,然而公共和内部的API并不能做到。在生产环境中,多样化也许依据于为安全原因而服务不同的使用者的独立网络。例如,公共API以外的网络可能是可及的云管理工具,管理API网络可能受到保护,而内部API网络是连接到每台主机。此外,OpenStack支持可伸缩性的多个区域。为简单起见,本指南使用的是为所有节点变化的管理网络和默认RegionOne地区。

创建身份服务的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服务都需要一个或多个服务实体和一个API端点。

创建项目、使用者和角色

身份服务提供了身份证明服务对于每一个OpenStack的服务来说。这个身份证明服务使用一个项目、使用者和角色域的结合体。
>>笔记
>>>为了简单,这个指南隐式地使用default域。


创建租户,用户和角色

1.在你的环境中为了管理的操作去创建管理项目,使用者和角色

a.创建admin项目:

$ openstack project create –description “Admin Project” admin



笔记

OpenStack动态地生成id,那么您将会看到不同的值的示例命令输出。

b.创建admin用户:

$ openstack user create –password-prompt admin

User Password:

Repeat User Password:



c.创建admin角色:

$ openstack role create admin



d.添加admin角色:

$ openstack role add –project admin –user admin admin



笔记

你所创建的任何角色必须映射到在每一个OpenStack配置文件目录里的policy.json文件中的具体角色。这个默认的policy是对大多数服务授予管理的访问权限给admin角色的。对于更多的信息,看Operations Guide - Managing Projects and Users.

2.这个指南使用一个服务项目包含了对每一个你加入到你环境中的服务的唯一的使用者。

$ openstack project create –description “Service Project” service



3.常规(不是管理者)的任务一个使用费特权项目和使用者。作为一个例子,这个指南创建了一个demo项目和使用者。

a.创建一个demo项目:

$ openstack project create –description “Demo Project” demo



笔记

当为这个项目创建一个额外的使用者的时候,不要重复这个步骤

b.创建demo使用者:

$ openstack user create –password-prompt demo

User Password:

Repeat User Password:



c.创建使用者角色:

$ openstack role create user



d.把user角色加入到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环境变量:

$ unset OS_TOKEN OS_URL

3.作为管理用户,从令牌标识版本2.0 API请求身份验证:

$ openstack –os-auth-url http://controller:35357 \

–os-project-name admin –os-username admin –os-auth-type password \

token issue

Password:



笔记

这个命令需要admin用户的密码

4.标识版本3 API添加支持域包含项目和用户。项目和用户可以使用相同的名称在不同的域。因此,为了使用API版本3,请求必须显式地包含至少default域或使用id。为简单起见,本指南明确使用默认域,所以例子可以使用的名称,而不是id。

$ openstack –os-auth-url http://controller:35357 \

–os-project-domain-id default –os-user-domain-id default \

–os-project-name admin –os-username admin –os-auth-type password \

token issue

Password:



笔记

这个命令需要admin使用者的密码

5.作为管理用户,管理用户可以执行admin-only CLI命令的验证项目列表和包含在前面“创建项目,使用者,和角色”部分中创建的项目的身份服务。

$ openstack –os-auth-url http://controller:35357 \

–os-project-name admin –os-username admin –os-auth-type password \

project list

Password:



笔记

这个命令使用admin使用者的密码

6.作为管理用户,用户验证身份服务列表包含在“创建项目,用户和角色”部分中创建的用户。

$ openstack –os-auth-url http://controller:35357 \

–os-project-name admin –os-username admin –os-auth-type password \

user list

Password:



7.作为管理用户,用户验证身份服务列表包含在“创建项目,用户和角色”部分中创建的用户。

$ openstack –os-auth-url http://controller:35357 \

–os-project-name admin –os-username admin –os-auth-type password \

role list

Password:



笔记

这个命令需要admin用户的密码

8.作为demo用户,请求的身份验证令牌是来自于从身份3.0版本API获取的:

$ openstack –os-auth-url http://controller:5000 \

–os-project-domain-id default –os-user-domain-id default \

–os-project-name demo –os-username demo –os-auth-type password \

token issue

Password:



笔记

这个命令使用demo用户密码和5000端口的API,只允许普通(非管理)访问身份服务API。

9.作为演示用户,尝试列出确认的用户,那些它无法执行admin-only CLI命令:

$ openstack –os-auth-url http://controller:5000 \

–os-project-domain-id default –os-user-domain-id default \

–os-project-name demo –os-username demo –os-auth-type password \

user list

ERROR: openstack You are not authorized to perform the requested action,

admin_required. (HTTP 403)

创建OpenStack客户端运行环境脚本

前部分中使用环境变量的组合和命令选项与身份服务通过openstack客户机交互。为增加客户端操作效率,OpenStack支持简单的客户机环境脚本也称为OpenRC文件。这些脚本通常包含常见的选项对所有客户,但也支持独特的选择。有关更多信息,请参见OpenStack的用户指南

创建脚本

为用户管理和演示项目创建客户机环境脚本。未来本指南的部分参考这些脚本加载为客户端操作的适当的凭证。

1.编辑admin-openrc.sh文件并加入下面内容:

export OS_PROJECT_DOMAIN_ID=default

export OS_USER_DOMAIN_ID=default

export OS_PROJECT_NAME=admin

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=ADMIN_PASS

export OS_AUTH_URL=http://controller:35357/v3

ADMIN_PASS替换为在身份服务admin使用者的密码。

2.编辑demo-openrc.sh文件,并添加下面的内容:

export OS_PROJECT_DOMAIN_ID=default

export OS_USER_DOMAIN_ID=default

export OS_PROJECT_NAME=demo

export OS_TENANT_NAME=demo

export OS_USERNAME=demo

export OS_PASSWORD=DEMO_PASS

export OS_AUTH_URL=http://controller:5000/v3

你在身份服务中为demo用户选择的密码替换DEMO_PASS。

加载客户端环境的脚本

运行客户端作为一个特定的项目和用户,您可以简单地加载客户机环境相关的脚本之前运行。例如:

1.在身份服务的位置加载admin-openrc文件去修改环境变量和admin工程以及使用者证书。

$ source admin-openrc.sh

2.请求身份证明令牌:

$ openstack token issue



【笔者实践】

1.取得root权限:



我使用的数据库,设置密码是root,我在后面的密码都是用root。

2.创建keystone数据库:



3.授予权限:



信息生成如下:

tqw@ubuntu:~$ sudo su

[sudo] password for tqw:

root@ubuntu:/home/tqw# mysql -u root -p

Enter password:

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MariaDB connection id is 37

Server version: 5.5.44-MariaDB-1ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE keystone;

Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ IDENTIFIED BY ‘root’;

Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘root’;

Query OK, 0 rows affected (0.00 sec)

4.接着输入exit退出。

5.生成密钥:



root@ubuntu:/home/tqw# openssl rand -hex 10

54ed321d6b76e1ba93b4

接下来的步骤,我就不仔细说明了:

命令没有输入前:



输入命令:



命令输入后:



输入命令:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: