openstack学习笔记之三:keystone简介与手动安装部署
1、Keystone的架构
Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务规则和服务令牌功能的模块。Keystone作为Openstack的核心模块,为Nova(计算),Glance(镜像),Swift(对象存储),Cinder(块存储),Neutron(网络)以及Horizon(Dashboard)提供身份验证和授权服务。Keystone架构如图1-1所示。
除了涉及到Keystone模块之外,还有KeystoneMiddleware子项目,KeystoneMiddleware是对Keystone提供的对令牌合法性进行验证的中间件,缓存了相关的证书和令牌信息。
Keystone项目本身,除了后端的数据库,主要包含了一个处理RestFful请求的API服务进程,这些API涵盖了Identity、Token、Catalogy和Plolicy提供的各种各种服务,不同的服务都是有相应的后端Driver(BackendDriver)来实现。
2、 Keystone的基本概念
User
User即用户,他们代表可以通过keystone进行访问的人、服务或程序。Users通过认证信息(credentials,如密码、API Keys等)进行验证。
Tenant 新版叫Project
Tenant即租户,它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Neutron中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上。
Role
Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的或租户的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。
Service
Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。
Endpoint
Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板,这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。
Token
Token是访问openstack资源的钥匙。它是通过Keystone验证后的返回值,在之后的与其他服务交互中只需要携带Token值即可。用户已经确认身份后每个Token都有一个有效期,Token只在有效期内是有效的。
3、上述概念之间的关系
各种概念之间的关系如图1-2所示。
图1-2 各个概念之间的关系
1、租户下,管理着一堆用户(人,或程序)。
2、每个用户都有自己的credentials(凭证)用户名+密码或者用户名+API key,或其他凭证。
3、用户在访问其他资源(计算、存储)之前,需要用自己的credential去请求keystone服务,获得验证信息(主要是Token信息)和服务信息(服务目录和它们的endpoint)。
4、用户拿着Token信息,就可以去访问特点的资源了。
4、keystone在Openstack中的工作流程实例
Keystone在OpenStack中的工作流程如图1-3所示。
图1-3 keystone在OpenStack中的工作流程
5、实战:Keystone的手动搭建
备注:为方便操作,密码均使用openstack
5.1 控制节点的安装配置
数据库相关操作:
[root@controller ~]# mysql -uroot -popenstack <<EOF
create database keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';
EOF
安装相关包并配置
[root@controller ~]# yum -y install openstack-keystone httpd mod_wsgi -y
[root@controller ~]# vim /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:openstack@controller/keystone
[token]
provider = fernet
初始化数据库,创建数据结构:
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@controller ~]# mysql -hlocalhost -ukeystone -popenstack -e "use keystone;show tables;"
初始化fernet密钥存储库
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
创建keystone的服务端口:
[root@controller ~]# keystone-manage bootstrap --bootstrap-password openstack --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
配置http 服务
[root@controller ~]# vim /etc/httpd/conf/httpd.conf
ServerName controller
给/usr/share/keystone/wsgi-keystone.conf创建一个软连接(通过httpd发布)
[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
服务启动并设置开机自启
[root@controller ~]# systemctl enable httpd.service && systemctl start httpd.service
创建管理员账号
[root@controller ~]# vim admin_openrc
export OS_USERNAME=admin
export OS_PASSWORD=openstack
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
5.2 创建域、项目、用户和角色
创建service租户
[root@controller ~]# source admin_openrc
[root@controller ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | d83f6daf971b4e9986a0062187593b56 |
| is_domain | False |
| name | service |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
创建demo租户
[root@controller ~]# openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | f14a6d3761374969a246a0298c603ec3 |
| is_domain | False |
| name | demo |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
下面这句要分开执行,要输入密码:
创建用户
[root@controller ~]# openstack user create --domain default --password-prompt demo
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 24cb008774ef4261a615364101001f43 |
| name | demo |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@controller ~]# openstack role create user
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 754ea87392464f0e90dfac519d9002d5 |
| name | user |
+-----------+----------------------------------+
将demo用户添加到demo角色中
[root@controller ~]# openstack role add --project demo --user demo user
[root@controller ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 24cb008774ef4261a615364101001f43 | demo |
| 6b9ad33971ae453983f4290cb4c0c380 | admin |
+----------------------------------+-------+
[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| d83f6daf971b4e9986a0062187593b56 | service |
| db82536ef7124608b3f3931ba4ce9615 | admin |
| f14a6d3761374969a246a0298c603ec3 | demo |
+----------------------------------+---------+
[root@controller ~]# openstack role list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 754ea87392464f0e90dfac519d9002d5 | user |
| c5930f0961104f12aaaab694bd5c8639 | admin |
+----------------------------------+-------+
[root@controller ~]# openstack endpoint list
---------+-----------+-----------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
---------+-----------+-----------------------------+
| 01ccfab5acb0407888620ca056f93dfe | RegionOne | keystone | identity | True | admin | http://controller:35357/v3/ |
| 4c2bd465260043039bcf7bf78776dd6b | RegionOne | keystone | identity | True | internal | http://controller:5000/v3/ |
| bdc34c7c99bb432eb13fa83a45d0065e | RegionOne | keystone | identity | True | public | http://controller:5000/v3/ |
---------+-----------+-----------------------------+
5.3 验证
[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD
下面这句要分开执行,要输入admin用户的密码:
[root@controller ~]# 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
Password:
+------------+--------------------------------------------+
| Field | Value |
+------------+--------------------------------------------+
| expires | 2020-03-16T16:37:24+0000 |
| id | gAAAAABeb5009UNgv97bPsYxet9Vz3UG6ywl3L-u04rJY1M7uO6Vq9NLhzejFLnEA6vcbR1nsmu5iVh0-Z32pm3p0UDSMgoAMirHcYnHaJXesly2Gh1tvnz5dKAzh31vbXW-gdMcGMxe7geqPmQMKSHKXmXFEN1F9H5elKw_eyNIhWCyCwe6_iA |
| project_id | db82536ef7124608b3f3931ba4ce9615 |
| user_id | 6b9ad33971ae453983f4290cb4c0c380 |
+------------+---------------------------------------------+
下面这句要分开执行,要输入demo用户的密码:
[root@controller ~]# 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
执行结果:
Password:
+------------+------------------------------------------------+
| Field | Value |
+------------+--------------------------------------+
| expires | 2020-03-16T16:37:58+0000 |
| id | gAAAAABeb51Wsct3Yi_BPrfj1isFihwQKgV_h-I1H8gvoT4Grvesol3lK_RqolZHV07eUd5l0HYrBBqdZaowJq_QbvzpjEtWG4BbyZlNg0mrI1zeIeAZZdkcdkQA7Pb9iZ7twqJtVuTsdd2z7SzoAcIqd47uMPjcHD-Veo2xRZRXtnCwDw1IlWE |
| project_id | f14a6d3761374969a246a0298c603ec3 |
| user_id | 24cb008774ef4261a615364101001f43 |
+------------+------------------------------------------------------+
5.4 创建openstack客户端的脚本环境
创建管理员的账号
[root@controller ~]# 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=openstack
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
创建demo用户的账号
[root@controller ~]# 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=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
使用脚本验证
[root@controller ~]# source admin_openrc
[root@controller ~]# openstack token issue
可获取token admin用户的token
[root@controller ~]# source demo_openrc
[root@controller ~]# openstack token issue
可以获取token demo用户的token
至此完成keystone的安装,下一章节简介Glance 组件,以及它的安装过程
openstack学习笔记之三:keystone简介与手动安装部署相关推荐
- Kubernetes的学习笔记总结之k8s集群安装部署
kubernets 集群安装部署. 安装 Docker 所有节点都需要安装 Docker. apt-get update && apt-get install docker.io 安装 ...
- openstack学习笔记之keystone
keystone 作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情: --管理用户及其权限 --维护 OpenStack Services 的 Endpoint --Aut ...
- ORACLE学习笔记-CentOS 7.5 Oracle 19C安装部署
CentOS 7.5 Oracle 19C安装部署 一.环境检查 1.操作系统检查 2.内存检查 3.SWAP检查 4.共享内存检查 5.磁盘空间检查 二.YUM配置及RPM依赖包安装 1.YUM源搭 ...
- ORACLE学习笔记-CentOS 7.5 Oracle 11gR2安装部署
CentOS 7.5 Oracle 11g R2安装部署 一.环境检查 1.操作系统检查 内存检查 3.SWAP检查 4.共享内存检查 5.磁盘空间检查 二.YUM配置及RPM依赖包安装 1. 本地Y ...
- Hadoop入门学习笔记-第五天(hadoop-hive安装部署与配置笔记)
1.准备安装包: MySQL-5.6.26-1.linux_glibc2.5.x86_64.rpm-bundle mysql-connector-java-5.1.39.jar(驱动,需要放入/hiv ...
- STM32 HAL库学习笔记1-HAL库简介
STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...
- linux系统管理学习笔记之三----软件的安装
linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...
- StatQuest学习笔记23——RNA-seq简介
StatQuest学习笔记23--RNA-seq简介 前言--主要内容 这篇笔记是StatQuest系列笔记的第58节,主要内容是讲RNA-seq的原理.StatQuest系列教程的58到62节是协录 ...
- ASP.Net学习笔记001--ASP.Net简介1
ASP.Net学习笔记001--ASP.Net简介1 2016/1/10 以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 也可以自己下载: ASP.Net学习笔 ...
最新文章
- 使用cat /proc/进程id/maps 查看进程内存映射
- 基于PyTorch,如何构建一个简单的神经网络
- TP5部署服务器问题总结
- DP:Sumsets(POJ 2229)
- Android UI编程之自定义控件初步(下)——CustomEditText
- step4 . day3 目录访问函数
- visio 2003 for enterprice architects 不需要安装VS2005,直接安装的方法
- 博客园博客转至个人网站博客声明
- 用nginx转发请求tomcat 如何配置访问日志获取真实ip
- mysql 多表查询 like_MYSQL多表联合查询的问题
- JavaSE基础学习
- UEditor快捷键
- 自整理---Redis笔记
- Lightoj1009 Back to Underworld(带权并查集)
- IDR:通过迭代数据细化的自我监督图像去噪
- 人工智能建立本体库_领域本体构建方法概述
- net start命令的使用
- python制作英汉词典_Python基于有道实现英汉字典功能
- 21.VIVO: Visual Vocabulary Pre-Training for Novel Object Captioning
- 如何把pdf转成word
热门文章
- 三筒烘干机将煤渣变废为宝,逐渐实现可持续发展战略
- Java - reduce函数的应用
- 三年级计算机群鸭戏水教案导入,清华版信息技术三年级下册3.7《群鸭戏水-自选图形》教案2.doc...
- 聊聊十种常见的软件架构模式
- 5种主要的软件架构模式
- 将瑞吉外卖项目jar包部署在远程服务器并成功运行在pc和移动端
- bracket怎么新建HTML,Adobe Brackets如何安装 网页前端编辑器Brackets怎么用
- C++之inline的使用
- Android学习路线指南,flutter登录页
- hdu3018 Ant Trip