经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » openstack » 查看文章
OpenStack教程-03.在CentOS7.5上安装OpenStack-Rocky-安装Keyston认证服务组件
来源:cnblogs  作者:天生帅才  时间:2018/10/29 9:39:53  对本文有异议

本文分享openstack的认证服务组件keystone

--------------- 完美的分割线 ----------------

3.0.keystone认证服务

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

  1. User 用户
  2. Tenant 租户
  3. Token 令牌
  4. Role 角色

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

  1. Service 服务
  2. Endpoint 端点

3.1.在控制节点创建keystone相关数据库

1)创建keystone数据库并授权

  1. mysql -p123456
  2. --------------------------------
  3. CREATE DATABASE keystone;
  4. GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
  5. GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
  6. flush privileges;
  7. show databases;
  8. select user,host from mysql.user;
  9. exit
  10. --------------------------------

3.2.在控制节点安装keystone相关软件包

1)安装keystone相关软件包

# 配置Apache服务,使用带有“mod_wsgi”的HTTP服务器来相应认证服务请求,端口为5000和35357, 默认情况下,Kestone服务仍然监听这些端口

  1. yum install openstack-keystone httpd mod_wsgi -y
  2. yum install openstack-keystone python-keystoneclient openstack-utils -y

2)快速修改keystone配置

# 下面使用的快速配置方法需要安装Openstack-utils才可以实现

  1. openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:keystone@controller/keystone
  2. openstack-config --set /etc/keystone/keystone.conf token provider fernet

# 注意:keystone不需要连接rabbitmq

# 查看生效的配置

  1. egrep -v "^#|^$" /etc/keystone/keystone.conf

# 其他方式查看生效配置

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

# 实例演示:

  1. [root@openstack01 tools]# grep '^[a-z]' /etc/keystone/keystone.conf
  2. connection = mysql+pymysql://keystone:keystone@controller/keystone
  3. provider = fernet

# keystone不需要启动,通过http服务进行调用

3.3.初始化同步keystone数据库

1)同步keystone数据库(44张)

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

2)同步完成进行连接测试

# 保证所有需要的表已经建立,否则后面可能无法进行下去

  1. mysql -h192.168.1.81 -ukeystone -pkeystone -e "use keystone;show tables;"

实例演示:

  1. [root@openstack01 ~]# mysql -h192.168.1.81 -ukeystone -pkeystone -e "use keystone;show tables;"
  2. +-----------------------------+
  3. | Tables_in_keystone |
  4. +-----------------------------+
  5. | access_token |
  6. | application_credential |
  7. | application_credential_role |
  8. | assignment |
  9. | config_register |
  10. | consumer |
  11. | credential |
  12. | endpoint |
  13. | endpoint_group |
  14. | federated_user |
  15. | federation_protocol |
  16. | group |
  17. | id_mapping |
  18. | identity_provider |
  19. | idp_remote_ids |
  20. implied_role |
  21. limit |
  22. | local_user |
  23. | mapping |
  24. | migrate_version |
  25. | nonlocal_user |
  26. | password |
  27. | policy |
  28. | policy_association |
  29. | project |
  30. | project_endpoint |
  31. | project_endpoint_group |
  32. | project_tag |
  33. | region |
  34. | registered_limit |
  35. | request_token |
  36. | revocation_event |
  37. | role |
  38. | sensitive_config |
  39. | service |
  40. | service_provider |
  41. | system_assignment |
  42. | token |
  43. | trust |
  44. | trust_role |
  45. | user |
  46. | user_group_membership |
  47. | user_option |
  48. | whitelisted_config |
  49. +-----------------------------+
  50. [root@openstack01 ~]# mysql -h192.168.1.81 -ukeystone -pkeystone -e "use keystone;show tables;"|wc -l
  51. 45

3.4.初始化Fernet令牌库

# Initialize Fernet key repositories:

# 关于Fernet令牌可以参考:https://blog.csdn.net/wllabs/article/details/79064094

# 以下命令无返回信息

  1. keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
  2. keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

3.5.配置启动Apache(httpd) 

1)修改httpd主配置文件

  1. vim /etc/httpd/conf/httpd.conf +95
  2. ----------------------------------
  3. ServerName controller
  4. ----------------------------------

