OpenStack之安装和配置Keystone

OpenStack Keystone

Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。

它有两个功能:

(1)用户管理:验证用户身份信息合法性
(2)服务目录管理:提供各个服务目录的(Service Catalog:包括service和endpoint)服务,无论任何服务或者客户访问openstack都要访问keystone获取服务列表,以及每个服务的endpoint

Keystone基本概念介绍

1.user:User即用户,指的是使用openstack service的用户,可以是人,服务,系统,就是说只要是访问openstack service 的对象都可以称为User

2.Credentials:是用于确认用户身份的凭证。说白了就是“信物”,可以是:
这里写图片描述
(1):用户名和密码

(2):用户名跟API Kye(秘钥)              #(1)(2)用户第一次确认身份的方法

(3):一个keystone分配的身份的token           #(3)用户已经确认身份后的方法 (token是有时间限制的)

3.Auhentication

    (1):用户身份验证的过程。keystone服务通过检查用户的Credentials来确定用户的身份

    (2):第一次验证身份是使用用户名与密码或者用户名与API Key的形式。当用户的Credentials被验证后,keystone会给用户分配一个Authentication token 供该用户的后续请求操作(返回的token中就包含User的Role列表)
    
4.Token

    (1):是一串数字字符串,当用户访问资源时需要使用的东西,在keystone中主要是引入令牌机制来保护用户对资源的访问,同时引入PKI、PKIZ、fernet、UUID其中一个随机加密产生一串数字,对令牌加以保护

5.Role

    (1):本身是一堆ACL集合,主要用于权限的划分。

    (2):可以给User指定Role,是user获得role对应的操作权限。

    (3):系统默认使用管理Role的角色 管理员用户:admin 普通用户:member(老版本) user(新版本)

    (5):user验证的时候必须带有Project。老版本叫(Tenant)

6.Policy

    (1):对于keystone service 来说,Policy就是一个JSON文件,rpm安装默认是在/etc/keyston/policy.json。通过配置这个文件,keystone实现了对User基于Role的权限管理(User <– Role(ACL) <–Policy)

    (2):Policy就是用来控制User对Project(tenant)中资源的操作权限
7.Project(Tenant)

    (1):Project(Tenant)是一个人或服务所拥有的资源集合。不同的Project之间资源是隔离的,资源可以设置配额

    (2):Project(Tenant)中可以有多个User,每一个User会根据权限的划分来使用Project(Tenant)中的资源

    (3):User在使用Project(Tenant)的资源前,必须要与这个Project关联,并且制定User在Project下的Role,一个assignment(关联) 即:Project-User-Role
    
8.Service 

    即服务,如Nova,Glace,等各个组件

9.Endpoint:

    (1):用来通过访问和定位某个openstack service的地址,通常是一个URL

    (2):不同的region有不同的Endpoint

    (3):任何服务都访问openstack service中的资源时,都要访问keystone

    (4):Endpoint分为三类:

      1.admin url —>管理员用户使用 Port:35357

      2.internal url —>openstack内部组件间互相通信 Port:5000 (组件之间通信基于Restful api)

      3.public url —> 其他用户访问地址 Port:5000

10.Service与Endpoint关系

    (1):在openstack中,每一个service中都有三种Endpoint:Admin、Public、Internal(创建完service后需要为其创建API Endpoint)

    (2):Admin使用者为管理员,能够修改User Project(Tenant)

    (3):public使用者为客户端,使用者在外网管理自己云服务器

    (4):internal使用者为内部组件间相互调用

    (5):三种Endpoint在网络上开放的权限也不同,Admin通常只能对内网开放,public通常可以对外网开放,internal只能对有安装openstack服务的机器开放

11.V3版本更新

    1.Tenant更改为Project

    2.添加了Domain(对系统资源进行限额)

    3.添加了Group (组的概念为了更好的管理用户,例如linux下对组授权,其组下面的用户也有了相应的权限)

    4.member更改为user

将上面各个部分结合起来。

    比如说,某公司年会组织跟团去旅游(公司相当于一个group,公司的员工相当于User)。到了晚上要住店,首先要先到前台登记(前台就相当于Keystone),对前台(keystone)来说,你要住店要拿出你的证明(对keystone来说就是要证明你是你)。

    怎么办?拿出身份证,这里的身份证就相当于Credentials(用户名和密码),前台(keystone)会进行验证你的身份信息(Authentication),验证成功后,前台(Keystone)会给你一个房卡(Token),并且有不同的房卡(比如:普通卡,会员卡,白金卡等),不同的卡有不同的权限(Role),并且拿到房卡后,前台(keystone)会给你一个导航图(Endpoint)让你找到你的房间。并且一个酒店不光会有住宿服务,可能还有别的服务(service),像餐饮,娱乐,按摩等等,比如说要去吃饭,不知道路线怎么走,看一下导航图(endpoint)就知道了,到餐饮部门(service)会有三个路线(Endpoint)可以走。为什么会有三个,领导层通道 –> 走后门(admin),内部员工通道 –>(internal),客人通道 –>(public)。知道如何去,也有了权限(Token/Role)到了餐饮部门,当你点餐的时候,会让你刷上你的会员卡(这个步骤就是service像keystone确认你有没有权限),验证成功后,你就可以点餐吃饭。
工作流程。
这里写图片描述
这样就很好理解了。
以上参考:http://www.cnblogs.com/charles1ee/p/6293387.html

下面安装和配置 Identity service(身份服务)keystone

