[ Openstack ] OpenStack-Mitaka 高可用之 认证服务(keystone)
目录
Openstack-Mitaka 高可用之 概述
Openstack-Mitaka 高可用之 环境初始化
Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署
Openstack-Mitaka 高可用之 memcache
Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群
Openstack-Mitaka 高可用之 认证服务(keystone)
OpenStack-Mitaka 高可用之 镜像服务(glance)
Openstack-Mitaka 高可用之 计算服务(Nova)
Openstack-Mitaka 高可用之 网络服务(Neutron)
Openstack-Mitaka 高可用之 Dashboard
Openstack-Mitaka 高可用之 启动一个实例
Openstack-Mitaka 高可用之 测试
Identity 服务简介
Identity为认证管理,授权管理和服务目录服务管理提供单点整合。其它Openstack服务将身份认证服务当作统一API来使用。
当某个Openstack服务收到来自用户的请求时,该服务会直接询问Identitiy服务,验证该用户是否有权限进行此次请求。
keystone各组件概念:
(1)用户:使用openstack云服务的用户、系统或者服务,身份服务验证用户提交的请求。用户需要登录,然后可能会分配令牌已访问资源。多用户可以直接分配给特定的租户,并且表现的就像他们包含该租户内。
(2)认证信息:确认用户身份的数据。比如用户名和密码,用户名和API键,或者身份服务提供的认证令牌
(3)认证:确认用户身份的过程。Openstack身份服务通过验证用户提供的认证信息确认请求,当认证信息被验证后,Openstack认证服务发给用户认证令牌,在后续的请求中用户将使用该令牌。
(4)令牌:文本形式的字母-数字字符串,使用该字符串访问Openstack的API和资源。令牌在有限的时间内是有效的,可能在任何时间被取消。
(5)租户:分组或隔离资源容器,租户也用于分组或隔离身份对象。基于服务操作者,租户可能映射为客户、组织或项目
(6)服务:一个openstack服务提供了一个或多个端点,在端点内用户可以访问资源或者执行操作。
(7)角色:定义了执行特定操作的用户权限的集合。在身份服务中,发给用户的令牌包括角色的列表。被用户访问的服务确定如何解释用户拥有的角色和每个角色可以访问的操作和资源。
(8)keystone客户端:openstack身份服务API的命令行接口。
Keystone 拓扑图
keystone验证的过程:
keystone安装和配置
在配置opnstack身份认证前,必须创建一个数据库和管理员令牌
用 galera用户连接到mariadb集群创建数据库
[root@controller1 ~]# mysql -ugalera -pgalera -h 192.168.0.10 MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, row affected (0.10 sec) 对库授权并新增用户keystone
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone';
Query OK, rows affected (0.01 sec) MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone';
Query OK, rows affected (0.00 sec) MariaDB [(none)]> flush privileges;
Query OK, rows affected (0.00 sec)
生成一个随机值在初始的配置中作为管理员的令牌
[root@controller1 ~]# openssl rand -hex
8c67dd7baaf367136f01
安装配置组件:
三个节点安装:
# yum install openstack-keystone httpd mod_wsgi python-openstackclient -y 编辑配置文件:
[root@controller1 ~]# vim /etc/keystone/keystone.conf
[DEFAULT]
...
admin_token = ADMIN_TOKEN # ADMIN_TOKEN 替换为openssl 生成的随机字符串,例如:
admin_token = 8c67dd7baaf367136f01 在[database] 部分,配置数据库访问
[database]
...
connection = mysql+pymysql://keystone:keystone@controller/keystone
# 注意这里 controller 已经在/etc/hosts 中解析为 vip 地址 在``[token]``部分,配置Fernet UUID令牌的提供者。
[token]
...
provider = fernet
初始化身份认证服务的数据库:
# su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化Fernet keys:
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 将初始化后的key拷贝到其他controller节点,否则在haproxy调取的时候会报错 [root@controller1 /etc/keystone]# scp -r fernet-keys/ controller2:/etc/keystone/
% .0KB/s :
% .0KB/s :
[root@controller1 /etc/keystone]# scp -r fernet-keys/ controller3:/etc/keystone/
% .0KB/s : 注意权限问题
# chown -R keystone:keystone fernet-keys/
配置 apache 服务器
修改文件 /etc/httpd/conf/httpd.conf 中ServerName 为本地管理地址
Listen 192.168.0.11:
…
ServerName controller1 用下面的内容创建文件 /etc/httpd/conf.d/wsgi-keystone.conf,记得修改监听到本地,这样haproxy监听的vip才能启动
Listen
Listen
<VirtualHost *:>
WSGIDaemonProcess keystone-public processes= threads= 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 *:>
WSGIDaemonProcess keystone-admin processes= threads= 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> 检查http是否有语法报错
[root@controller1 ~]# httpd -t
Syntax OK
将 /etc/keystone/keystone.conf 、 /etc/httpd/conf.d/wsgi-keystone.conf 拷贝到controller2 controller3
[root@controller1 ~]# scp /etc/keystone/keystone.conf controller2:/etc/keystone/
keystone.conf % 111KB .1KB/s :
[root@controller1 ~]# scp /etc/keystone/keystone.conf controller3:/etc/keystone/
keystone.conf % 111KB .1KB/s :
[root@controller1 ~]# scp /etc/httpd/conf.d/wsgi-keystone.conf controller2:/etc/httpd/conf.d/
wsgi-keystone.conf % .0KB/s :
[root@controller1 ~]# scp /etc/httpd/conf.d/wsgi-keystone.conf controller3:/etc/httpd/conf.d/
wsgi-keystone.conf % .0KB/s :
初始化Fernet keys
这里有个天坑。每个节点都需要生成fernet keys 但是三个节点的 fernet keys 必须保持一致,否则认证的时候会报错。
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 将controller1节点的fernet keys 覆盖其他节点的keys,注意权限问题。
[root@controller1 keystone]# scp -r fernet-keys controller2:/etc/keystone/
% .0KB/s :
% .0KB/s :
[root@controller1 keystone]# scp -r fernet-keys controller3:/etc/keystone/
% .0KB/s :
% .0KB/s : # chown -R keystone:keystone fernet-keys/ 再次重启httpd服务。
# systemctl restart httpd
这篇文章说的很清楚。
http://blog.csdn.net/quqi99/article/details/52373086
记得修改/etc/httpd/conf/httpd.conf 中的 ServerName
三个节点执行启动服务:
# systemctl enable httpd ; systemctl restart httpd
将启动的http,共两个端口35357、5000加入到haproxy中:
listen galera_cluster
mode tcp
bind 192.168.0.10:
balance source
option mysql-check user haproxy
server controller1 192.168.0.11: check inter rise fall
server controller2 192.168.0.12: check inter rise fall
server controller3 192.168.0.13: check inter rise fall listen keystone_admin_cluster
mode http
bind 192.168.0.10:
balance source # 认证服务必须使用源地址绑定的轮询算法,因为认证信息是在本地填写的。
server controller1 192.168.0.11: check inter rise fall
server controller2 192.168.0.12: check inter rise fall
server controller3 192.168.0.13: check inter rise fall
listen keystone_public_internal_cluster
mode http
bind 192.168.0.10:
balance source
server controller1 192.168.0.11: check inter rise fall
server controller2 192.168.0.12: check inter rise fall
server controller3 192.168.0.13: check inter rise fall 尝试启动并查看监听
[root@controller1 ~]# systemctl restart haproxy
[root@controller1 ~]# netstat -ntplu | grep ha
tcp 192.168.0.10: 0.0.0.0:* LISTEN /haproxy
tcp 192.168.0.10: 0.0.0.0:* LISTEN /haproxy
tcp 192.168.0.10: 0.0.0.0:* LISTEN /haproxy
udp 0.0.0.0: 0.0.0.0:* /haproxy
将修改后的haproxy拷贝到其他controller节点,所有的controller节点的haproxy.cfg必须保持一致。
创建服务实体和API端点
配置认证令牌,最好在三个节点都执行:
[root@controller1 ~]# export OS_TOKEN=8c67dd7baaf367136f01
[root@controller1 ~]# export OS_URL=http://controller:35357/v3
[root@controller1 ~]# export OS_IDENTITY_API_VERSION= 创建服务实体和身份认证服务:
[root@controller1 ~]# openstack service create --name keystone --description "OpenStack Identity" identity
创建认证服务的API端点
身份认证服务管理了一个与环境相关的API端点目录,服务使用这个目录来决定如何与环境中的其他服务进行通信
以下操作在任意一个controller节点执行:
# openstack endpoint create --region RegionOne identity public http://controller:5000/v3
# openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3
# openstack domain create --description "Default Domain" default
# openstack project create --domain default --description "Admin Project" admin
# openstack user create --domain default --password-prompt admin # 创建admin用户,密码设置为 admin
# openstack role create admin
# openstack role add --project admin --user admin admin
# openstack project create --domain default --description "Service Project" service
# openstack project create --domain default --description "Demo Project" demo
# openstack user create --domain default --password-prompt demo # 创建demo用户,密码设置为 demo
# openstack role create user
# openstack role add --project demo --user demo user
验证:
# unset OS_TOKEN OS_URL
# 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
密码:admin
# 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
密码:demo
创建admin用户认证信息脚本
[root@controller1 ~]# 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
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=
export OS_IMAGE_API_VERSION=
创建demo用户认证信息脚本
[root@controller1 ~]# 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
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=
export OS_IMAGE_API_VERSION=
拷贝到其他节点上做备份:
[root@controller1 ~]# scp admin-openrc demo-openrc controller2:/root/
admin-openrc % .3KB/s :
demo-openrc % .3KB/s :
[root@controller1 ~]# scp admin-openrc demo-openrc controller3:/root/
admin-openrc % .3KB/s :
demo-openrc % .3KB/s :
使用脚本
[root@controller1 ~]# . admin-openrc
请求认证令牌
[root@controller1 ~]# openstack token issue
成功。keystone部署成功。
[ Openstack ] OpenStack-Mitaka 高可用之 认证服务(keystone)的更多相关文章
- openstack cinder-volume 的高可用(HA)
http://blog.csdn.net/LL_JCB/article/details/51879378 为了保证云平台的稳定性,需要做很多部分的高可用.比如控制节点高可用.计算节点高可用.网络节点高 ...
- OpenStack中MySQL高可用配置
采用Heartbeat+DRBD+mysql高可用方案,配置两个节点的高可用集群 l 配置各节点互相解析 gb07 gb06 l 配置各节点时间同步 gb07 [root@gb07 ~]# ntp ...
- OpenStack API部分高可用配置(二)
一.安装与配置HAProxy 1.调整内核参数,允许绑定VIP: vim /etc/sysctl.conf [内容] net.ipv4.ip_nonlocal_bind=1 sysctl -p 2.安 ...
- OpenStack API部分高可用配置(一)
一.概况与原理 SHAPE \* MERGEFORMAT 1)所需要的配置组件有:pacemaker+corosync+HAProxy 2)主要原理:HAProxy作为负载均衡器,将对openst ...
- kolla部署openstack多节点高可用并对接ceph后端存储(17)
部署节点执行: 安装基础包和docker yum install python-devel libffi-devel gcc openssl-devel git python-pip -y 升级一下 ...
- [ Openstack ] Openstack-Mitaka 高可用之 启动一个实例
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- [ Openstack ] Openstack-Mitaka 高可用之 计算服务(Nova)
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- [ Openstack ] OpenStack-Mitaka 高可用之 概述
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- OpenStack高可用方案及配置
1 OpenStack高可用介绍 1.1 无状态和有状态服务 无状态服务指的是该服务接收的请求前后之间没有相关关系,接收并处理完该请求后不保存任何状态,在OpenStack的服务中常见的无状态服务 ...
随机推荐
- Python 3 学习笔记之——数据类型
1. 数字 类型 int, float, bool, complex type() 查看变量类型 isinstance(a, int) 查看变量类型 运算符 % 取余 // 返回商的整数部分 ** 幂 ...
- 【转】webpack4
1.不再支持node.js4.X 2.不能用webpack命令直接打包指定的文件,只能使用webpack.config.js进行配置. 即:webpack demo01.js bundle01.j ...
- Java 无法初始化Connection的问题
通过断点调试捕获错误消息:The server time zone value '�й���ʱ��' is unrecognized or represents more than one time ...
- Java 中的异常和处理详解(转载)
原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函 ...
- Java——异常博客作业
本次任务地址 6. 为如下代码加上异常处理 6.1 改正代码,并增加如下功能.当找不到文件时,需提示用户找不到文件xxx,请重新输入文件名,然后尝试重新打开. 如果是其他异常则提示打开或读取文件失败! ...
- Python创建目录文件夹
Python对文件的操作还算是方便的,只需要包含os模块进来,使用相关函数即可实现目录的创建. 主要涉及到三个函数 1.os.path.exists(path) 判断一个目录是否存在 2.os.mak ...
- golang and intellij
有一个项目,混合了java和go,需要在intellij中安装go的插件. OK,网上的信息简直混乱不堪,两个流派,一个流派就是装插件,一个流派就是编译插件,各种折腾,还是安装不了,谁知柳暗花明又一村 ...
- PHP与webserver【简书看到的】
很久以前,人们造出来一个机器人,它的英文名字叫web server,中文名叫网页服务器.(为了简写,下文称web server为server) server的工作很简单,就是做内容的分发. 初期的se ...
- Java IO 之 RandomAccessFile 操作文件内容
RandomAccessFile类实现对文件内容的随机读写 文件内容的随机操作,重难点在于字符操作,具体查看API package org.zln.io.file; import java.io.IO ...
- Socket常见错误代码与描述
最近程序 出现 几次 Socket 错误, 为了便于 差错.. 搜了一些 贴在这里.. 出现网络联机错误Socket error #11001表示您的计算机无法连上服务器,请检查您的Proxy设定以及 ...