# 或者

  1. sed -i "s/#ServerName www.example.com:80/ServerName 192.168.1.81/" /etc/httpd/conf/httpd.conf
  2. cat /etc/httpd/conf/httpd.conf |grep ServerName

2)配置虚拟主机

# 创建keystone虚拟主机配置文件的快捷方式,也可以复制过来

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

# 或者可以手动编辑创建该文件

  1. cat /usr/share/keystone/wsgi-keystone.conf
  2. -------------------------------
  3. [root@openstack01 ~]# cat /usr/share/keystone/wsgi-keystone.conf
  4. Listen 5000
  5.  
  6. <VirtualHost *:5000>
  7. WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
  8. WSGIProcessGroup keystone-public
  9. WSGIScriptAlias / /usr/bin/keystone-wsgi-public
  10. WSGIApplicationGroup %{GLOBAL}
  11. WSGIPassAuthorization On
  12. LimitRequestBody 114688
  13. <IfVersion >= 2.4>
  14. ErrorLogFormat "%{cu}t %M"
  15. </IfVersion>
  16. ErrorLog /var/log/httpd/keystone.log
  17. CustomLog /var/log/httpd/keystone_access.log combined
  18. <Directory /usr/bin>
  19. <IfVersion >= 2.4>
  20. Require all granted
  21. </IfVersion>
  22. <IfVersion < 2.4>
  23. Order allow,deny
  24. Allow from all
  25. </IfVersion>
  26. </Directory>
  27. </VirtualHost>
  28. Alias /identity /usr/bin/keystone-wsgi-public
  29. <Location /identity>
  30. SetHandler wsgi-script
  31. Options +ExecCGI
  32. WSGIProcessGroup keystone-public
  33. WSGIApplicationGroup %{GLOBAL}
  34. WSGIPassAuthorization On
  35. </Location>
  36. --------------------------------

3)启动httpd并配置开机自启动

  1. systemctl start httpd.service
  2. systemctl status httpd.service
  3. netstat -anptl|grep httpd
  4. systemctl enable httpd.service
  5. systemctl list-unit-files |grep httpd.service

# 如果http起不来,需要关闭 selinux 或者安装 yum install openstack-selinux

实例演示:

  1. [root@openstack01 ~]# systemctl start httpd.service
  2. [root@openstack01 ~]# systemctl status httpd.service
  3. httpd.service - The Apache HTTP Server
  4. Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
  5. Active: active (running) since 2018-10-26 18:06:20 CST; 98ms ago
  6. Docs: man:httpd(8)
  7. man:apachectl(8)
  8. Main PID: 1978 (httpd)
  9. Status: "Processing requests..."
  10. CGroup: /system.slice/httpd.service
  11. ├─1978 /usr/sbin/httpd -DFOREGROUND
  12. ├─1981 (wsgi:keystone- -DFOREGROUND
  13. ├─1982 (wsgi:keystone- -DFOREGROUND
  14. ├─1983 (wsgi:keystone- -DFOREGROUND
  15. ├─1984 (wsgi:keystone- -DFOREGROUND
  16. ├─1985 (wsgi:keystone- -DFOREGROUND
  17. ├─1986 /usr/sbin/httpd -DFOREGROUND
  18. ├─1988 /usr/sbin/httpd -DFOREGROUND
  19. └─1989 /usr/sbin/httpd -DFOREGROUND
  20. 10 26 18:06:20 openstack01.zuiyoujie.com systemd[1]: Starting The Apache HTTP Server...
  21. 10 26 18:06:20 openstack01.zuiyoujie.com systemd[1]: Started The Apache HTTP Server.
  22. [root@openstack01 ~]# netstat -anptl|grep httpd
  23. tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 1978/httpd
  24. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1978/httpd
  25. [root@openstack01 ~]# systemctl enable httpd.service
  26. Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
  27. [root@openstack01 ~]# systemctl list-unit-files |grep httpd.service
  28. httpd.service enabled

# 至此,http服务配置完成

3.6.初始化keystone认证服务

1)创建 keystone 用户,初始化的服务实体和API端点

# 在之前的版本(queens之前),引导服务需要2个端口提供服务(用户5000和管理35357),本版本通过同一个端口提供服务

# 创建keystone服务实体和身份认证服务,以下三种类型分别为公共的、内部的、管理的。

# 需要创建一个密码ADMIN_PASS,作为登陆openstack的管理员用户,这里创建为123456

  1. keystone-manage bootstrap --bootstrap-password ADMIN_PASS --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

# 以下为命令实例:

  1. keystone-manage bootstrap --bootstrap-password 123456 --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

# 运行这条命令,会在keystone数据库执增加以下任务,之前的版本需要手动创建:

  1. 1)在endpoint表增加3个服务实体的API端点
  2. 2)在local_user表中创建admin用户
  3. 3)在project表中创建adminDefault项目(默认域)
  4. 4)在role表创建3种角色,adminmemberreader
  5. 5)在service表中创建identity服务

