OpenStack Q版部署-keystone

前言

OpenStack系统是由几个单独安装的关键服务组成。这些服务根据我们需求进行选择,包括计算,身份,网络,图像,块存储,对象存储,遥测,编排和数据库服务。

本文介绍如何在控制节点上安装和配置OpenStack的身份服务,也就是keystone。

keystone是非常重要的,在整个OpenStack中需要做验证的地方都是通过keystone完成的。

为了实现可伸缩性,我们还需要部署一个Fernet令牌,做验证还会开启一个Apache HTTP的api来处理请求,这个主要是方便其他程序来连接这个api进行验证


一、简介

在OpenStack环境中,keystone服务用于管理身份验证,授权和服务目录。

keystone身份服务通常是OpenStack交互的时候第一个服务。

身份服务不是一个软件, Identity service是代表OpenStack中一类服务,想要实现身份服务可能有很多办法(例如LDAP),所以不要认为身份服务就是一个软件,他是OpenStack中的一类服务。

身份服务还会提供一个目录服务,在目录服务中查看有哪些计算节点?有哪些网络节点?有哪些存储节点?这些都会在目录服务中进行记录。

这个目录服务是OpenStack中所有服务的一个集合,就是说keystone是一个服务,image、network、compute等都是一个服务,每个服务都会有一个或多个端点,并且每个端点包括三种网络类型:admin,internal或public。

  1. public,可以对外从互联网上进行访问,安全度比较低;
  2. admin,OpenStack中涉及到管理相关的组件,就可以用到admin网络;
  3. internal,OpenStack内部使用和通信的时候使用internal;

身份服务包含的组件:

  • Server ,提供一个REST接口,说白了就是提供一个api端口让我们使用身份验证和授权服务。
  • Drivers 驱动程序,当我们需要去访问外部存储库时使用的确定程序,比如访问mysql数据或者LDAP中存放数据的时候,就需要启动Drivers驱动程序帮我们进行连接了。
  • Modules 模块,用来拦截一些服务的请求,并且提取里面的用户凭证,吧这些请求发送到服务器上去进行验证和授权,这些模块帮助我们实现验证求并发送到服务器上面去。

二、安装

1、前提条件

在安装和配置身份服务之前,必须创建服务对应的数据库。

创建keystone对应的数据库;然后创建keystone用户设置本地访问和远程访问两种访问权限,为了方便远程访问就直接是%,所有IP地址都可以访问,如果是生产环境可以具体制定IP段或者范围,

PS:我这里创建用户设置的密码都是123,因为是自己部署的实验环境,还是简单点好不给自己找麻烦了!

mysql -uroot -pXylong_000
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123';
show databases;

在这里插入图片描述

2、安装和配置

这安装的软件一个keystone的软件,还有就是apache还有就是一个apache的模块wsgi了,他会提供一个对外的api接口用于接收请求,

yum install openstack-keystone httpd mod_wsgi

在这里插入图片描述

修改配置文件

keystone.conf
vim /etc/keystone/keystone.conf 

配置数据库访问

[database]

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

在这里插入图片描述

配置Fernet令牌提供者:

[token]

provider = fernet

在这里插入图片描述

初始化数据库

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

PS:如果执行了初始数据库的命令之后,执行的很快或者是返回查看keystone库中没有对应的表,那么检查配置文件的【database】下面添加的那个connection连接,看看是否写错了。

如果报错了可以查看keystone日志:

cat /var/log/keystone/keystone.log 

这个报错是在keystone配置文件中将数据库的connection连接信息写错了的报错,

2021-01-06 16:10:20.561 31622 CRITICAL keystone [-] Unhandled error: ValueError: invalid literal for int() with base 10: '123controller'

在这里插入图片描述

验证:

查看数据库验证

mysql -uroot -pXylong_000
use keystone
show tables;

在这里插入图片描述

fernet令牌初始化

初始化Fernet密钥存储库:

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

在这里插入图片描述
引导身份服务:
这里的密码设置还是123,注意!

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

在这里插入图片描述

3、配置HTTP

配置 ServerName选项为控制器节点:

vim /etc/httpd/conf/httpd.conf 

在这里插入图片描述
创建文件链接:
这个文件是keystone给我们生成好的,里面内容是创建两个虚拟主机,

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

我们可以查看下这个文件,他是现成的,直接使用就好——》不需要修改,

在这里插入图片描述

设置开机启动并启动http服务

