OpenStack核心组件原理与应用之Keystone

认证服务介绍

OpenStack核心组件原理与应用一文中,我们介绍了OpenStack的架构及安装前的准备工作,这篇我们来完成 OpenStack 第一个服务——认证服务的部署。
上篇“服务与项目名称对照表”中,认证服务的 Service 名字为“Identity Service”,项目名称为“Keystone”,主要功能是为 OpenStack 集群中的其他组件提供认证和授权服务。它能列出所有 OpenStack 服务的端点目录。其它服务将身份认证服务当做通用的统一 API 来使用,所以 Identity Service 是需要最先部署的组件。为了从 Identity Service 服务中获益,其他的 OpenStack 服务需要与它合作。当某个 OpenStack 服务收到来自用户的请求时,该服务询问 Identity 服务,验证该用户是否有权限进行此次请求。

Identity Service 包含的组件:

  • 服务器:一个中心化的服务器使用 RESTful 接口来提供认证和授权服务。
  • 驱动:驱动或服务后端被整合进集中式服务器中。它们被用来访问 OpenStack 外部仓库的身份信息, 并且它们可能已经存在于 OpenStack 被部署在的基础设施(例如,上篇中已经安装的 MariaDB 数据库或 LDAP 服务器)中。
  • 模块:中间件模块运行于使用身份认证服务的 OpenStack 组件的地址空间中。这些模块拦截服务请求,取出用户凭据,并将它们送入中央服务器寻求授权。中间件模块和OpenStack组件间的整合使用 Python Web 服务器网关接口。

当安装 OpenStack 身份服务,用户必须将之注册到其 OpenStack 安装环境的每个服务,身份服务才可以追踪那些已经在 OpenStack 中安装的服务,并在网络中定位它们。

安装和配置

这一章描述如何在控制节点上安装和配置 OpenStack 身份认证服务,代码名称为 keystone,以下操作均在控制节点上完成。出于性能原因,这里配置部署 Fernet 令牌和 Apache HTTP 服务处理请求。
在配置 OpenStack 身份认证服务前,必须创建一个数据库和管理员令牌。
1.创建数据库:

[[email protected] ~]# mysql -u root -p
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone‘@‘localhost‘ IDENTIFIED BY ‘KEYSTONE_DBPASS‘;    #将KEYSTONE_DBPASS改为数据库的真实密码,以下也是。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone‘@‘%‘ IDENTIFIED BY ‘KEYSTONE_DBPASS‘;
MariaDB [(none)]> flush privileges;

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

[[email protected] ~]# openssl rand -hex 10

3.安装并配置组件