2)临时配置管理员账户的相关变量进行管理

# 这里的export OS_PASSWORD要使用上面配置的ADMIN_PASS

  1. export OS_PROJECT_DOMAIN_NAME=Default
  2. export OS_PROJECT_NAME=admin
  3. export OS_USER_DOMAIN_NAME=Default
  4. export OS_USERNAME=admin
  5. export OS_PASSWORD=123456
  6. export OS_AUTH_URL=http://controller:5000/v3
  7. export OS_IDENTITY_API_VERSION=3

# 查看声明的变量

  1. env |grep OS_

实例演示:

  1. [root@openstack01 ~]# env|grep OS_
  2. OS_USER_DOMAIN_NAME=Default
  3. OS_PROJECT_NAME=admin
  4. OS_IDENTITY_API_VERSION=3
  5. OS_PASSWORD=123456
  6. OS_AUTH_URL=http://controller:5000/v3
  7. OS_USERNAME=admin
  8. OS_PROJECT_DOMAIN_NAME=Default

# 之前的版本采用admin_token来设置初始化的管理用户认证令牌,类似下面的

  1. export OS_TOKEN=c0053993bb39ad3de84a
  2. export OS_URL=http://192.168.1.81:35357/v3
  3. export OS_IDENTITY_API_VERSION=3
  4. export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

附:常用的openstack管理命令,需要应用管理员的环境变量

# 查看keystone实例相关信息

  1. openstack endpoint list
  2. openstack project list
  3. openstack user list

实例演示:

  1. [root@openstack01 ~]# openstack endpoint list
  2. +----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+
  3. | ID | Region | Service Name | Service Type | Enabled | Interface | URL |
  4. +----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+
  5. | b8dabe6c548e435eb2b1f7efe3b23236 | RegionOne | keystone | identity | True | admin | http://controller:5000/v3/ |
  6. | eb72eb6ea51842feb67ba5849beea48c | RegionOne | keystone | identity | True | internal | http://controller:5000/v3/ |
  7. | f172f6159ad34fbd8e10e0d42828d8cd | RegionOne | keystone | identity | True | public | http://controller:5000/v3/ |
  8. +----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+
  9. [root@openstack01 ~]# openstack project list
  10. +----------------------------------+-----------+
  11. | ID | Name |
  12. +----------------------------------+-----------+
  13. | 3706708374804e2eb4ed056f55d84666 | admin |
  14. | 84cc7185f2c8461eb19a14968228b272 | myproject |
  15. | b8e318b3c7a844708762169959c34ff8 | service |
  16. +----------------------------------+-----------+
  17. [root@openstack01 ~]# openstack user list
  18. +----------------------------------+--------+
  19. | ID | Name |
  20. +----------------------------------+--------+
  21. | cbb2b3830a8f44bc837230bca27ae563 | myuser |
  22. | e5dbfc8b394c41679fd5ce229cdd6ed3 | admin |
  23. +----------------------------------+--------+

# 删除endpoint

# 以前的版本单独创建endpoint可能会出错需要删除,新版本已经优化好,只要系统配置没问题,会自动生成一般也不会出错

  1. openstack endpoint delete [ID]

3.7.创建keystone的一般实例

# Create a domain, projects, users, and roles

https://docs.openstack.org/keystone/rocky/install/keystone-users-rdo.html

1)创建一个名为example的keystone域

# 以下命令会在project表中创建名为example的项目

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

实例演示:

  1. [root@openstack01 ~]# openstack domain create --description "An Example Domain" example
  2. +-------------+----------------------------------+
  3. | Field | Value |
  4. +-------------+----------------------------------+
  5. | description | An Example Domain |
  6. | enabled | True |
  7. | id | 17254ea898de477ca4a1f6f3cbc6c5bc |
  8. | name | example |
  9. | tags | [] |
  10. +-------------+----------------------------------+

