ubuntu 16.04 上安装OpenStack Mitaka (all-in-one):keystone 安装与配置

       keystone的安装过程费了我好几天时间,主要是卡在了数据库同步上面,各种报错。

      

       1. 准备工作

       操作1.1:以root身份进入SQL数据库,进入后创建keystone数据库:CREATE DATABASE keystone

       操作1.2:依旧在数据库内,进行keystone用户创建与授权,命令直接截取官网说明,如下所示

      

       注意修改KEYSTONE_DBPASS为自己所要设置的密码

       操作1.3:退出数据库,回到命令行界面,执行 openssl rand -hex 10,得到一串字符,将会用作临时的admin token,在后续安装

                         中起左右,一定要记录下来。 


       2. 安装与配置keystone

       操作2.1:安装命令 apt-get install keystone apache2 libapache2-mod-wsgi

       操作2.2:编辑 /etc/keystone/keystone.conf,需要改动的地方如下所示,本处的配置与Liberty版本差异较大

                         2.2.1:在[DEFAULT]下,写入 ,这就是刚才操作1.3所生成的token

                         2.2.2:在[database]下,写入,其

                                      中KEYSTONE_DBPASS就是在操作1.2中设置的密码

                         2.2.3:在[token]下,写入

       操作2.3:同步数据库命令 su -s /bin/sh -c "keystone-manage db_sync" keystone,在执行本命令时,先后出现了2个错误

                         错误一:无法连接数据库,解决方案时在环境准备时(见上一篇文章),在hosts文件中写入 127.0.0.1  controller

                         错误二:在修正了错误一后,执行同步命令,结果出现 specified key was too long; max key length is 767 bytes。仔细

                                         研究了一下,是SQL数据库的编码设置出了问题。openstack采用的数据库默认编码是utf8,我们可以看到在

                                         上一篇文章环境准备中,安装完MariaDB后,配置openstack.conf文件时,写入的默认编码是utf8,如下图:

                                         

                                          可是当我们进入数据库后,输入命令 show variables like "%char%"时,显示的编码方式多数都是utf8mb4

                                       (原谅我没有截图)。utf8mb4是utf8的超集,在utf8mb4编码下一个字符4个字节,而在utf8编码下一个字符3个

                                          字节。也就是说,在max key length 是767字节的情况下,如果使用的是utf8mb4编码,则在创建表格时,表

                                          格中定义的变量长度不能超过191个字符。可是在同步keystone的表格操作过程中,会出现变量长度达到250

                                          的情况,这样就出现了上述的错误。

                                          解决方案是:将/etc/mysql/mariadb.conf.d目录下的所有.cnf文件中出现uft8mb4的地方都修改成uft8,然后重

                                          启数据库。重启完之后我们再进入数据库,输入命令 show variables like "%char%"后,出现表格内容如下:

                                          ubuntu 16.04 上安装OpenStack Mitaka (all-in-one):keystone 安装与配置_第1张图片

                                          此后,再执行keystone的同步操作,顺利执行。


       操作2.4:执行命令 keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

       操作2.5:执行命令 echo "manual" > /etc/init/keystone.override;这步骤在官网安装说明中是放到keystone安装与配置的第一步

                         的,其作用是将keystone服务设置为开机不自动启动,理由是keystone服务在Liberty和Mitaka版本中唯一的作用就是数

                         据库同步,而不再用作keystone模块的管理。我在若干次的openstack安装过程中,在keystone同步前发生了机器重启

                         的情况,keystone服务没有启动起来,结果同步命令出错。所以,将这步骤放到同步完成之后,最为保险。


       3. 配置Apache HTTP服务

       Apache2已经安装过了,见前面的步骤,此处仅仅需要进行一些配置工作。

       操作3.1:编辑 /etc/apache2/apache2.conf,在任意位置处写上 ServerName controller

       操作3.2:创建文件 /etc/apache2/sites-available/wsgi-keystone.conf,将下面内容拷贝进去即可,可直接去官网

                         http://docs.openstack.org/mitaka/install-guide-ubuntu/keystone-install.html 处拷贝文件内容:

                         ubuntu 16.04 上安装OpenStack Mitaka (all-in-one):keystone 安装与配置_第2张图片

       操作3.3:执行 ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled

       操作3.4:执行 service apache2 restart

       操作3.5:扫尾工作 rm -f /var/lib/keystone/keystone.db

       至此,身份认证模块keystone就已经安装配置完毕了。


       4. 创建服务实体与API end point

       openstack中每个服务都需要创建服务实体,相当于在keystone进行注册,之后对这些注册服务的任何访问都需要通过keystone 来进行认证。对于keystone来说,openstack上所有安装的服务都是它的用户。这里,需要理解keystone中很多术语的概念,例如domain、project、group、user、role、region等,以及它们之间的关系。在下一篇文章中,我会详细给出我对这些概念和关系的理解,在此处只给出命令,不做具体解释。所执行命令与官网完全一致,命令执行结果没有截图,因为当初还没想着写blog。

        操作4.1:创建环境变量

                          export OS_TOKEN=ADMIN_TOKEN  (ADMIN_TOKEN 是之前创建的临时token,不能写错)
                          export OS_URL=http://controller:35357/v3

                          export OS_IDENTITY_API_VERSION=3

         操作4.2:创建服务实体与API URL,注意任何服务都要创建3个API URL,给不同权限的实体(用户、其他服务等)使用

                           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


       5. 创建domain、project、user、role等

       操作5.1:创建default domain:openstack domain create --description "Default Domain" default

       操作5.2:创建admin project: openstack project create --domain default --description "Admin Project" admin

       操作5.3:创建admin user:openstack user create --domain default --password-prompt admin

       操作5.4:创建admin role:openstack role create admin

       操作5.5:将admin角色赋予admin项目与admin用户,意思是admin用户对admin项目中的所有资源拥有admin权限:

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

       操作5.6:创建service project:openstack project create --domain default --description "Service Project" service

       操作5.7:创建demo project:openstack project create --domain default --description "Demo Project" demo

       操作5.8:创建demo user: openstack user create --domain default --password-prompt demo

       操作5.9:创建user role:openstack role create user

       操作5.10:将user角色赋予demo项目的demo用户,意思是demo用户对demo项目中的所有资源拥有user权限:

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


       6.验证操作

       大家可以看到,之前步骤4-5的各种创建命令,都是比较短的,而实际上openstack命令是很长的,包含很多变量值的输入,之所以可以用短命令,是因为我们在操作4.1中设置了环境变量,这样openstack命令在执行时会检查一些必要的参数有没有值,如果没有的话就去环境变量里面找。我们之前在环境变量中写入了admin_token,这是非常不安全的。

       官网上的验证操作中第一步就是设置禁用临时token认证的方式,如下所示(懒得翻译了)

      

       第二步取消我们在操作4.1中设置的环境变量:unset OS_TOKEN OS_URL

       第三步,输入一个完整的命令来获取admin用户的token,其实就是对admin用户进行身份验证,然后返回一个token,命令如下:

                       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

       第四步则是对demo用户进行身份验证

       在官网说明最后有这样一个步骤-Create OpenStack client environment scripts (see http://docs.openstack.org/mitaka/install-guide-ubuntu/keystone-openrc.html),它的作用其实就是写了一个脚本,执行环境变量的创建,简化openstack命令长度。

 

      至此,keystone 身份认证模块安装配置完毕。

你可能感兴趣的:(openstack)