[ Openstack ] OpenStack-Mitaka 高可用之 认证服务(keystone)

目录

Openstack-Mitaka 高可用之 概述
    Openstack-Mitaka 高可用之 环境初始化
    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
    Openstack-Mitaka 高可用之 memcache
    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群
    Openstack-Mitaka 高可用之 认证服务(keystone)
    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集群创建数据库

[[email protected] ~]# mysql -ugalera -pgalera -h 192.168.0.10

MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.10 sec)

对库授权并新增用户keystone
MariaDB [(none)]> grant all privileges on keystone.* to ‘keystone‘@‘%‘ identified by ‘keystone‘;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> grant all privileges on keystone.* to ‘keystone‘@‘localhost‘ identified by ‘keystone‘;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

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

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

安装配置组件:

三个节点安装:

# yum install openstack-keystone httpd mod_wsgi  python-openstackclient -y

编辑配置文件:
[[email protected] ~]# vim /etc/keystone/keystone.conf
[DEFAULT]
...
admin_token = ADMIN_TOKEN

# ADMIN_TOKEN 替换为openssl 生成的随机字符串,例如:
admin_token = 8c67dd7baaf367136f01

在[database] 部分,配置数据库访问
[database]
...
connection = mysql+pymysql://keystone:[email protected]/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调取的时候会报错

[[email protected] /etc/keystone]# scp -r fernet-keys/ controller2:/etc/keystone/
1                                                                                                                          100%   44     0.0KB/s   00:00
0                                                                                                                          100%   44     0.0KB/s   00:00
[[email protected] /etc/keystone]# scp -r fernet-keys/ controller3:/etc/keystone/
1                                                                                                                          100%   44     0.0KB/s   00:00
0

注意权限问题
# chown -R keystone:keystone fernet-keys/

配置 apache 服务器

修改文件 /etc/httpd/conf/httpd.conf 中ServerName 为本地管理地址
Listen 192.168.0.11:80
…
ServerName controller1

用下面的内容创建文件 /etc/httpd/conf.d/wsgi-keystone.conf,记得修改监听到本地,这样haproxy监听的vip才能启动
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>

检查http是否有语法报错
[[email protected] ~]# httpd -t
Syntax OK

将 /etc/keystone/keystone.conf 、 /etc/httpd/conf.d/wsgi-keystone.conf 拷贝到controller2 controller3

[[email protected] ~]# scp /etc/keystone/keystone.conf controller2:/etc/keystone/
keystone.conf                                                                                                              100%  111KB 111.1KB/s   00:00
[[email protected] ~]# scp /etc/keystone/keystone.conf controller3:/etc/keystone/
keystone.conf                                                                                                              100%  111KB 111.1KB/s   00:00
[[email protected] ~]# scp /etc/httpd/conf.d/wsgi-keystone.conf controller2:/etc/httpd/conf.d/
wsgi-keystone.conf                                                                                                         100% 1039     1.0KB/s   00:00
[[email protected] ~]# scp /etc/httpd/conf.d/wsgi-keystone.conf controller3:/etc/httpd/conf.d/
wsgi-keystone.conf                                                                                                         100% 1039     1.0KB/s   00:00 

初始化Fernet keys

这里有个天坑。每个节点都需要生成fernet keys  但是三个节点的 fernet keys 必须保持一致,否则认证的时候会报错。

# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

将controller1节点的fernet keys 覆盖其他节点的keys,注意权限问题。
[[email protected] keystone]# scp -r fernet-keys controller2:/etc/keystone/
1                                                                                                                          100%   44     0.0KB/s   00:00
0                                                                                                                          100%   44     0.0KB/s   00:00
[[email protected] keystone]# scp -r fernet-keys controller3:/etc/keystone/
1                                                                                                                          100%   44     0.0KB/s   00:00
0                                                                                                                          100%   44     0.0KB/s   00:00

# 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:3306
    balance source
    option mysql-check user haproxy
    server controller1 192.168.0.11:3306 check inter 2000 rise 3 fall 3
    server controller2 192.168.0.12:3306 check inter 2000 rise 3 fall 3
    server controller3 192.168.0.13:3306 check inter 2000 rise 3 fall 3

listen keystone_admin_cluster
    mode http
    bind  192.168.0.10:35357
    balance source        # 认证服务必须使用源地址绑定的轮询算法,因为认证信息是在本地填写的。
    server controller1 192.168.0.11:35357 check inter 2000 rise 3 fall 3
    server controller2 192.168.0.12:35357 check inter 2000 rise 3 fall 3
    server controller3 192.168.0.13:35357 check inter 2000 rise 3 fall 3
listen keystone_public_internal_cluster
    mode http
    bind  192.168.0.10:5000
    balance source
    server controller1 192.168.0.11:5000 check inter 2000 rise 3 fall 3
    server controller2 192.168.0.12:5000 check inter 2000 rise 3 fall 3
    server controller3 192.168.0.13:5000 check inter 2000 rise 3 fall 3