2)为keystone系统环境创建名为service的项目提供服务

# 用于常规(非管理)任务,需要使用无特权用户

# 以下命令会在project表中创建名为service的项目

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

实例演示:

  1. [root@openstack01 ~]# openstack project create --domain default --description "Service Project" service
  2. +-------------+----------------------------------+
  3. | Field | Value |
  4. +-------------+----------------------------------+
  5. | description | Service Project |
  6. | domain_id | default |
  7. | enabled | True |
  8. | id | b8e318b3c7a844708762169959c34ff8 |
  9. | is_domain | False |
  10. | name | service |
  11. | parent_id | default |
  12. | tags | [] |
  13. +-------------+----------------------------------+

3)创建myproject项目和对应的用户及角色

# 作为一般用户(非管理员)的项目,为普通用户提供服务

# 以下命令会在project表中创建名为myproject项目

  1. openstack project create --domain default --description "Demo Project" myproject

实例演示:

  1. [root@openstack01 ~]# openstack project create --domain default --description "Demo Project" myproject
  2. +-------------+----------------------------------+
  3. | Field | Value |
  4. +-------------+----------------------------------+
  5. | description | Demo Project |
  6. | domain_id | default |
  7. | enabled | True |
  8. | id | 84cc7185f2c8461eb19a14968228b272 |
  9. | is_domain | False |
  10. | name | myproject |
  11. | parent_id | default |
  12. | tags | [] |
  13. +-------------+----------------------------------+

4)在默认域创建myuser用户

# 使用--password选项为直接配置明文密码,使用--password-prompt选项为交互式输入密码
# 以下命令会在local_user表增加myuser用户

  1. openstack user create --domain default --password-prompt myuser # 交互式输入密码
  2. # openstack user create --domain default --password=myuser myuser # 直接创建用户和密码

实例演示:

  1. [root@openstack01 ~]# openstack user create --domain default --password-prompt myuser
  2. User Password:
  3. Repeat User Password:
  4. +---------------------+----------------------------------+
  5. | Field | Value |
  6. +---------------------+----------------------------------+
  7. | domain_id | default |
  8. | enabled | True |
  9. | id | cbb2b3830a8f44bc837230bca27ae563 |
  10. | name | myuser |
  11. | options | {} |
  12. | password_expires_at | None |
  13. +---------------------+----------------------------------+

5)在role表创建myrole角色

  1. openstack role create myrole

实例演示:

  1. [root@openstack01 ~]# openstack role create myrole
  2. +-----------+----------------------------------+
  3. | Field | Value |
  4. +-----------+----------------------------------+
  5. | domain_id | None |
  6. | id | 75ac33f79cc945afa42a18a3dd0ba0ad |
  7. | name | myrole |
  8. +-----------+----------------------------------+

6)将myrole角色添加到myproject项目中和myuser用户组中

# 以下命令无返回,数据表操作不太明显

  1. openstack role add --project myproject --user myuser myrole

3.8.验证操作keystone是否安装成功

1)去除环境变量

# 关闭临时认证令牌机制,获取 token,验证keystone配置成功

  1. unset OS_AUTH_URL OS_PASSWORD
  2. env |grep OS_

2)作为管理员用户去请求一个认证的token

# 测试是否可以使用admin账户进行登陆认证,请求认证令牌

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

实例演示:

  1. [root@openstack01 ~]# openstack --os-auth-url http://controller:5000/v3 \
  2. > --os-project-domain-name Default --os-user-domain-name Default > --os-project-name admin --os-username admin token issue
  3. Password:
  4. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  5. | Field | Value |
  6. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  7. | expires | 2018-10-26T11:48:40+0000 |
  8. | id | gAAAAABb0vEIENgBaYEBJZSJX7RDelXdM2sHi_hbfT-FHTjd3z5j5Mt-sssJpW1EXeWVAbMdyBI2t9XNCxG5m1XNm_2k1xWP7WnbOYAp1rl2FZCwz4LL0F-mER_bOW-HnE0rjA6YvP0MzW4HVg0eEE_6zACr0R0NaaVytK_eRsvO_Lhco6vacYY |
  9. | project_id | 3706708374804e2eb4ed056f55d84666 |
  10. | user_id | e5dbfc8b394c41679fd5ce229cdd6ed3 |
  11. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

