keystone认证服务概览

  这个服务还是去看官方文档的介绍,相当于是给所有服务提供一个api接口,因为OpenStack服务有很多,而且端口都不同,没办法把后面所有的端口都记住,只能装一个类似于前台的keystone服务,让这个keystone服务告诉用户每个服务的端口都是什么。后续安装其他OpenStack服务的步骤大致如下:

  • 在MySQL上面创库授权
  • keystone上面创建用户,并关联角色
  • 在keystone上面注册api
  • yum安装服务的软件包
  • 修改服务的配置文件
  • 同步数据库
  • 启动服务
      后面的服务都要遵循这个规则,唯独现在的keystone不需要,因为keystone相当于一个大哥。

安装和配置

  • 创库授权:
      在mysql中执行下面的命令(直接在终端输入mysql即可进入):
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';
exit

  直接复制粘贴即可,在keystone在没有配置好之前可以设置一个管理员token(令牌)。这个管理员token相当于是一个过渡的。这里官方文档输入了命令生成,但是我们这里不要去生成,因为后面的配置文件都是默认的管理员token,现在生成一个随机值的话,后面的配置文件都需要去修改,很麻烦。

  • 安装keystone相关软件包
      这里装的包是http和wsgi,这个http很容易理解,wsgj回顾以前讲nginx的时候说用fastcgi来对接php服务,现在OpenStack是python代码,所以python这边用的是wsgj来对接的,同理nginx和http是一样的套路,所以这里对接wsgj。
yum install openstack-keystone httpd mod_wsgi -y

  装完之后我们需要修改配置文件,安装一个OpenStack的工具包,方便修改配置文件:

yum install openstack-utils -y

  装完之后修改的配置文件只需要修改三行,这个配置文件是真的长2000多行,我们输入下面的命令先过滤掉注释然后备份一下文件,接着用OpenStack工具包去修改配置文件即可:

\cp /etc/keystone/keystone.conf{,.bak}
grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf
openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token  ADMIN_TOKEN
openstack-config --set /etc/keystone/keystone.conf database connection  mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
openstack-config --set /etc/keystone/keystone.conf token provider  fernet

  可以去配置文件里面看看是否修改成功了,一般都是成功了,然后和我对一下md5值,如果你的系统啥都都是跟我一样,那么你的md5值也是一样的:

[root@controller opt]# md5sum /etc/keystone/keystone.conf
d5acb3db852fe3f247f4f872b051b7a9  /etc/keystone/keystone.conf

  如果md5值不一样,那就把上面的命令再执行一下,如果还不一样那么就可能是你的系统版本和我的不一样。

  • 同步数据库
      现在同步数据库,一定要注意下面的命令全部复制粘贴,不要看前面有个su就只复制后面的那是不可以的:
su -s /bin/sh -c "keystone-manage db_sync" keystone

  同步时间稍长,之后输入下面的命令看有没有结果:

mysql keystone -e 'show databases;'

  一般都是有结果的,如果没有那么就是你的数据库没有做初始化操作,在上一节的初始化操作那里没有做好

  • 初始化fernet
      执行下面的命令,因为刚才的配置文件最后一行用的模式是fernet:
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
  • 配置httpd
      根据官方文档把httpd的配置文件里写上controller:
echo "ServerName controller" >>/etc/httpd/conf/httpd.conf

  用vi修改配置文件,这里一定要记得进入了 vi之后按i进入插入模式再粘贴:

vi /etc/httpd/conf.d/wsgi-keystone.conf

  粘贴内容如下,监听一个35357端口和一个5000端口:

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-error.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-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

  之后检查httpd配置文件的md5值:

[root@controller ~]# md5sum /etc/httpd/conf.d/wsgi-keystone.conf
8f051eb53577f67356ed03e4550315c2  /etc/httpd/conf.d/wsgi-keystone.conf

  结果应该跟上面一样才对,否则就检查你的配置文件吧。

  • 启动httpd
      一样的话就启动httpd:
systemctl enable httpd.service
systemctl start httpd.service

  启动成功之后会有一个35357和5000端口

创建服务和注册api

  这里会用到刚才的管理员token。

export OS_TOKEN=ADMIN_TOKEN
export OS_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3

  执行完之后查看环境变量有没有上面三条:

[root@controller ~]# env|grep OS
HOSTNAME=controller
OS_IDENTITY_API_VERSION=3
OS_TOKEN=ADMIN_TOKEN
OS_URL=http://controller:35357/v3

  输出的结果就是上面的token,有了这个环境变量才可以注册api

openstack service create \
  --name keystone --description "OpenStack Identity" identity
  
openstack endpoint create --region RegionOne \
  identity public http://controller:5000/v3
  
openstack endpoint create --region RegionOne \
  identity internal http://controller:5000/v3
  
openstack endpoint create --region RegionOne \
  identity admin http://controller:35357/v3

  上面是4条命令,直接全部复制粘贴即可,之后验证命令分别输入:

openstack service list
openstack endpoint list

  一个是查看服务,一个是查看api接口的,我直接给个图,大家必须要输出成下面的样子才行,服务有一个,接口有三个,顺序和id不一样没关系:

创建域、项目、用户和角色

  创建一个default域,再创建项目,再创建用户,最后再把这个用户给一个admin的角色。到最后的最后再给权限。直接批量执行:

openstack domain create --description "Default Domain" default

openstack project create --domain default \
  --description "Admin Project" admin
  
openstack user create --domain default \
  --password ADMIN_PASS admin
  
openstack role create admin
openstack role add --project admin --user admin admin
openstack project create --domain default \
  --description "Service Project" service

  检验的命令:

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

  结果如图:
pELv.png

验证操作

  创建环境变量脚本,这个文件创建在root目录下就行了

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

  保存之后输入下面的命令让环境变量生效:

source admin-openrc

  生效了之后输入下面的命令如果输出和我一样就对了:

openstack token issue
openstack user list

  如果你的报错了请检查你的密码设置。我这里用的默认的ADMIN_PASS,输入“unset OS_TOKEN OS_URL”可以重置环境变量
  pfte.png

到此keystone服务安装完成

最后修改:2020 年 06 月 17 日 10 : 39 AM
请俺喝杯咖啡呗