自:https://blog.51cto.com/weiwendi/2162429

认证服务介绍

在 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.创建数据库:

[root@ct1 ~]# 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.生成一个随机值在初始化的配置中作为管理员的令牌

[root@ct1 ~]# openssl rand -hex 10

3.安装并配置组件

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

4.配置 HTTP 服务

[root@ct1 ~]# vim /etc/httpd/conf/httpd.conf
ServerName ct1.vtlab.io
[root@ct1 ~]# 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-publicWSGIScriptAlias / /usr/bin/keystone-wsgi-publicWSGIApplicationGroup %{GLOBAL}WSGIPassAuthorization OnErrorLogFormat "%{cu}t %M"ErrorLog /var/log/httpd/keystone-error.logCustomLog /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-adminWSGIScriptAlias / /usr/bin/keystone-wsgi-adminWSGIApplicationGroup %{GLOBAL}WSGIPassAuthorization OnErrorLogFormat "%{cu}t %M"ErrorLog /var/log/httpd/keystone-error.logCustomLog /var/log/httpd/keystone-access.log combined<Directory /usr/bin>Require all granted</Directory>
</VirtualHost>#启动服务
[root@ct1 ~]# systemctl enable httpd.service
[root@ct1 ~]# systemctl start httpd.service

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

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

b.配置端点URL

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

c.配置认证 API 版本

[root@ct1 ~]# export OS_IDENTITY_API_VERSION=3

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

[root@ct1 ~]# openstack service create --name keystone --description "OpenStack Identity" identity

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

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

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

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

[root@ct1 ~]# openstack domain create --description "Default Domain" default

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

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

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

[root@ct1 ~]# openstack project create --domain default --description "Service Project" service

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

a. 创建demo项目:

[root@ct1 ~]# openstack project create --domain default --description "Demo Project" demo

b. 创建demo用户:

[root@ct1 ~]# openstack user create --domain default --password-prompt demo

c. 创建 user 角色:

[root@ct1 ~]# openstack role create user

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

[root@ct1 ~]# 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 环境变量
    [root@ct1 ~]# unset OS_TOKEN OS_URL
  3. 作为 admin 用户请求认证令牌:
    [root@ct1 ~]# 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用户请求认证令牌:
    [root@ct1 ~]# 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 项目和用户客户端环境变量脚本。本指南接下来会引用这些脚本为客户端操作加载合适的的凭证。

[root@ct1 ~]# 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用户设置的密码
[root@ct1 ~]# 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项目及用户证书:

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

下期预告

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

OpenStack核心组件原理与应用之Keystone相关推荐

  1. OpenStack核心组件原理与应用之Nova(未完待续)

    概览: 概览请查看:https://blog.csdn.net/dylloveyou/article/details/80698420 Nova(OpenStack Compute Service)是 ...

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

    概览 OpenStack 镜像服务 Glance 是 IaaS(Infrastructure as a Service,基础设施即服务)的核心服务.允许用户发现.注册和获取虚拟机镜像.它提供了一个 R ...

  3. OpenStack核心组件-glance镜像服务

    1. glance介绍 Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata ...

  4. Spring Cloud核心组件原理分析

    本文来分析下Spring Cloud架构的各个组件 文章目录 概述 Eureka Ribbon和Feign Hystrix Zuul Config 本文小结 概述 原理讲解前,先看一个最经典的业务场景 ...

  5. Openstack Swift 原理、架构与 API 介绍

    OpenStack Swift 开源项目提供了弹性可伸缩.高可用的分布式对象存储服务,适合存储大规模非结构化数据.本文将深入介绍 Swift 的基本设计原理.对称式的系统架构和 RESTful API ...

  6. 超详细Openstack核心组件——Placement部署

    目录 OpenStack-Placement组件部署 创建数据库实例和数据库用户 创建Placement服务用户和API的endpoint 总结 OpenStack-Placement组件部署 继之前 ...

  7. openstack核心组件-块存储 (Block Storage) : Cinder

    cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文件系统:或者 ...

  8. 超详细Openstack核心组件——cinder部署

    目录 OpenStack-cinder 组件部署 创建数据库实例和角色 创建用户.修改配置文件 在计算节点c2配置Cinder(存储节点) 验证,ct上查看卷列表 总结 OpenStack-cinde ...

  9. OpenStack核心组件

    OpenStack覆盖了网络.虚拟化.操作系统.服务器等各个方面.它是一个正在开发中的云计算平台项目,根据成熟及重要程度的不同,被分解成核心项目.孵化项目,以及支持项目和相关项目.每个项目都有自己的委 ...

最新文章

  1. configure_file路径疑惑
  2. malloc,calloc,realloc,free函数
  3. python读awx文件_ansible awx用法
  4. 蓝桥杯-算法提高-凶手 断案
  5. 数学基础 —— 线性代数
  6. 上学是穷人的出路吗?
  7. 一、tars简单介绍 二、tars 安装部署资料准备
  8. php面试 数组最大数,PHP 十万数字不同数组取最大的5个 (经典面试题topK) (原)
  9. 一起谈.NET技术,asp.net Ajax ---AutoComplete控件使用
  10. matlab 三维图像的绘制
  11. 十大开源安全测试工具
  12. python画创意图形_前端图形——绘图、截图、合成动图
  13. MySQL 日期时间加减
  14. 关于新版微信电脑版HOOK的技术经验(WX电脑版3.0)
  15. DirectX示例翻译和解析StateManager Sample
  16. 吐槽大会java_Rust吐槽大会纪要
  17. Java中的并发与并行
  18. SQL相关的时间日期类型
  19. 遗传算法应用场景(制造业)总结
  20. 小程序顶部tab切换

热门文章

  1. 小狐狸VF的一些命令及技巧
  2. C#安装包安装提示:已安装了该产品的另一个版本解决方法
  3. python代码实现卷积示意图快速制作
  4. Flink 1.10 SQL、HiveCatalog与事件时间整合示例
  5. Riverbed SteelConnect荣获2017 Interop东京展“最佳展示奖”
  6. Python 特定字符串替换
  7. 全国省市二级json,带id
  8. 百度地图API——修改infowindow样式
  9. python版FlappyBird代码解析
  10. Ubuntu18.04调整字体大小