千家信息网

keystone部署及操作

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,目录一 版本信息二 部署keystone三 keystone操作四 验证五 创建脚本六 keystone使用套路总结一、版本信息官网http://docs.openstack.org/newton/i
千家信息网最后更新 2026年11月02日keystone部署及操作

目录

一 版本信息

二 部署keystone

三 keystone操作

四 验证

五 创建脚本

六 keystone使用套路总结


一、版本信息

官网http://docs.openstack.org/newton/install-guide-rdo/keystone.html

我们按照Newton这个版本来部署,其实跟大家讲,openstack基本保持每6个月更新一个版本,面对如此快的版本更迭,我们其实瞅准了一个版本深入研究下去就好,深入到什么层次,为社区提交代码。


二、部署keystone

参考官网http://docs.openstack.org/newton/install-guide-rdo/


系统信息


[root@localhost ~]# cat /etc/redhat-release

CentOS Linux release 7.0.1406 (Core)

[root@localhost ~]# uname -r

3.10.0-123.el7.x86_64

step 1:准备阶段


yum -y install centos-release-openstack-newton #安装官方yum源

yum -y upgrade #更新

yum -y install python-openstackclient #安装工具

yum -y install openstack-selinux #安装openstack-selinux包自动管理openstack组件的安全策略

step 2:部署mariadb


安装


'''

keystone支持ldap和mysql作为后端Driver,用来存放用户相关信息,catalog等,这里我们选用mariadb

'''

yum -y install mariadb mariadb-server python2-PyMySQL

配置:/etc/my.cnf.d/openstack.cnf


[mysqld]

bind-address = 192.168.31.57 #本机管理网络ip


default-storage-engine = innodb

innodb_file_per_table

max_connections = 4096

collation-server = utf8_general_ci

character-set-server = utf8

启动服务且设置开机启动


systemctl start mariadb.service

systemctl enable mariadb.service

初始化数据库(可有可无)


mysql_secure_installation

step 3:部署keystone


keystone关于数据库的操作


mysql -u root -p #登入数据库

CREATE DATABASE keystone; #新建库keystone

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \

IDENTIFIED BY '123'; #新建本地访问keystone库的账号

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \

IDENTIFIED BY '123'; #新建远程访问keystone库的账号

安装软件包


#keystone软件包名openstack-keystone

#安装httpd和mod_wsgi的原因是,社区主推apache+keystone

#openstack-keystone本质就是一款基于wsgi协议的web app,而httpd本质就是一个兼容wsgi协议的web server,所以我们需要为httpd安装mod_wsgi模块

yum -y install openstack-keystone httpd mod_wsgi

配置:/etc/keystone/keystone.conf


#让openstack-keystone能够知道如何连接到后端的数据库keystone

#mysql+pymysql:pymysql是一个python库,使用python可以操作mysql原生sql

[database]

connection = mysql+pymysql://keystone:123@192.168.31.57/keystone

[token]

provider = fernet #fernet为生成token的方式

初始化数据库keystone


#之所以要初始化,是因为python的orm对象关系映射,需要初始化来生成数据库表结构

su -s /bin/sh -c "keystone-manage db_sync" keystone

初始化的时候可能会报错


初始化Fernet key仓库


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

keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

step 4:配置web server整合keystone


修改本机主机名


hostnamectl set-hostname controller

配置/etc/hosts


192.168.31.57 controller

配置/etc/httpd/conf/httpd.conf


ServerName controller

为mod_wsgi模块添加配置文件


#直接拷贝模块文件或者做软连接都可以

ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

启动httpd服务且设置开机自启


systemctl start httpd.service

systemctl enable httpd.service


三、keystone操作


part 1:创建keystone的catalog


配置/etc/keystone/keystone.conf


[DEFAULT]

admin_token = 123

设置环境变量


#OS_TOKEN=配置文件中的admin_token

#会在filter过滤过程中被admin_token_auth中间间设置is_admin=True

#谁有这个admin_token谁就是管理员了。


export OS_TOKEN=123 #等于keystone.conf中admin_token的值

export OS_URL=http://192.168.31.57:35357/v3