3)使用普通用户获取认证token

# 以下命令使用”myuser“用户的密码和API端口5000,只允许对身份认证服务API的常规(非管理)访问。

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

实例演示:

  1. [root@openstack01 ~]# openstack --os-auth-url http://controller:5000/v3 \
  2. > --os-project-domain-name Default --os-user-domain-name Default > --os-project-name myproject --os-username myuser token issue
  3. Password:
  4. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  5. | Field | Value |
  6. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  7. | expires | 2018-10-26T11:49:18+0000 |
  8. | id | gAAAAABb0vEuxOrgkmLfcZJl8vB6dJyrHFtvxBT1m7qLYzuD-WkOVoQUzE9mTGcrKE6CrZbLU57Nc7mv-50-ggH9pf2qrW5uWQu7MRJcUb3rgpmoYn7EVdv8X0lGK3IiWEPSF48u1b2y7mEmvYb7TGOFO8l87of6L2aaJmdMxp9KgM87_3Mu2-g |
  9. | project_id | 84cc7185f2c8461eb19a14968228b272 |
  10. | user_id | cbb2b3830a8f44bc837230bca27ae563 |
  11. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

 

3.9.创建OpenStack客户端环境脚本

# Create OpenStack client environment scripts

# 上面使用环境变量和命令选项的组合通过“openstack”客户端与身份认证服务交互。
# 为了提升客户端操作的效率,OpenStack支持简单的客户端环境变量脚本即OpenRC 文件,我这里使用自定义的文件名

1)创建admin用户的环境管理脚本

  1. # vim admin-openrc
  2. cd /server/tools
  3. vim keystone-admin-pass.sh
  4. ----------------------------------
  5. export OS_PROJECT_DOMAIN_NAME=Default
  6. export OS_USER_DOMAIN_NAME=Default
  7. export OS_PROJECT_NAME=admin
  8. export OS_USERNAME=admin
  9. export OS_PASSWORD=123456
  10. export OS_AUTH_URL=http://controller:5000/v3
  11. export OS_IDENTITY_API_VERSION=3
  12. export OS_IMAGE_API_VERSION=2
  13. ----------------------------------
  14. env |grep OS_

# 应用:
如果修改dashboard登陆密码忘记了,可以使用admin_token认证机制修改登陆密码

2)创建普通用户myuser的客户端环境变量脚本

  1. vim keystone-myuser-pass.sh
  2. -------------------------------
  3. export OS_PROJECT_DOMAIN_NAME=Default
  4. export OS_USER_DOMAIN_NAME=Default
  5. export OS_PROJECT_NAME=myproject
  6. export OS_USERNAME=myuser
  7. export OS_PASSWORD=myuser
  8. export OS_AUTH_URL=http://controller:5000/v3
  9. export OS_IDENTITY_API_VERSION=3
  10. export OS_IMAGE_API_VERSION=2
  11. -------------------------------

3)测试环境管理脚本

# 使用脚本加载相关客户端配置,以便快速使用特定租户和用户运行客户端

  1. source keystone-admin-pass.sh

4)请求认证令牌

  1. openstack token issue

实例演示:

  1. [root@openstack01 tools]# openstack token issue
  2. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  3. | Field | Value |
  4. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  5. | expires | 2018-10-26T12:13:28+0000 |
  6. | id | gAAAAABb0vbYr--LRd1NJ9ZXH68zSR4mIW4hDr6UqqiPmsA7vNEGDcMx8o-6Ihy8o47c5jo5GInOCe9KpKMfbXtdWPz6QkkWzZcFMqwXYS4tUI8DjjamEUBqFwlI10Oxbq7pEIGKVtFdMrOHy3EoLmE1rjY0p4DDm48pt3u8ON807nr0MUa1zIE |
  7. | project_id | 3706708374804e2eb4ed056f55d84666 |
  8. | user_id | e5dbfc8b394c41679fd5ce229cdd6ed3 |
  9. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

# 可以看到user_id和上面用命令获取到的是一样的,说明配置成功

# 至此,keystone安装完毕

======== 完毕,呵呵呵呵 ========

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号