设为首页 收藏本站
查看: 790|回复: 0

[经验分享] Openstack之路(二)认证服务Keystone

[复制链接]

尚未签到

发表于 2018-5-30 11:48:30 | 显示全部楼层 |阅读模式
Keystone的概述
  Keystone是Openstack的组件之一,用于为Openstack家族中的其它组件成员提供统一的认证服务,包括身份验证,令牌的发放和校验,服务列表,用户权限的定义等。Openstack中任何组件均依赖与Keystone提供的服务。

Keystone的功能

用户与认证
  用户权限与用户行为追踪。

服务目录
  为每个组件服务提供一个可用的服务目录和相应的API入口端点。

Keystone基本概念

User
  顾名思义就是使用服务(Openstack Service)的用户,可以是人、服务或者是系统,只要是使用了Openstack服务的对象都可以称为用户。

Project
  租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。

Token
  指的是一串比特值或者字符串,用来作为访问资源的令牌。Token中含有可访问资源的范围和有效时间。

Role
  角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。

Service
  Openstack Service,即Openstack中运行的组件服务。

Endpoint
  一个可以通过网络来访问和定位某个Openstack Service的地址,通常是一个URL。例如,Nova需要访问Glance服务去获取Image时,Nova通过访问Keystone拿到Glance的Endpoint,然后通过访问该Endpoint去获取Glance服务,我们可以通过Endpoint的region属性去定义多个region。Endpoint该使用对象分为三类:


  • Admin URL:给admin用户使用,被从常规的访问中分离。
  • Internal URL:Openstack内部服务使用来跟别的服务通信,只能被局域网访问。
  • Public URL:其它用户可以访问的地址,可以被全局访问。

Credentials
  用于确认用户身份的凭证。

Authentication
  确定用户身份的过程。

Keystone形象比喻
  如果把宾馆比作为Openstack,那么宾馆的中央管理系统就是Keystone,入住宾馆的人就是User 。在宾馆中拥有很多不同的房间,房间提供了不同的服务(Service)。
  在入住宾馆前,User需要给出×××(Credential),中央管理系统(Keystone)在确认User的身份后(Authenticaiton),会给你一个房卡(Token)和导航地图(Endpoint)。
  不同VIP(Role)级别的User,拥有不同权限的房卡(Token),如果你的VIP(Role)等级高,你可以享受到豪华的总统套房。
  User拿着房卡(Token)和地图(Endpoint),就可以进入特定的房间去享受不同的Services。每一个服务(Services)中都拥有着一些特定资源(Project),例如,×××中可以使用的精油种类和数量。User可以根据自己的权限来使用这些资源。

Keystone与其它服务的交互
DSC0000.jpg


Keystone安装配置

Keystone的安装


  • 创建一个数据库和管理员令牌

MariaDB [(none)]> create database keystone;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| keystone           |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> grant all on keystone.* to 'keystone'@'localhost' identified by 'keystone';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on keystone.* to 'keystone'@'%' identified by 'keystone';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye

  • 安装Keystone相关软件包

[root@linux-node1 ~]# yum -y install openstack-keystone httpd mod_wsgi
[root@linux-node1 ~]# rpm -qa openstack-keystone httpd mod_wsgi
mod_wsgi-3.4-12.el7_0.x86_64
openstack-keystone-10.0.3-1.el7.noarch
httpd-2.4.6-67.el7.centos.6.x86_64
Keystone的配置


  • 编辑/etc/keystone/keystone.conf文件,并完成如下更改

[root@linux-node1 ~]# cp -a /etc/keystone/keystone.conf /etc/keystone/keystone.conf_$(date +%F)
[root@linux-node1 ~]# vim /etc/keystone/keystone.conf
  在[database]部分,配置数据库访问

[database]
......
640 connection = mysql+pymysql://keystone:keystone@192.168.56.11/keystone
  在[memcache]部分,配置缓存服务

[memcache]
......
1476 servers = 192.168.56.11:11211
  在[token]部分,配置Fernet UUID令牌的提供者

[token]
.....
2659 provider = fernet
2669 driver = memcache

  • 初始化身份认证服务的数据库

[root@linux-node1 ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@linux-node1 ~]# mysql -ukeystone -pkeystone -e "use keystone;show tables"|wc -l
38

  • 初始化Fernet key