export OS_IDENTITY_API_VERSION=3

为keystone创建catalog


#基于上一步给的权限,创建认证服务实体

openstack service create \

--name keystone --description "OpenStack Identity" identity


#基于上一步建立的服务实体,创建访问该实体的三个api端点

openstack endpoint create --region RegionOne \

identity public http://192.168.31.57:5000/v3

openstack endpoint create --region RegionOne \

identity internal http://192.168.31.57:5000/v3

openstack endpoint create --region RegionOne \

identity admin http://192.168.31.57:35357/v3

part 2:创建域,租户,用户,角色,把四个元素关联到一起


The Identity service provides authentication services for each OpenStack service. The authentication service uses a combination of domains, projects, users, and roles.


建立一个公共的域名:


openstack domain create --description "Default Domain" default

创建管理员信息:


#创建admin项目

openstack project create --domain default \

--description "Admin Project" admin

#创建admin用户

openstack user create --domain default \

--password-prompt admin

#创建admin角色

openstack role create admin

#创建上述三者的关联

openstack role add --project admin --user admin admin

part 3:使用Bootstrap完成part1和part2二者的工作


Bootstrap the Identity service:


#本质就是在为keystone创建catalog

keystone-manage bootstrap --bootstrap-password 123 \

--bootstrap-admin-url http://192.168.31.57:35357/v3/ \

--bootstrap-internal-url http://192.168.31.57:35357/v3/ \

--bootstrap-public-url http://192.168.31.57:5000/v3/ \

--bootstrap-region-id RegionOne

设置环境变量(is_admin不会被设置成True,admin用户会获得一个Token)


export OS_USERNAME=admin

export OS_PASSWORD=123 #就是keystone-manage中设定的--bootstrap-password

export OS_PROJECT_NAME=admin

export OS_USER_DOMAIN_NAME=Default

export OS_PROJECT_DOMAIN_NAME=Default

export OS_AUTH_URL=http://192.168.31.57:35357/v3

export OS_IDENTITY_API_VERSION=3


part 4:创建用于后期测试用的项目,用户,租户,建立关联


创建project名为demo


openstack project create --domain default \

--description "Demo Project" demo


创建普通用户demo


openstack user create --domain default \

--password-prompt demo

创建普通用户的角色即user


openstack role create user

建立关联


openstack role add --project demo --user demo user

part 5:为后续的服务创建统一租户service


解释:后面每搭建一个新的服务都需要在keystone中执行四种操作:1.建项目 2.建用户 3.建角色 4.做关联


#后面所有的服务公用一个项目service,都是管理员角色admin

#所以实际上后续的服务安装关于keysotne的操作只剩2,4

openstack project create --domain default \

--description "Service Project" service



四 验证


part 1:准备


出于安全考虑,需要关闭临时令牌认证机制(配置文件中的admin_token和keystone-manage的--bootstrap-password都是基于该机制)


该机制会将用户的请求设置is_admin=True,源码分析中会介绍,先暂且理解到这里


编辑/etc/keystone/keystone-paste.ini

将

[pipeline:public_api]

[pipeline:admin_api]

[pipeline:api_v3]

中的admin_token_auth都去掉

取消一切设置的环境变量,如


unset OS_AUTH_URL OS_PASSWORD

part 2:验证操作方法一


管理员用户admin申请token


openstack --os-auth-url http://controller:35357/v3 \

--os-identity-api-version 3 \

--os-project-domain-name default \

--os-user-domain-name default \

--os-project-name admin \

--os-username admin \

token issue


注意:一定要加上--os-identity-api-version 3


普通用户demo申请token



openstack --os-auth-url http://controller:5000/v3 \

--os-identity-api-version 3 \

--os-project-domain-name default \

--os-user-domain-name default \

--os-project-name demo \

--os-username demo \

token issue



part 3:验证操作方法二



curl -i \

-H "Content-Type: application/json" \

-d '

{

"auth": {

"identity": {

"methods": [

"password"

],

"password": {

"user": {

"domain":{

"name": "default"

},

"name": "admin",

"password": "123"

}

}

},

"scope": {

"project": {

"domain": {

"name":"default"

},

"name": "admin"

}

}

}

}' \