[[email protected] ~]# yum -y install openstack-keystone httpd mod_wsgi
[[email protected] ~]# vim /etc/keystone/keystone.conf
[DEFAULT]
admin_token = ADMIN_TOKEN   #openssl rand –hex 10 命令生成的随机值
[database]
connection = mysql+pymysql://keystone:[email protected]/keystone
[token]  #配置Fernet UUID令牌的提供者
provider = fernet
[[email protected] ~]# su –s /bin/sh –C “keystone-manage db_sync” keystone #初始化身份认证服务的数据库,可以通过 tail -f /var/log/keystone/keystone.log 查看初始化日志
[[email protected] ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone  #初始化Fernet keys

4.配置 HTTP 服务

[[email protected] ~]# vim /etc/httpd/conf/httpd.conf
ServerName ct1.vtlab.io
[[email protected] ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

#启动服务
[[email protected] ~]# systemctl enable httpd.service
[[email protected] ~]# systemctl start httpd.service

5.创建服务实体和API端点
身份认证服务提供其他服务的目录和位置。每个添加到 OpenStack 中的服务在目录中需要一个 service 实体和一些 API endpoints 。
默认情况下,身份认证服务数据库不包含支持传统认证和目录服务的信息。你必须为身份认证服务创建的临时身份验证令牌用来初始化服务实体和API端点。
你必须使用 "--os-token" 参数将认证令牌的值传递给:command:openstack 命令。类似的,你必须使用"--os-url" 参数将身份认证服务的 URL传递给 OpenStack 命令或者设置OS_URL环境变量。本指南使用环境变量以缩短命令行的长度。
a.设置令牌环

[[email protected] ~]# export OS_TOKEN=ADMIN_TOKEN
#将ADMIN_TOKEN换为之前生成的认证令牌,例如:
[[email protected] ~]# export OS_TOKEN=294a4c8a8a475f9b9836

b.配置端点URL

[[email protected] ~]# export OS_URL=http://ct1.vtlab.io:35357/v3

c.配置认证 API 版本

[[email protected] ~]# export OS_IDENTITY_API_VERSION=3

d.创建服务实体,在OpenStack 环境中,认证服务管理服务目录。服务使用这个目录来决定环境中的可用服务

[[email protected] ~]# openstack service create --name keystone --description "OpenStack Identity" identity

e.创建认证服务的API端点,身份认证服务管理了与整个环境相关的 API 端点和目录。服务使用这个目录来决定如何与环境中的其他服务进行通信。
API 端点有三种:admin、internal、public
默认情况下,admin api 端点允许修改用户和租户,public 和 internal api 不允许这些操作。

[[email protected] ~]# openstack endpoint create --region RegionOne identity public http://ct1.vtlab.io:5000/v3
[[email protected] ~]# openstack endpoint create --region RegionOne identity internal http://ct1.vtlab.io:5000/v3
[[email protected] ~]# openstack endpoint create --region RegionOne identity admin http://ct1.vtlab.io:35357/v3

每个添加到OpenStack环境中的服务要求一个或多个服务实体和三个认证服务中的API 端点。

6.创建域、项目、用户和角色
a.创建域 "default"

[[email protected] ~]# openstack domain create --description "Default Domain" default

b.为进行管理操作,创建 admin 项目、用户和角色

[[email protected] ~]# openstack project create --domain default --description "Admin Project" admin
[[email protected] ~]# openstack user create --domain default --password-prompt admin
[[email protected] ~]# openstack role create admin
#添加admin角色到admin项目和用户上。
[[email protected] ~]# openstack role add --project admin --user admin admin

创建的任何角色必须映射到每个OpenStack服务配置文件目录下的"policy.json" 文件中。默认策略是给予"admin"角色大部分服务的管理访问权限。
示例:
本示例演示每个服务都包含的独有的service项目。创建 service项目:

[[email protected] ~]# openstack project create --domain default --description "Service Project" service

常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户:

a. 创建demo项目:

[[email protected] ~]# openstack project create --domain default --description "Demo Project" demo

b. 创建demo用户:

[[email protected] ~]# openstack user create --domain default --password-prompt demo

c. 创建 user 角色:

[[email protected] ~]# openstack role create user

d. 添加 user 角色到demo项目和用户:

[[email protected] ~]# openstack role add --project demo --user demo user

验证

在安装其他服务前,需要确认身份认证服务已正常运行。
在控制节点上执行如下命令:

  1. 因为安全性的原因,关闭临时认证令牌机制:
    编辑 /etc/keystone/keystone-paste.ini 文件,从[pipeline:public_api]、[pipeline:admin_api]、[pipeline:api_v3]部分删除 token_auth 字段。
  2. 重置 OS_TOKEN 和 OS_URL 环境变量
    [[email protected] ~]# unset OS_TOKEN OS_URL
  3. 作为 admin 用户请求认证令牌:
    [[email protected] ~]# openstack --os-auth-url http://ct1.vtlab.io:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
  4. 作为 demo用户请求认证令牌:
    [[email protected] ~]# openstack --os-auth-url http://ct1.vtlab.io:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue

使用5000的API端口,只允许对身份认证服务API的常规访问,不能进行管理操作

创建OpenStack客户端环境脚本

前一节中使用环境变量和命令选项的组合通过 "openstack" 客户端与身份认证服务交互。为了提升客户端操作的效率,OpenStack 支持简单的客户端环境变量脚本即 OpenRC 文件。这些脚本通常包含客户端所有常见的选项,当然也支持独特的选项。更多信息,请参考: https://docs.openstack.org/queens/user/
创建 admin、demo 项目和用户客户端环境变量脚本。本指南接下来会引用这些脚本为客户端操作加载合适的的凭证。

[[email protected] ~]# vim 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://ct1.vtlab.io:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
#将 ADMIN_PASS替换为认证服务中为admin用户设置的密码
[[email protected] ~]# vim 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://ct1.vtlab.io:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
#将DEMO_PASS替换为认证服务中为demo用户设置的密码

加载环境变量脚本:
使用特定租户和用户运行客户端,你可以在运行之前简单地加载相关客户端脚本:

  1. 加载 admin-openrc文件来配置身份认证服务的环境变量和 admin项目及用户证书:

    [[email protected] ~]# source admin-openrc  #或者 . admin-openrc
  2. 请求认证令牌:
    [[email protected] ~]# openstack token issue

下期预告

认证服务 Keystone 的部署及基础应用已经介绍完了,下期来创建我们的镜像服务。

原文地址:http://blog.51cto.com/weiwendi/2162429

时间: 2024-07-31 14:36:00

OpenStack核心组件原理与应用之Keystone的相关文章

OpenStack核心组件原理与应用一

开头语 前段时间对公司测试环境进行了重构,将虚拟化技术从KVM改为了OpenStack集群,并结合了CEPH存储.目前整个集群承担着Dev和测试环境的运行,以及公司内部服务,如Wiki,Git等,目前已稳定运行了一段时间.在部署的整个过程以及使用的这段时间,产生了一些心得也积累了些经验,想分享给更多需要的朋友.考虑到OpenStack组件较多,一篇文章的篇幅不足以概括,所以会以系列专栏的形式呈现出来. OpenStack是什么? OpenStack 是一个适用于所有云环境.旨在实现简单.可扩展性

OpenStack核心组件原理与应用之Glance

概览 OpenStack 镜像服务 Glance 是 IaaS(Infrastructure as a Service,基础设施即服务)的核心服务.允许用户发现.注册和获取虚拟机镜像.它提供了一个 Rest API,允许您查询虚拟机镜像的元数据,并获取镜像.您可以将镜像存储在任何位置,比如文件系统.对象存储,我们采用Ceph集群进行存储. Glance包括以下组件: glance-api:接收API调用,实现镜像发现.恢复.存储等功能. glance-registry:存储.处理和恢复镜像的元数

OpenStack入门之核心组件梳理(1)——Keystone篇

OpenStack入门之核心组件梳理(1)--Keystone篇 前言 ? 先前的文章中笔者从整体上介绍了有关OpenStack相关内容,包括:概念.主要组件及项目.部署节点类型以及整体架构.那么从本文开始我们将介绍有关OpenStack核心项目的理论知识,逐一详细介绍各个服务项目. ? 友情链接:下面的三篇文章对于初学者或多或少可以帮你在宏观上了解云计算以及OpenStack. ? 云计算浅谈 ? OpenStack概念以及核心组件概述 ? OpenStack部署节点类型和架构 ? 那么,首先

OpenStack核心组件-keystone

1. Keystone介绍 keystone是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等等.云环境中所有的服务之间的授权和认证都需要经过 keystone. 因此 keystone 是云平台中第一个即需要安装的服务. 作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情: ?   管理用户及其权限 ?    维护 OpenStack Services 的 Endp

OpenStack总体架构概览&amp;OpenStack核心组件介绍

下面个是51CTO上一位朋友发布的O版OpenStack核心组件说明,总结的非常到位,所以我就不再造轮子了.~,~ https://down.51cto.com/data/2448945 私有云 公有云 混合云 IaaS(基础架构即服务):OpenStack,CloudStack PaaS(平台即服务):Docker,Openshift SaaS(服务即服务):主要面对终端用户,可通过一个浏览器就可以实现使用任何应用,而无需安装. DBaaS(Database as a Service) FWa

Oracle VM + centos7.1+openstack kilo 多结点安装教程---keystone的安装(3)

声明:最近在进行openstack的kilo版本的安装,发现现有的网络教程非常少,而且多数教程并不能安装成功,故写此教程.openstack的安装较为复杂,本教程并不能保证在不同环境下也能将其安装成功.个人安装教程,也难免出错.同时,安装是在虚拟机环境下,真实安装环境需要进行更改. 转载请声明出处: 作者:张某人ER 原文链接:http://blog.csdn.net/xinxing__8185/article/details/51191337 第二部分 keystone的安装 (3) open

《2》CentOS7.0+OpenStack+kvm云平台部署—配置Keystone

(1).安装KeyStone服务: [[email protected]~]# yum -y install openstack-keystone (2).创建keystone数据库,修改配置文件中的数据库链接: [[email protected] ~]#  openstack-db--init --service keystone (3).修改配置文件中的数据库链接: [[email protected]~]#  openstack-config --set /etc/keystone/ke

openstack运维实战系列之keystone用户建立(一)

1. 前言 在生产环境中,使用openstack已经有1年多的时间了,苦于一直没有时间,加上工作带来的懒惰,一直迟迟没有对openstack方面的知识做个总结,趁着年底,把过去一年多在生产环境中所遇到的一些常见运维操作做个总结.需要说明的是,相关的操作,基本都建立在openstack的官方文档和帮助,所以最好的方式莫过于看官方文档,此处只作为抛砖引玉之用,望须知. 2. 关于keystone keystone是openstack中负责认证授权的服务,主要负责两方面的工作:1. 用户认证授权,2.

openstack学习(二):keystone配置以及使用

记录,方便查阅. 只需要在controller安装. 配置 keystone的信息保存在mysql数据库中,先创建数据库以及数据库用户. mysql -uroot -p123456 -e "create database keystone;grant all privileges on keystone.* to 'keystone'@'192.168.23.11' identified by 'keystone';grant all privileges on keystone.* to 'k