openstack实战部署Keystone认证服务及理论介绍

理论介绍:


1、Keystone介绍:

Keystoneopenstack的组件之一,用于为openstack家族中的其他组件成员提供统一的认证服务,包括身份验证、令牌的发放和校验、服务列表、用户权限的定义等等。

2、KeyStone 两大功能:用户与认证、服务目录

用户与认证:用户权限与用户行为跟踪

服务目录:提供一个服务目录,包括所有服务项与相关Api的端点

注意:注册不能多,也不能少,更不能错,要是注册出现问题,可以删除重新建。

2、Keystone使用的名词:User用户、project项目、token令牌、role角色(代表一组用户可以访问的资源权限)、service服务、endpoint端点(每个endpoint有三个访问地址,三个访问地址的权限public公共的、private私有的、admin管理的)

3、keystone模块:

Token:用来生成和管理token

Catalog:用来存储和管理service/endpoint

Identity:用来管理tenant/user/role和验证。

Policy:用来管理访问权限。

4、keystone包括一个命令行接口,可以与keystone API互已管理keystone和相关服务。

Keystone-all用于验证的,面向管理员和用户的API

keystone-manage管理keystone的命令行接口,用于管理与keystone相连接的数据库。

5openstack老版本Tenant租户和User用户:

wKioL1l0CX7jY9sOAADTVJvl_kQ417.png-wh_50

6keystone基本架构:

wKioL1l0CZGDxBjZAAFKjp7HdHY924.png-wh_50



部署并配置Keystone认证服务


1、创建数据库:

mysql -u root -p  (进入数据库)

create database keystone;  (创建keystone库)

create database glance;  (创建glance库)

create database nova;  (创建Nova库)

create database nova_api; (创建Nova_api库)

create database neutron;  (创建neutron库)

create database cinder;    (创建cinder库)

2、授权:

grant all on keystone.* to 'keystone'@'localhost' identified by 'keystone';   (给keystone授权)

grant all on keystone.* to 'keystone'@'%' identified by 'keeystone';    (给keystone授权,在任何上面都可以登录)

grant all on glance.* to 'glance'@'%' identified by 'glance';

grant all on glance.* to 'glance'@'localhost' identified by  'glance';

grant all on nova.* to 'nova'@'localhost' identified by 'nova';

grant all on nova.* to 'nova'@'%' identified by 'nova';

grant all on nova_api.* to 'nova'@'localhost' identified by 'nova';

grant all on nova_api.* to 'nova'@'%' identified by 'nova';

grant all on neutron.* to 'neutron'@'localhost' identified by 'neutron';

grant all on neutron.* to 'neutron'@'%' identified by 'neutron';

grant all on cinder.* to 'cinder'@'localhost' identified by 'cinder';

grant all on cinder.* to 'cinder'@'%' identified by 'cinder';

3、查看创建的数据库:

show databases;

wKiom1l0Cb_haKhXAAAi7qTAN-c781.png-wh_50

4、配置Keystone,修改Keystone配置文件:

vim /etc/keystone/keystone.conf

[database]中修改如下:

connection = mysql+pymysql://keystone:keystone@192.168.56.11/keystone设置数据库

wKioL1l0CdXArDQmAAAJakIcLf8918.png-wh_50

[memcache]中修改如下:

servers = 192.168.56.11:11211

5、初始化keystone

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

注意:初始化keystone,使用的是keystone用户。

6、检查keystone是否初始化成功:

mysql -h 192.168.56.11 -ukeystone -pkeystone -e "use keystone;show tables;"

wKioL1l0CjiyhU_RAABR2AUPRV4378.png-wh_50

wKiom1l0CjiTlFpCAAAfXx00YXc231.png-wh_50

如果创建失败,说明数据库有问题,比如数据库创建失败,权限有问题,数据库连接失败等等。

7、由于使用memcache缓存tokens,上面也在keystonememcache中添加了配置,需要安装memcache

yum -y install memcached python-memcached

8、设置开机自动启动:

systemctl enable memcached.service

systemctl start memcached.service

9、可以在/etc/sysconfig/memcached 中,查看memcache配置:

默认:64

wKiom1l0CojDpp_aAAAR2r_0TzE127.png-wh_50

10、可以查看端口号:

netstat -ntpl  

###可以看到是本地在监听11211端口,如果其他服务器访问,则访问失败,需要修改配置问题。

11、修改memcache配置

 vim /etc/sysconfig/memcached

修改:OPTIONS="-l 192.168.56.11,::1"

wKioL1l0CrDSCwneAAAMDfI3J28350.png-wh_50

12、重启memecache

systemctl restart memcached.service

13、需要在keystone配置中,设置令牌的提供者:

vim /etc/keystone/keystone.conf

修改[token]中,如下:

provider = fernet   ###token提供者

driver = memcache   ###token存放的位置

Ps补充一个小知识,查找keystone的配置。

