Centos7安装部署openstack--Keystone认证服务
一、openstack概述
1、拓扑图
Horizon 是一个 dashboard 就是一个控制面板 Celiometer 是一个监控计费 像快照,配置都要计费的 Keystone 是一个登录认证 像有些网站都是qq登录 或者微信登录 Heat 是一个编排服务(playbook) 就是通过定义剧本 来批量启动一系列的虚拟机,然后一键实现一个集群的搭建(利用ansible 来执行) swift 是一个对象存储 就是用户的东西不在是存在某一个目录下面,因为传统的目录下没有数据库,而swift (对象存储 )就专门建一个数据库 把每一个文件当成一个记录对象,而不是目录级别的,就是一个文件变成数据库里的一条记录。
2、openstck架构(soa架构)
模块:(keystone认证服务,glance镜像服务,nova计算服务,neutron网络服务,cinder存储服务,horizon web界面)
3、soa架构
SOA:拆业务,把每一个功能都拆成一个独立的web服务,每一个独立的web服务,至少拥有一个集群。
开源的微服框架 :阿里开源的dubbo 、spring boot。
二、安装keystone认证服务
1、安装服务
[root@controller ]#yum install openstack-keystone httpd mod_wsgi -y mod_wsgi提供http服务与python之间的连接
2、在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌。
[root@controller ~]# mysql -u root -p MariaDB [(none)]> CREATE DATABASE keystone; MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
3、生成一个随机值在初始的配置中作为管理员的令牌。
[root@controller ~]# openssl rand -hex 10
4、修改配置文件
[root@controller ]# cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak 备份配置文件 [root@controller ]# grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf 过滤掉空格和注释,然后导入配置文件 [root@controller ]# vim /etc/keystone/keystone.conf 编辑配置文件,如下图
[root@controller ]# md5sum /etc/keystone/keystone.conf 用MD5记录配置文件
[DEFAULT] ... admin_token = ADMIN_TOKEN
[database] ... connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
[token]
...
provider = fernet
5、安装专门用于修改配置文件的服务
[root@controller ]# yum install openstack-utils -y [root@controller ]# grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf 还原刚第二步修改的配置文件 [root@controller ]# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ADMIN_TOKEN 用工具修改配置文件 [root@controller ]# openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone [root@controller ]# openstack-config --set /etc/keystone/keystone.conf token provider fernet [root@controller ]# cat /etc/keystone/keystone.conf 查看配置文件 [root@controller ]# md5sum /etc/keystone/keystone.conf 查看修改的配置文件与上一步手动修改的配置文件MD5值
6、初始化身份认证服务的数据库
[root@controller ]# mysql keystone -e 'show tables;' 切换到数据库,查看数据库下面的表
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone 同步数据库,同步完成在去查看,就会多出很多表
7、初始化Fernet keys
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
初始化之后,在 /etc/keystone/下面会多出fernet-keys的文件夹
8、配置 Apache HTTP 服务器
[root@controller ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf
9、用下面的内容创建`/etc/httpd/conf.d/wsgi-keystone.conf``文件
[root@controller ~]# 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.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.log CustomLog /var/log/httpd/keystone_access.log combined <Directory /usr/bin> Require all granted </Directory> </VirtualHost>
10、启动http服务,并加入开机自启动
[root@controller etc]# systemctl start httpd.service
[root@controller etc]# systemctl enable httpd.service
三、配置令牌,并注册服务
1、配置令牌
[root@controller etc]# export OS_TOKEN=ADMIN_TOKEN 配置认证令牌 [root@controller etc]# export OS_URL=http://controller:35357/v3 配置端点URL [root@controller etc]# export OS_IDENTITY_API_VERSION=3 配置认证 API 版本
2、创建服务实体和API端点
[root@controller ~]# openstack service create --name keystone --description "OpenStack Identity" identity +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Identity | | enabled | True | | id | 0636e3be3cd148c6b54fd24686e8d6ea | | name | keystone | | type | identity | +-------------+----------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 8227630dece449018c6dd7f3199c18b6 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 0636e3be3cd148c6b54fd24686e8d6ea | | service_name | keystone | | service_type | identity | | url | http://controller:5000/v3 | +--------------+----------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne identity internal http://controller:5000/v3 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | b1c3e0e738854c568ad236ae00a0da6d | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 0636e3be3cd148c6b54fd24686e8d6ea | | service_name | keystone | | service_type | identity | | url | http://controller:5000/v3 | +--------------+----------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | fb800ecf21c845a6bfdd05c5de1f4656 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 0636e3be3cd148c6b54fd24686e8d6ea | | service_name | keystone | | service_type | identity | | url | http://controller:35357/v3 | +--------------+----------------------------------+
创建service项目
openstack project create --domain default \ --description "Service Project" service +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Service Project | | domain_id | e0353a670a9e496da891347c589539e9 | | enabled | True | | id | 894cdfa366d34e9d835d3de01e752262 | | is_domain | False | | name | service | | parent_id | None | +-------------+----------------------------------+ openstack project create --domain default \ --description "Demo Project" demo +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Demo Project | | domain_id | e0353a670a9e496da891347c589539e9 | | enabled | True | | id | ed0b60bf607743088218b0a533d5943f | | is_domain | False | | name | demo | | parent_id | None | +-------------+----------------------------------+ openstack user create --domain default \ > --password DEMO_PASS demo +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | d0fb278401404c569f5cf9c00c750817 | | enabled | True | | id | 1ca7f08e5e954074837db6c877834c07 | | name | demo | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ openstack role create user +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 3db197f5d549400eb825ae24e839e7ea | | name | user | +-----------+----------------------------------+ openstack role add --project demo --user demo user
注解:每个添加到OpenStack环境中的服务要求一个或多个服务实体和三个认证服务中的API 端点变种。
四、创建域、项目(租户)、用户和角色
1、创建域``default``
[root@controller ~]# openstack domain create --description "Default Domain" default +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Default Domain | | enabled | True | | id | 73e42b9fc6b64cfdb17940cdf0a0f692 | | name | default | | tags | [] | +-------------+----------------------------------+
2、创建 admin 项目
[root@controller ~]# openstack project create --domain default --description "Admin Project" admin +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Admin Project | | domain_id | 73e42b9fc6b64cfdb17940cdf0a0f692 | | enabled | True | | id | 17e6fb94c09347fc8bdc854afef7922f | | is_domain | False | | name | admin | | parent_id | 73e42b9fc6b64cfdb17940cdf0a0f692 | | tags | [] | +-------------+----------------------------------+
3、创建 admin 用户
[root@controller ~]# openstack user create --domain default --password ADMIN_PASS admin +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | 73e42b9fc6b64cfdb17940cdf0a0f692 | | enabled | True | | id | 0a48bf33893b4854bf85fbd69050c2f6 | | name | admin | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
4、创建 admin 角色
[root@controller ~]# openstack role create admin
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 2ef07766d0a04bacb8778b0b0ac0be51 |
| name | admin |
+-----------+----------------------------------+
5、添加``admin`` 角色到 admin 项目和用户上
[root@controller ~]# openstack role add --project admin --user admin admin
6、删除环境变量,因为安全性的原因,关闭临时认证令牌机制
###编辑 /etc/keystone/keystone-paste.ini 文件,从``[pipeline:public_api]``,[pipeline:admin_api]``和``[pipeline:api_v3]``部分删除``admin_token_auth 。
重置``OS_TOKEN``和``OS_URL`` 环境变量
[root@controller ~]# unset OS_TOKEN OS_URL
7、作为 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
注解:这个命令使用``admin``用户的密码:ADMIN_PASS
8、用环境变量,执行命令
[root@controller ~]# export OS_PROJECT_DOMAIN_NAME=default [root@controller ~]# export OS_USER_DOMAIN_NAME=default [root@controller ~]# export OS_PROJECT_NAME=admin [root@controller ~]# export OS_USERNAME=admin [root@controller ~]# export OS_PASSWORD=ADMIN_PASS [root@controller ~]# export OS_AUTH_URL=http://controller:35357/v3 [root@controller ~]# export OS_IDENTITY_API_VERSION=3 [root@controller ~]# export OS_IMAGE_API_VERSION=2 [root@controller ~]# openstack user list 执行了环境变量,才能使用这个命令 +----------------------------------+-------+ | ID | Name | +----------------------------------+-------+ | 0a48bf33893b4854bf85fbd69050c2f6 | 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 user list 用参数执行命令
9、把环境变量创建成脚本,创建admin-openrc文件
[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=ADMIN_PASS export OS_AUTH_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
[root@controller ~]# source admin-openrc 每次执行openstack命令之前,保证有环境变量,登出之后,重新执行此命令
10、自动执行,开机拥有环境变量
[root@controller ~]# vim .bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi source admin-openrc 在最后加入这段
11、验证keystone服务是否正常