systemctl enable httpd.service
systemctl start httpd.service

验证:

http服务正常启动,5000/35357端口已经打开

netstat -tunpl | grep httpd

在这里插入图片描述

4、创建账号

身份服务为每个OpenStack服务提供身份验证服务。身份验证服务使用域,项目,用户和角色的组合。

在OpenStack环境中创建账号之前我们需要去创建一些东西,

首先是一个domain域,接着在里面创建一个project项目,然后在项目中启动instance实例,

配置环境变量

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

在这里插入图片描述

首先创建domain域:

openstack domain create --description "An Example Domain" example

在这里插入图片描述
接着创建项目,project这里我们创建两个:一个是service | 一个是demo,demo是创建给非特权用户来使用的,

创建service 项目:

openstack project create --domain default   --description "Service Project" service

在这里插入图片描述
创建demo项目:

openstack project create --domain default   --description "Demo Project" demo

在这里插入图片描述
现在我们已经有了一个admin用户了,我们在创建一个非特权用户,

创建demo用户:

openstack user create --domain default   --password-prompt demo

PS:这里用户的密码设置的还是123!!!

在这里插入图片描述
现在我们查看是有两个用户的,admin用户是默认创建的,
在这里插入图片描述

创建user角色并将user角色添加到demo项目和用户:

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

在这里插入图片描述

验证:

首先将url和password两个变量取消

unset OS_AUTH_URL OS_PASSWORD

接着我们通过命令执行URL并手动输入密码来向keyston获取token令牌,如果能成功获取那么说明keyston服务就是没有问题的了。

下面两个命令一个是admin用户,一个是demo非特权用户的,

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

在这里插入图片描述
到现在我们的keyston服务就构建完成了,并且也能够手动的获取token,那么我们就可以查看下上面我们创建的domain域、project项目、user用户、role角色了,

openstack domain list
openstack project list
openstack user list
openstack role list

在这里插入图片描述

三、创建环境变量脚本

在OpenStack环境中执行命令的时候我们是需要输入一些必要的参数的,但是这些参数是非常多而且长的,这就很烦了,每次输入一次命令就要加上这些参数,

为了简化,我们可以将执行命令的时候所需要的参数以变量的方式进行指定,这样我们执行命令前先执行一个脚本将命令所需的参数都运行下,然后在执行命令就简短很多了。

如果将参数以变量的方式写入脚本,就可以将admin用户和非特权用户的参数写成两个脚本,使用的时候只需要执行不同的脚本就可以应用不同的参数了,方便!

为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=demo
export OS_USERNAME=demo
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用户和demo用户的token,这样就比上面执行命令简单很多了

source admin-openrc 
openstack token issue
source demo-openrc 
openstack token issue

在这里插入图片描述

总结:

到现在为止我们keystone服务就部署完成了,而且也已经验证通过了,如果你是在公司中进行OpenStack环境的搭建,你是只需要将硬件和网络准备好的,然后一键执行一个脚本就能将一整套环境拉起来的,但是这样不利于我们进行OpenStack的学习,所以我倾向于手动搭建,一个服务一个服务的部署,这样更有利于我们学习。

kystone服务可以说是OpenStack环境最重要的一个服务,他的主要功能就是负责发布token【令牌】,给用户发布令牌并且提供验证服务,因为OpenStack是由一组服务构成的,每个服务负责一个功能,当他们拼接在一起运行的时候,他们也是需要使用到keystone的,

比如nova启动实例,

  • 首先,是用户给nova服务发送请求,并且将自己的【令牌】发给nova,接着nova就会到keystone进行验证,通过之后就会进行启动实例的操作;
  • 接着,nova启动实例找glance“要”镜像的时候,他也是需要将【令牌】先发送给glance组件的,接着glance组件拿到【令牌】之后也是需要到keystone组件来进行验证的,通过之后才会将镜像给nova服务;
  • 还有一点,当nova启动实例需要用到镜像的时候,我们知道他是要找glance服务要镜像的,但是nova服务是怎么知道glance服务在哪呢?他的api是多少?怎么去找他的啊?——》glance组件的URL和端口号等信息,他也是需要通过keystone服务来获取的;

最后,keystone服务在部署OpenStack环境的时候应该是第一个部署的,并且也是非常重要的,

一般在工作中,他出问题的几率是比较小的,我维护了两年多的时间,也是没见过keystone服务出现问题导致环境不可用的。

接着我们部署第二个服务:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值