grep '^[a-z]' /etc/keystone/keystone.conf

connection = mysql+pymysql://keystone:keystone@192.168.56.11/keystone  ###链接数据库

servers = 192.168.56.11:11211      ###memcache地址

provider = fernet      ####token提供者

driver = memcache     ###token存放位置

wKiom1l0CtziOpcFAAAS2Ysh_-U806.png-wh_50

14、初始化key,主要初始化完,生成证书。

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

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

默认会在/etc/keystone 下创建一个fernet-keys目录。

15、初始化的用户,自动创建用户、密码等 (N版才有这个功能)

keystone-manage bootstrap --bootstrap-password admin \

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

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

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

  --bootstrap-region-id RegionOne

wKioL1l0CxHxvAOFAAAZgFjF2ns546.png-wh_50

Ps--bootstrap-admin-url http://192.168.56.11:35357/v3/ \   ###adminurl

  --bootstrap-internal-url http://192.168.56.11:35357/v3/ \   ###内部的url

  --bootstrap-public-url http://192.168.56.11:5000/v3/ \     ###publicurl

这是endpoint的三个url

16、配置apache,设置servername

vim /etc/httpd/conf/httpd.conf

修改ServerName 192.168.56.11:80

17、创建软连接:

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

18、启动Apache服务:

systemctl enable httpd.service

systemctl start httpd.service

验证端口:

19、只要使用keystone就要有验证,keystone提供了两种验证方式:1)选项的方式 2)环境变量

  在这里我们使用环境变量,设置环境变量命令:

export OS_USERNAME=admin   ###用户名

export OS_PASSWORD=admin   ###密码

export OS_PROJECT_NAME=admin   ###哪个项目

export OS_USER_DOMAIN_NAME=default   ###默认的域

export OS_PROJECT_DOMAIN_NAME=default  

export OS_AUTH_URL=http://192.168.56.11:35357/v3  ##验证的url

export OS_IDENTITY_API_VERSION=3            ###端口

wKioL1l0C1HBTP8bAABYbhD0mdc334.png-wh_50

20、执行命令测试,是否可以连接keystone

openstack user list

wKioL1l0C23hLlVJAAAT0wahY78263.png-wh_50

21、创建service项目(安装其他服务,需要连接keystone,连接keystone这些服务和角色属于哪些项目,)

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

wKiom1l0C4fS3hRkAAAt2L_LIrU230.png-wh_50

再查看一下project有几个项目:

wKiom1l0C56CEusUAAARiwEYSxw461.png-wh_50

22、创建一个demo项目:(演示使用)

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

23、创建demo的用户:

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

24、创建一个user角色(一个项目有两种角色admin超级管理员(M版本需要创建,N版不需要创建)和user,这个角色是keystone上的角色)

openstack role create user

25、添加user角色到demo项目和用户:

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

Ps: 以上命令意思为:把demo用户加入到了demo项目,并赋予user角色 

wKioL1l0C-zTpGTqAAAGwvrlo8s558.png-wh_50

26、为了后期方便,也为了不容易出错,在这里我创建其余的用户并添加到相应的项目中,赋予相应的角色:

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

openstack role add --project service --user glance admin

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

openstack role add --project service --user nova admin

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

openstack role add --project service --user neutron admin

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

openstack role add --project service --user cinder admin

   删除用户 、服务、endpoint都一样使用:

openstack user delete 用户ID

27、验证keystone,需要先读取环境变量,由于安全性的原因,关闭临时认证指令牌机制,

第一步:把环境变量取消掉:

unset OS_AUTH_URL OS_PASSWORD

第二步:请求认证指令牌:

openstack --os-auth-url http://192.168.56.11:35357/v3   --os-project-domain-name default --os-user-domain-name default   --os-project-name admin --os-username admin token issue

wKioL1l0DDHwlhczAABbbzO8vHA957.png-wh_50

如果密码错误是什么报错?说明密码错误。

wKiom1l0DDLBss_nAABDHFzuRD4035.png-wh_50

如果获取到token成功,说明你的keystone安装成功。

28、创建admindemo的环境变量脚本:

vim admin-openstack

export OS_USER_DOMAIN_NAME=default

export OS_PROJECT_DOMAIN_NAME=default

export OS_PROJECT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

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

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

vim demo-openstack

export OS_USER_DOMAIN_NAME=default

export OS_PROJECT_DOMAIN_NAME=default

export OS_PROJECT_NAME=demo

export OS_USERNAME=demo

export OS_PASSWORD=demo

export OS_AUTH_URL=http://192.168.56.11:5000/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

29、请求令牌(使用source命令)

source admin-openstack

查看测试结果:

wKiom1l0DKbQJiGYAADxxl0NN84323.png-wh_50

到目前为止说明keystone已经成功,没有问题了!


下次我们来实战部署glance镜像服务!希望大家可以学会!谢谢!