[root@linux-node1 ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@linux-node1 ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

  • 创建身份服务API端点

[root@linux-node1 ~]# 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

  • 配置Apache HTTP服务器
  编辑/etc/httpd/conf/httpd.conf文件,配置ServerName选项为控制节点

[root@linux-node1 ~]# vim /etc/httpd/conf/httpd.conf
95 ServerName 192.168.56.11:80
  创建一个链接到/usr/share/keystone/wsgi-keystone.conf文件

[root@linux-node1 ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
[root@linux-node1 ~]# ls -l /etc/httpd/conf.d/wsgi-keystone.conf
lrwxrwxrwx 1 root root 38 Jan 11 15:55 /etc/httpd/conf.d/wsgi-keystone.conf -> /usr/share/keystone/wsgi-keystone.conf
  启动httpd,并配置为开机自启

[root@linux-node1 ~]# systemctl enable httpd.service
[root@linux-node1 ~]# systemctl start httpd.service
[root@linux-node1 ~]# systemctl status httpd.service

  • 配置admin账户,配置环境变量,临时生效

[root@linux-node1 ~]# export OS_USERNAME=admin
[root@linux-node1 ~]# export OS_PASSWORD=admin
[root@linux-node1 ~]# export OS_PROJECT_NAME=admin
[root@linux-node1 ~]# export OS_USER_DOMAIN_NAME=Default
[root@linux-node1 ~]# export OS_PROJECT_DOMAIN_NAME=Default
[root@linux-node1 ~]# export OS_AUTH_URL=http://192.168.56.11:35357/v3
[root@linux-node1 ~]# export OS_IDENTITY_API_VERSION=3

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

[root@linux-node1 ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | afc19f08df4948989710d453c4ee45d0 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
+-------------+----------------------------------+
  常规(非管理)任务应该使用无特权的项目和用户,创建demo项目和用户

[root@linux-node1 ~]# openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | e10068ee83dc464683ff232494d30d39 |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | default                          |
+-------------+----------------------------------+
[root@linux-node1 ~]# openstack user create --domain default --password-prompt demo
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 903b9cf22cd248729fb770feb56a71c5 |
| name                | demo                             |
| password_expires_at | None                             |
+---------------------+----------------------------------+
  创建user角色

[root@linux-node1 ~]# openstack role create user
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 145f27cc922b449694d0bf6e1b8b85c7 |
| name      | user                             |
+-----------+----------------------------------+
  添加user角色到demo项目和用户

[root@linux-node1 ~]# openstack role add --project demo --user demo user
Keystone验证操作


  • 因为安全性的原因,关闭临时认证令牌机制,撤销临时环境变量OS_AUTH_URL和OS_PASSWORD

[root@linux-node1 ~]# unset OS_AUTH_URL OS_PASSWORD

  • 作为admin用户,请求认证令牌

[root@linux-node1 ~]# 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
Password:
+------------+--------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                        |
+------------+--------------------------------------------------------------------------------------------------------------+
| expires    | 2018-01-20 04:38:06+00:00                                                                                    |
| id         | gAAAAABaYrmeJL1mde_wln1z1G559nIsJd_D42uLbblKK4PTywSiqXhkg2DaVPFab8Iz0h64-YF6dq-                              |
|            | D1xgTjXHfWCQpWcepHhC59OYznFY9J0PeECPqWcuOJrh_OJOkLuncdc_cvs3Ecjux2JXGw8fY6ZmJVoGnsc4lO78MUD-q6pHjqj4twrU     |
| project_id | 14055178975d417987c5a94f030c7acf                                                                             |
| user_id    | d7f8f54a45814161a48e0d5feba4942c                                                                             |
+------------+--------------------------------------------------------------------------------------------------------------+

  • 作为demo用户,请求认证令牌

[root@linux-node1 ~]# openstack --os-auth-url http://192.168.56.11:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name demo --os-username demo token issue
Password:
+------------+--------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                        |
+------------+--------------------------------------------------------------------------------------------------------------+
| expires    | 2018-01-20 04:40:30+00:00                                                                                    |
| id         | gAAAAABaYrouwJJcEUD8E0WMULvfn-rjPIEIP0OSrYwgvQZMrgJpV7MYLQ_deU0aZ4zEFqdzMvRvIkkIafvvKe8azJQkrBCFnCNVIblj9QS7 |
|            | JbpiigVWkxXSHgNEAqDyzpAe_xTjQQU5A27Kf8MOIMfDw6NBoh4N9biY9Fkgf6IF7H0ngr1aitI                                  |
| project_id | 8a788702c6ea46419bb85b4e4600e3c4                                                                             |
| user_id    | 48cd83bd3ce54b8ebece24680e8c8b0a                                                                             |
+------------+--------------------------------------------------------------------------------------------------------------+
Openstack客户端环境脚本


  • 创建脚本
  编辑admin-openrc文件并且增加以下内容

[root@linux-node1 ~]# vim 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
export OS_AUTH_URL=http://192.168.56.11:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
  编辑文件demo-openrc并添加如下内容

[root@linux-node1 ~]# vim 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=demo
export OS_AUTH_URL=http://192.168.56.11:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

  • 使用脚本
  加载admin-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书

[root@linux-node1 ~]# source admin-openrc
  请求认证令牌

[root@linux-node1 ~]# openstack token issue
+------------+--------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                        |
+------------+--------------------------------------------------------------------------------------------------------------+
| expires    | 2018-01-20 04:42:41+00:00                                                                                    |
| id         | gAAAAABaYrqxOK2q0kjx7jsWU2BIAR5YudyAF491y6pPbl9J2SOLWjdGP7_XeTKnTHKyVGm13zaqnzw4jj-                          |
|            | 6ZNKIqP5NhvmwtNsVeQK4QVFmEECZ850ZeBBdnwTxhn0mTFr3_n0aEnZ96iBJ4aLLbo2T4KM2AdSn5wBzpvHJnstSDu4rVBG0tNs         |
| project_id | 14055178975d417987c5a94f030c7acf                                                                             |
| user_id    | d7f8f54a45814161a48e0d5feba4942c                                                                             |
+------------+--------------------------------------------------------------------------------------------------------------+

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-483060-1-1.html 上篇帖子: Openstack之路(一)基础环境 下篇帖子: Openstack之路(三)镜像服务Glance
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表