http://127.0.0.1:5000/v3/auth/tokens


五 创建脚本


为了不写一长串的用户信息,可以把他们定义成脚本的方式


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=123

export OS_AUTH_URL=http://192.168.31.57:35357/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

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=123

export OS_AUTH_URL=http://192.168.31.57:35357/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

针对不同的业务应该有不同的用户信息,也都应该定义成脚本形式,方便管理


我们的申请token操作简化成


source admin-openrc

openstack token issue




六 keystone使用套路总结


(1)user归属于一个或多个Project,并且在每个项目中充当一个角色。所以我们需要创建Project,创建User,创建Role,并将User和Project、Role关联起来;



创建域,租户,用户,角色,把四个元素关联到一起

建立一个公共的域名:

openstack domain create --description "Default Domain" default


管理员:admin

openstack project create --domain default \

--description "Admin Project" admin

openstack user create --domain default \

--password-prompt admin

openstack role create admin


openstack role add --project admin --user admin admin


普通用户:demo

openstack project create --domain default \

--description "Demo Project" demo

openstack user create --domain default \

--password-prompt demo

openstack role create user


openstack role add --project demo --user demo user



(2)Keystone本质是提供Identity服务的,所以它的实现或者提供的机制也是基于用户来设计的。为了提供服务目录,配置Keystone的时候创建了一个特殊的ServiceProject,为每个服务创建对应的用户(Nova, Swift, cinder...),并且都归属于ServiceProject。然后配置、设置相应的Endpoint。


为后续的服务创建统一租户service,所有的服务公用一个租户service

openstack project create --domain default \

--description "Service Project" service



建立服务实体service

openstack service create --name glance \

--description "OpenStack Image" p_w_picpath

建端点endpoint

openstack endpoint create --region RegionOne \

p_w_picpath public http://controller01:9292


openstack endpoint create --region RegionOne \

p_w_picpath internal http://controller01:9292

openstack endpoint create --region RegionOne \

p_w_picpath admin http://controller01:9292

六 创建脚本


为了不写一长串的用户信息,可以把他们定义成脚本的方式


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=123

export OS_AUTH_URL=http://192.168.31.57:35357/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

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=123

export OS_AUTH_URL=http://192.168.31.57:35357/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

针对不同的业务应该有不同的用户信息,也都应该定义成脚本形式,方便管理


我们的申请token操作简化成


source admin-openrc

openstack token issue



七 keystone使用套路总结


(1)user归属于一个或多个Project,并且在每个项目中充当一个角色。所以我们需要创建Project,创建User,创建Role,并将User和Project、Role关联起来;


(2)Keystone本质是提供Identity服务的,所以它的实现或者提供的机制也是基于用户来设计的。为了提供服务目录,配置Keystone的时候创建了一个特殊的ServiceProject,为每个服务创建对应的用户(Nova, Swift, cinder...),并且都归属于ServiceProject。然后配置、设置相应的Endpoint。


用户 服务 配置 信息 管理 角色 关联 脚本 数据 数据库 版本 租户 项目 就是 本质 机制 管理员 不同 普通 实体 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技 天津市摩尔互联网科技 广东万易互联网科技有限公司惠州分公司 互联网科技行业发展 互联网品科技 重庆互联网络科技 苏州互联网科技贷款公司 天下捷融互联网科技 卓越科技互联网 招聘 佩信高科技互联网 新华互联网科技2019 互联网对科技的发展 互联网科技大奖都有哪些公司 科技类公司包括互联网吗 互联网行业科技股 广东鹅鹅鹅互联网科技有限公司 上海万顺科技互联网有限公司招聘 三亚科技创新互联网基地 北京品多多互联网科技有限公司 华人运通互联网科技公司 互联网科技工作委员会 上海亿帐通互联网科技 深圳互联网科技怎么样 互联网实体化科技化 苏州五指互联网络科技有限 佛山市翊博互联网络科技有限公司 深圳互联网科技的发展 普陀区互联网教育科技管理办法 山东蛋芒互联网科技有限公司 安徽九吞吴互联网科技有限公司
0