#! / bin/ bash #声明解释器路径
source / etc/ xiandian/ openrc. sh #生效环境变量
#keystone mysqlmysql - uroot - p$DB_PASS - e "create database IF NOT EXISTS keystone ;" #登录MySQL数据库,创建keystone数据库
mysql - uroot - p$DB_PASS - e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '$KEYSTONE_DBPASS' ;" #登录MySQL数据库,创建数据库用户keystone,授权keystone用户拥有从本地访问keystone数据库的所有权限,并设置数据库用户keystone的密码
mysql - uroot - p$DB_PASS - e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '$KEYSTONE_DBPASS' ;" #登录MySQL数据库,创建数据库用户keystone,授权keystone用户拥有从远程访问keystone数据库的所有权限,并设置数据库用户keystone的密码
#install keystoneyum install openstack- keystone httpd mod_wsgi - y #安装keystone服务软件包mod_wsgi:python应用程序与web服务器之间的一种接口,定义了一套接口来实现服务器与应用端的通信规范
#/ etc/ keystone/ keystone. confcrudini -- set / etc/ keystone/ keystone. conf database connection mysql+ pymysql: / / keystone: $KEYSTONE_DBPASS @$HOST_NAME / keystone #配置数据库连接#pymysql是一个python库,用于数据库的连接,设置MySQL和Python连接。
crudini -- set / etc/ keystone/ keystone. conf token provider fernet #安全消息传递格式
ADMIN_TOKEN = $ ( openssl rand - hex 10 ) #随机生成20 位的字符串赋给ADMIN_TOKEN ,创建令牌
crudini -- set / etc/ keystone/ keystone. conf DEFAULT admin_token $ADMIN_TOKEN #openssl :一个强大的安全套接字层密码库,包括主要的密码算法、常用的密钥和证书封装管理功能及SSL 协议
su - s / bin/ sh - c "keystone-manage db_sync" keystone #为keystone服务创建数据库表
keystone- manage fernet_setup -- keystone- user keystone -- keystone- group keystone #初始化Fernet密钥存储用于token加密,创建签名密钥
keystone- manage credential_setup -- keystone- user keystone -- keystone- group keystone #创建证书
sed - i "s/#ServerName www.example.com:80/ServerName $HOST_NAME/g" / etc/ httpd/ conf/ httpd. conf 配置Apache HTTP Server:修改/ etc/ httpd/ conf/ httpd. conf配置文件将ServerName www. example. com: 80 替换为ServerName controller(因为我们的Apache是安装在controller上的)
ln - s / usr/ share/ keystone/ wsgi- keystone. conf / etc/ httpd/ conf. d/ #创建/ etc/ httpd/ conf. d/ wsgi- keystone. conf文件来启用认证服务的虚拟主机(两个虚拟主机,一个监听5000 端口,一个监听35357 端口)
systemctl enable httpd. service
systemctl restart httpd. service
export OS_TOKEN = $ADMIN_TOKEN #设置操作系统临时环境变量:校验令牌
export OS_URL = http: / / $HOST_NAME : 35357 / v3 #设置操作系统临时环境变量:端点URL
export OS_IDENTITY_API_VERSION = 3 #设置操作系统临时环境变量:标识API 版本——默认情况下,认证服务的数据库中没有任何信息来支持会话校验和目录服务,所以我们必须用一个临时的校验令牌为认证服务初始化服务实体和API 端点
openstack service create -- name keystone -- description "OpenStack Identity" identity #创建keystone身份认证服务
openstack endpoint create -- region RegionOne identity public http: / / $HOST_NAME : 5000 / v3 # 创建处理外部访问端点
openstack endpoint create -- region RegionOne identity internal http: / / $HOST_NAME : 5000 / v3 # 创建处理内部访问端点
openstack endpoint create -- region RegionOne identity admin http: / / $HOST_NAME : 35357 / v3 # 创建处理admin端点
#创建域、租户、用户和角色openstack domain create -- description "Default Domain" $DOMAIN_NAME # 创建默认域openstack project create -- domain $DOMAIN_NAME -- description "Admin Project" admin # 创建admin租户,拥有平台最高权限
openstack user create -- domain $DOMAIN_NAME -- password $ADMIN_PASS admin # 创建admin用户
openstack role create admin # 创建admin权限
openstack role add -- project admin -- user admin admin # 授予admin用户admin权限openstack project create -- domain $DOMAIN_NAME -- description "Service Project" service # 创建service租户,代表平台内所有的服务openstack project create -- domain $DOMAIN_NAME -- description "Demo Project" demo # 创建demo租户,演示测试的普通用户
openstack user create -- domain $DOMAIN_NAME -- password $DEMO_PASS demo # 创建demo ( 普通) 用户
openstack role create user # 创建普通用户权限
openstack role add -- project demo -- user demo user # 授予demo用户普通用户权限——认证服务Keystone为OpenStack服务和位置提供了一个目录
——OpenStack的所有服务在Keystone提供的目录中必须要有一个服务实例(service entity)和几个API 端点(endpoint)
——Openstack为每个服务提供了三种API 端点:admin、internal和public
——默认情况下,admin API endpoint 允许修改用户和租户(项目),而public 和internal API 不可以
——在生产环境中,出于安全的原因,这三种不同的API 端点位于不同的网络以服务不同类型的用户。例如:public API 网络可用于云环境外的管理工具连接,而admin API 网络可用于内部连接各主机进行管理操作——为非管理的一般性任务而会创建一个权限受限的普通项目(租户)demo和用户demo
unset OS_TOKEN OS_URL #清除环境变量
cat > / etc/ keystone/ admin- openrc. sh << - EOF #创建OpenStack客户端脚本-- - admin用户脚本
export OS_PROJECT_DOMAIN_NAME = $DOMAIN_NAME
export OS_USER_DOMAIN_NAME = $DOMAIN_NAME
export OS_PROJECT_NAME = admin
export OS_USERNAME = admin
export OS_PASSWORD = $ADMIN_PASS
export OS_AUTH_URL = http: / / $HOST_NAME : 5000 / v3
export OS_IDENTITY_API_VERSION = 3
export OS_IMAGE_API_VERSION = 2
EOF cat > / etc/ keystone/ demo- openrc. sh << - EOF #创建OpenStack客户端脚本-- - demo用户脚本
export OS_PROJECT_DOMAIN_NAME = $DOMAIN_NAME
export OS_USER_DOMAIN_NAME = $DOMAIN_NAME
export OS_PROJECT_NAME = demo
export OS_USERNAME = demo
export OS_PASSWORD = $DEMO_PASS
export OS_AUTH_URL = http: / / $HOST_NAME : 5000 / v3
export OS_IDENTITY_API_VERSION = 3
export OS_IMAGE_API_VERSION = 2
EOF ——身份认证服务为OpenStack的所有服务提供了校验的服务
——校验服务会联合使用域名、项目(租户)、用户和角色完成校验
source / etc/ keystone/ admin- openrc. sh #生效admin用户脚本
openstack token issue #获取token