keystone服务
- 前言
- 一、安装
- 1、数据库
- 2、安装软件
- 3、修改配置文件
- 4、初始化Fernet密钥库:
- 5、启动服务并设置环境变量:
- 二、创建身份认证服务:
- 报错:
- 创建domain、project、service、user、role
- 创建环境变量脚本
- 三、验证
前言
OpenStack系统由几个单独安装的关键服务组成。这些服务根据云需求一起工作,包括计算,身份,网络,图像,块存储,对象存储,和数据库服务。
其中最终重要的就是keystone服务,他负责认证工作,用户登录你得找keystone要你的token什么令牌,有了他之后你才能执行操作,创建网络、安全组、启动实例等操作,而且在启动实例的时候,怎么知道去找glance要镜像、找neutron申请网络也是通过keystone,你发出请求glance和neutron就会搭理你吗?你也是需要将keystone颁发给你的token来进行验证的,所以如果搭建OpenStack环境最先搭建的就是keystone服务。
在控制器节点上安装和配置代号为Keystone的OpenStack身份服务。
为了实现可伸缩性,此配置部署了Fernet令牌和Apache HTTP服务器来处理请求。
一、安装
1、数据库
在安装和配置身份服务之前,必须创建数据库。
# mysql -uroot -pXylong_000
MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123';
MariaDB [(none)]> exit
2、安装软件
根据官方文档中的命令进行软件的安装,执行报错,提示没有mod_wsgi软件,
# yum install openstack-keystone httpd mod_wsgi
No match for argument: mod_wsgi
Error: Unable to find a match: mod_wsgi
那就先将keystone和 Apache安装上,
# yum install openstack-keystone httpd
接着查看yum源仓库中到底有没有mod_wsgi软件?——》软件名改变了,
# yum search mod_wsgi
接着修改下软件名字进行安装
# yum install openstack-keystone httpd python3-mod_wsgi.x86_64
3、修改配置文件
# vim /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:123@controller/keystone
[token]
provider = fernet
# su -s /bin/sh -c "keystone-manage db_sync" keystone
# vim /etc/httpd/conf/httpd.conf
ServerName controller
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
4、初始化Fernet密钥库:
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
# keystone-manage bootstrap --bootstrap-password 123 --bootstrap-admin-url http://controller:5000/v3/ --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url http://controller:5000/v3/ --bootstrap-region-id RegionOne
5、启动服务并设置环境变量:
# systemctl enable httpd.service
# systemctl start httpd.service
export OS_USERNAME=admin
export OS_PASSWORD=123
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
二、创建身份认证服务:
身份服务为每个OpenStack服务提供身份验证服务。身份验证服务使用域,项目,用户和角色的组合。
报错:
执行环境变量之后执行创建domain域命令报错,
Failed to discover available identity versions when contacting http://controller:5000/v3. Attempting to parse version from URL.
Unexpected exception for http://controller:5000/v3/auth/tokens: Failed to parse: http://controller:5000/v3/auth/tokens
根据报错提示,手动获取下页面看看什么情况?
{"error":{"code":401,"message":"The request you have made requires authentication.","title":"Unauthorized"}}
分析:
出现报错第一个想法就是去查看日志,现在是刚安装完keystone服务,执行OpenStack命令就报错了,而且在报错提示中是解析URL失败,那么首先就是查看Apache的日志看下时候有error——》没有,
# vim /var/log/httpd/error_log
# vim /var/log/httpd/keystone.log
# vim /var/log/httpd/keystone_access.log
接着查看keystone的日志看下是否有报错——》没有,这说明还没到keystone服务,还是在URL解析的环节,
# vim /var/log/keystone/keystone.log
接着查看Apache的配置文件修改的是正确的、状态是正常的,端口是打开的,访问自带的80端口页面也是没问题的,
# vim /etc/httpd/conf/httpd.conf
ServerName controller
# systemctl status httpd.service
# netstat -tunpl | grep http
# curl http://controller:80
这就奇怪了,
接着检查基础环境看看rabbitMQ、memcache、MySQL、etcd等服务有没有问题——》没有
# systemctl is-active mysqld.service rabbitmq-server.service memcached.service etcd.service chronyd.service
最后,通过百度得到的信息和排查自己的安装过程,发现自己没有执行update命令,没有进行更新
这是作为compute节点的机器内核版本
这个是controller节点执行完update命令之后的内核版本
接着重新制定下环境变量,在执行OpenStack命令就没有问题了,
export OS_USERNAME=admin
export OS_PASSWORD=123
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
# openstack domain create --description "An Example Domain" example
总结:
这个报错产生的原因还是很刺激的,没有按照官方文件中的步骤更新操作系统,但是看到这个报错也是一种积累;
之前在安装Q版的OpenStack的时候,是在centos7.4操作系统上进行的安装,操作系统本身的内核版本是达到安装Q版要求的所以不需要执行,但是现在U版的是centos8.1操作系统,这个是必须要执行下update命令的。
创建domain、project、service、user、role
接着创建域、项目、服务、角色、用户
在OpenStack环境中最先创建的就是一个域,接着下面创建项目、服务、角色、用户,
上面是我们创建domain域的命令,OpenStack默认是有一个Default域的,我们默认也是使用它的,所以自己创建的这个域是不使用的,只是为了展现下命令,
接着创建项目,创建项目的时候需要执行是在哪个domain域下面的
# openstack project create --domain default --description "Service Project" service
# openstack project create --domain default --description "Demo Project" myproject
接着创建用户,这个是普通用户,因为管理员用户默认已经创建了,所以我们创建个普通用户就好,创建的时候也是需要执行域的,
# openstack user create --domain default --password-prompt myuser
接着创建角色,这个是普通角色,管理员角色是默认创建的
# openstack role create myrole
接着给用户绑定角色,这样他就有对应的权限了,
# openstack role add --project myproject --user myuser myrole
最后验证下,看下能够顺利的执行命令获取到keystone的token令牌
这里我们先使用admin用户试下,密码还是123
# unset OS_AUTH_URL OS_PASSWORD
# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue
接着在使用myuser普通用户获取下token,
# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue
现在通过命令可以正常的获取到keystone的token令牌了,说明keystone服务是搭建好了,状态是正常的,
创建环境变量脚本
OpenStack执行命令的时候需要添加很多的参数的,执行域、执行项目、执行用户、执行密码、执行keystone的URL路径,版本号,等等。
如果每执行一条命令都要添加这么一堆参数的话那可就太痛苦了,所以为了方便我们可以将这些每次输入命令都要添加的参数写成环境变量,这样执行命令之前先将环境变量执行下,再执行命令就简单很多了。
现在我们准备环境变量,一个是给admin就是管理员用户使用的,一个是demo给普通用户使用的,
# cat 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://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
# cat demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=123
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
三、验证
验证的过程就可以通过创建的顺序来进行查看,域——》项目——》服务——》角色——》用户
这里我们加载admin的环境变量来执行命令,查看域可以看到我们自己创建的两个域分别是example这个是用来测试命令的,后面不使用,删除或留着都是;Default域使我们要使用的,接下来的项目和服务、实例都是要在这个下面创建的,
接着查看项目,可以看到我们创建的两个项目service和myproject,
# source admin-openrc
# openstack domain list
# openstack project list
接着查看服务,现在我们只是完成了keystone服务的安装和创建,现在只能看到一个,
# openstack service list
接着查看下规则,我们关注两个一个是admin一个是我们创建的myrole,一个是默认创建的admin管理角色,一个是我们创建的myrole作为普通角色,
查看用户的话也是两个一个admin管理用户,一个myuser普通用户,其实在我们的设置的环境变量中,差别就是用户不同,
# openstack role list
# openstack user list
总结:
到这里为止我们的keystone服务就创建部署完成了,只要设置了环境变量之后执行命令没有问题那么就是没有问题了。