尝试启动并查看监听
[[email protected] ~]# systemctl restart haproxy
[[email protected] ~]# netstat -ntplu | grep ha
tcp        0      0 192.168.0.10:5672       0.0.0.0:*               LISTEN      34219/haproxy
tcp        0      0 192.168.0.10:3306       0.0.0.0:*               LISTEN      34219/haproxy
tcp        0      0 192.168.0.10:35357      0.0.0.0:*               LISTEN      34219/haproxy
udp        0      0 0.0.0.0:50050           0.0.0.0:*                           34218/haproxy

将修改后的haproxy拷贝到其他controller节点,所有的controller节点的haproxy.cfg必须保持一致。

创建服务实体和API端点

配置认证令牌,最好在三个节点都执行:
[[email protected] ~]# export OS_TOKEN=8c67dd7baaf367136f01
[[email protected] ~]# export OS_URL=http://controller:35357/v3
[[email protected] ~]# export OS_IDENTITY_API_VERSION=3

创建服务实体和身份认证服务:
[[email protected] ~]# 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用户认证信息脚本

[[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
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

创建demo用户认证信息脚本

[[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
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

拷贝到其他节点上做备份:

[[email protected] ~]# scp admin-openrc demo-openrc controller2:/root/
admin-openrc                                                                                                               100%  261     0.3KB/s   00:00
demo-openrc                                                                                                                100%  257     0.3KB/s   00:00
[[email protected] ~]# scp admin-openrc demo-openrc controller3:/root/
admin-openrc                                                                                                               100%  261     0.3KB/s   00:00
demo-openrc                                                                                                                100%  257     0.3KB/s   00:00

使用脚本

[[email protected] ~]# . admin-openrc
请求认证令牌
[[email protected] ~]# openstack token issue

成功。keystone部署成功。

时间: 2024-10-09 08:32:40

[ Openstack ] OpenStack-Mitaka 高可用之 认证服务(keystone)的相关文章

Openstack之路(二)认证服务Keystone

Keystone的概述 Keystone是Openstack的组件之一,用于为Openstack家族中的其它组件成员提供统一的认证服务,包括身份验证,令牌的发放和校验,服务列表,用户权限的定义等.Openstack中任何组件均依赖与Keystone提供的服务. Keystone的功能 用户与认证 用户权限与用户行为追踪. 服务目录 为每个组件服务提供一个可用的服务目录和相应的API入口端点. Keystone基本概念 User 顾名思义就是使用服务(Openstack Service)的用户,可

[ Openstack ] Openstack-Mitaka 高可用之 计算服务(Nova)

目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署    Openstack-Mitaka 高可用之 memcache    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群    Openstack-Mitaka 高可用之 认证服务(keystone)    Openstack-Mitaka

[ Openstack ] Openstack-Mitaka 高可用之 Dashboard

目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署    Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署    Openstack-Mitaka 高可用之 memcache    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群    Openstack-M

[ Openstack ] Openstack-Mitaka 高可用之 网络服务(Neutron)

目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署    Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署    Openstack-Mitaka 高可用之 memcache    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群    Openstack-M

[ Openstack ] Openstack-Mitaka 高可用之 环境初始化

目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署    Openstack-Mitaka 高可用之 memcache    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群    Openstack-Mitaka 高可用之 认证服务(keystone)    Openstack-Mitaka

[ Openstack ] Openstack-Mitaka 高可用之 启动一个实例

目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署    Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署    Openstack-Mitaka 高可用之 memcache    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群    Openstack-M

openstack 扩展开发最佳实践之计算节点高可用

前言:注意是扩展开发,这个词是我杜撰的,大概意思是指基于openstack的rest api做的一些开发,用于辅助相关功能,而不是直接改动openstack内的代码,怎么修改添加openstack各个组件的代码不在此文章内容内. 首先,千万,千万,千万不要用Openstack提供的SDK,原因如下. 一,SDK的相关文档并不健全. 二,版本不够统一,即兼容的问题. 所以不要使用openstack的SDK而是自己查阅openstack的API文档,通过requests库发http请求要比SDK灵活

[ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群

目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署    Openstack-Mitaka 高可用之 memcache    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群    Openstack-Mitaka 高可用之 认证服务(keystone)    Openstack-Mitaka

企业私有云之mariadb集群高可用

上篇文章介绍了openstack组件rabbitmq高可用,现在介绍其另一个重要组件mysql高可用. 我是本次选择mysql的版本是mariadb,集群方法是galera cluster多主集群. 其实也有很多其他方案,如pxc.mha等等,选择galera的原因是安装方便,使用与维护也方便,多主模式任何一个节点挂了都可以在另外节点查看数据,同时openstack各组件也支持配置集群方式的配置. 简介 MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实