安装和配置 Identity service(身份服务)keystone
本章节介绍在 Controller node(管理节点)安装和配置身份服务。
先决条件
在安装配置 OpenStack 身份服务前,你必须创建一个数据库和管理员令牌。
1. 创建数据库,并完成下列操作
A. 使用数据库命令行客户端,以 root 身份登录数据库服务器

# mysql -u root -p123
这里写图片描述
B. 创建 keystone 数据库
MariaDB [(none)]> CREATE DATABASE keystone;
这里写图片描述
C. 授予数据库用户 keystone 访问 keystone 数据库的权限。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ IDENTIFIED BY ‘123’;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘123’;
这里写图片描述
这里写图片描述
替换 123 为一个合适的密码。

安装并配置组件
1. 安装软件包

# yum install openstack-keystone httpd mod_wsgi –y
这里写图片描述
这里写图片描述

  1. 编辑/etc/keystone/keystone.conf 文件并完成下列操作:
    注:
    默认配置文件在各发行版本中可能不同。你可能需要添加这些部分和选项而不是修改已经存在的部分和选项。另外,在配置片段中的省略号(…)表示默认的配置选项你应该保留。
    A. 在[database]小节,配置数据库访问:

[database]
# …
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
这里写图片描述
注:替换 KEYSTONE_DBPASS 为合适的密码。

B. 在[token]小节,配置使用 Fernet 技术提供令牌。

[token]
# …
provider = fernet
这里写图片描述
3. 初始化身份服务数据库:

# su -s /bin/sh -c “keystone-manage db_sync” keystone
这里写图片描述
4. 初始化 Fernet key 仓库:

# keystone-manage fernet_setup –keystone-user keystone –keystone-group keystone
# keystone-manage credential_setup –keystone-user keystone –keystone-group keystone
这里写图片描述
5. 引导身份服务,创建管理员。

# keystone-manage bootstrap –bootstrap-password 123 \
–bootstrap-admin-url http://controller:35357/v3/ \
–bootstrap-internal-url http://controller:5000/v3/ \
–bootstrap-public-url http://controller:5000/v3/ \
–bootstrap-region-id RegionOne
这里写图片描述
替换 ADMIN_PASS 为合适的密码。
配置 Apache HTTP 服务
1. 编辑/etc/httpd/conf/httpd.conf 文件并配置 ServerName 配置项
为管理节点的主机名:
ServerName controller
这里写图片描述
2. 创建到文件/usr/share/keystone/wsgi-keystone.conf 的链接:

# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
这里写图片描述
完成安装
1. 启动 Apache HTTP 服务并设置开机自动启动:

# systemctl enable httpd.service

# systemctl start httpd.service
这里写图片描述
2. 配置管理账号
# export OS_USERNAME=admin

# export OS_PASSWORD=ADMIN_PASS

# export OS_PROJECT_NAME=admin

# export OS_USER_DOMAIN_NAME=Default

# export OS_PROJECT_DOMAIN_NAME=Default

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

# export OS_IDENTITY_API_VERSION=3
这里写图片描述
配置 ADMIN_PASS 为 keystone-manage bootstrap 命令中使用的密码
创建域,项目,用户和角色
身份服务为每一个 OpenStack 服务提供认证服务。认证服务使用一个 domain(域),projects(项目(tenants(租户))),users(用户)和roles(角色)的组合。
1. 在 openstack 环境中创建一个包含其他服务唯一账号的 service 项目,创建 service 项目:

# openstack project create –domain default –description “Service Project” service
这里写图片描述
2. 日常(非管理员)任务一般使用一个非特权项目和用户。在本手册中,创建 demo 项目和用户:
A. 创建 demo 项目:

# openstack project create –domain default –description “Demo Project” demo
这里写图片描述

B. 创建 demo 用户:

# openstack user create –domain default –password-prompt demo
这里写图片描述
C. 创建 user 角色:

# openstack role create user
这里写图片描述
D. 添加 user 角色到 demo 项目和用户:

# 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. 删除临时环境变量 OS_AUTH_URL 和 OS_PASSWORD:

# unset OS_AUTH_URL OS_PASSWORD
这里写图片描述
3. 使用 admin 用户,请求认证令牌

# openstack –os-auth-url http://controller:35357/v3 –os-project-domain-name default –os-user-domain-name default –os-project-name admin –os-username admin token issue
这里写图片描述
4. 使用 demo 用户,请求认证令牌:

# openstack –os-auth-url http://controller:5000/v3 –os-project-domain-name default –os-user-domain-name default –os-project-name demo –os-username demo token issue
这里写图片描述
创建 OpenStack 客户端环境脚本
为 admin 和 demo 项目和用户创建客户端环境脚本。本手册后续部分将使用这些脚本加载用户凭据。
1. 编辑 admin-openrc 文件,并添加下列内容:

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
这里写图片描述
替换 ADMIN_PASS 为身份服务中 admin 用户的密码。
2. 编辑 demo-openrc 文件,并添加下列内容:

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
这里写图片描述
替换 DEMO_PASS 为身份服务中 demo 用户的密码。
使用脚本
1. 加载 admin-openrc 文件用来填充身份服务中 admin 项目和用户的
用户凭据到环境变量:

# . admin-openrc

  1. 请求认证令牌

# openstack token issue
这里写图片描述
中间可能会出现一些错误,比如说:
1.Missing value auth-url required for auth plugin password
2.The request you have made requires authentication. (HTTP 401) (Request-ID: req-fa28c870-79e5-48f3-aa72-a7b25057d157)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值