CentOS 7.x 部署OpenStack 之 认证服务 Keystone (二)


一、基础理论篇

 

 

1、Keystone的概述

Keystone是Openstack的组件之一,用于为Openstack家族中的其它组件成员提供统一的认证服务,包括身份验证,令牌的发放和校验,服务列表,用户权限的定义等。Openstack中任何组件均依赖与Keystone提供的服务。

2、Keystone 功能

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

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

Keystone (OpenStack Identity Service ) 基本概念

  •  用户(user)

    使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证。

  •  项目(project)

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

     

  • 角色(role)

    角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。安全包含两部分:Authentication(认证)和 Authorization(鉴权)

  •  服务(service)

    Openstack Service,即Openstack中运行的组件服务。nova,glance都是属于一个服务,需要在keystone上进行创建,指定类型。创建服务有一个服务,就创建一个endpoint,会根据服务类型去查找那个服务。Service 决定每个 Role 能做什么事情 ,Service 通过各自的 policy.json 文件对 Role 进行访问控制。

  •  令牌(token)

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

     

  •  端点(endpoint)

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

    1. Admin URL:给admin用户使用,被从常规的访问中分离。

    2. Internal URL:Openstack内部服务使用来跟别的服务通信,只能被局域网访问。

    3. Public URL:其它用户可以访问的地址,可以被全局访问。

    4. User 通过 Endpoint 访问资源和执行操作

     

  •  证书(Credentials)

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

     

  • 认证方式(authentication)

    确定用户身份的过程。

 

5、Keystone 工作流程图

图片来源网络

图片1.png

6、Keystone V3 API特性

 

1. Tenant更改为Project
2.添加了Domain(对系统资源进行限额 一个域中可以存在多个项目以及用)
3.添加了Group (组的概念为了更好的管理用户,例如linux下对组授权,其组下面的用户也有了相应的权限)

 

 

7. keystone 图解:

图片来源网络

图片2.png

二、实践操作篇

 

1. 环境说明

 

 

系统

主机名

IP地址

CentOS 7.7

controller

ens33:10.0.0.129

ens37:192.168.248.140

CentOS 7.7

compute

ens33:10.0.0.130

ens37:192.168.248.141

 

 

虚拟机网卡配置
ens33 VMnet1仅主机模式
ens37 VMnet8 Nat模式

 

2. Keystone 配置

以下操作均在controller节点进行

 

2.1 安装keystone相关软件包

 

[root@controller ~]# yum install -y openstack-keystone httpd mod_wsgi

 

2.2 创建keystone数据库

 

[root@controller ~]# mysql -uroot -p

MariaDB [(none)]> create database keystone;

MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone';

MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone';

图片3.png

2.3生成管理员的令牌环

 

[root@controller ~]#  openssl rand -hex 10

8daaaf9583ff2f370e39

 

2.4 编辑keystone配置文件

 

配置数据库连接、定义管理员初始令牌的值

 

 

# vim /etc/keystone/keystone.conf

 

[DEFAULT]

admin_token = 8daaaf9583ff2f370e39

.....

[database]

.....

connection = mysql+pymysql://keystone:keystone@controller/keystone

.....

[token]

......

 provider = fernet

 ......

 

 

2.5 为keystone创建数据表

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

 

#查看创建表是否成功

[root@controller ~]# mysql -h 10.0.0.129 -ukeystone -pkeystone -e "use keystone;show tables;"    

图片4.png

2.6 初始化Fernet keys

 

[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

 

2.7 配置Apache服务器

 

[root@controller ~]# cp /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ 

[root@controller ~]# vi /etc/httpd/conf/httpd.conf

95 ServerName controller

[root@controller ~]# systemctl start httpd

[root@controller ~]# systemctl enable httpd

 

[root@controller ~]# ss -tan | grep  5000

LISTEN 0 128 :::5000 :::* 

[root@controller ~]# ss -tan | grep 35357 

LISTEN 0 128 :::35357 :::*

 

2.8 keystone的连接方式说明

 

1. 使用环境变量的方式来连接keystone(环境初始化常用) 格式: export OS_TOKEN=OpenSSL生成的随机值 export OS_URL=http://controller:35357/v3 (连接到keystone的地址以及端口信息) export OS_IDENTITY_API_VERSION=v3 (定义版本信息)

2. 使用命令行的方式来连接到keystone(需要在创建完成域、项目、用户,服务之后才能够使用) 格式: openstack --os-auth-url http://controller:35357/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name 项目名称 --os-username 用户名称 token issue 5000端口和35357端口的区别: 5000端口是普通用户进行身份认证的端口 35357端口是admin用户和普通用户认证的端口

 

2.9 定义环境变量

 
[root@controller ~]# export OS_TOKEN=8daaaf9583ff2f370e39
[root@controller ~]# export OS_URL=http://controller:35357/v3
[root@controller ~]# export OS_IDENTITY_API_VERSION=3

 

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

 

以下创建的为管理员环境即admin

 

3.1 创建default域

 

[root@controller ~]# openstack domain create --description "Default Domain" default

图片5.png

--description:指定描述信息

 

3.2创建admin项目

 

[root@controller ~]# openstack project create --domain default --description "Admin Project" admin

图片6.png

--domain:指定项目所属域的名称

 

3.3创建admin用户

[root@controller ~]# openstack user create --domain default --password-prompt admin 

图片7.png


3.4 admin角色

 

[root@controller ~]# openstack role create admin


image.png


3.5 将以上创建的在一起

 

[root@controller ~]# openstack role add --project admin --user admin admin

 

将admin用户加入admin项目中,并赋予admin角色

 

 

4. 创建普通用户环境

 

4.1 创建user项目

 

[root@controller ~]# openstack project create  --domain default --description "User Project" user

图片8.png

4.2 创建user用户

 

[root@controller ~]# openstack user create --domain default --password-prompt user

图片9.png


4.3  创建user角色

 

[root@controller ~]# openstack role create user


图片10.png


4.4 将以上三者关联到一起

 

[root@controller ~]# openstack role add --project user --user user user

将user用户加入到user项目中,并赋予user角色

 

 

5. 创建服务实体和API端点信息

服务实体包括:keystone、Nova、glance、neutron等
API端点信息:访问每一个服务的URL路径
端点信息可以分为如下三类:
admin (管理员入口)
internal(私有 内部通信)
public(公有 其他通信)

 

5.1 创建keystone服务实体

 

[root@controller ~]# openstack service create --name keystone --description "Openstack Identity" identity

图片11.png

--name:指定服务实体的名称

 

 

5.2 创建public公有端点信息

[root@controller ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3

 

图片12.png

类型为internal表示为内部,端口为5000,内部普通人员访问

 

5.3 创建admin管理员端点信息

[root@controller ~]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3

图片13.png


类型为admin,代表管理员入口,端口为35357 管理员访问的端口 5000端口管理员不适用

 

5.4 查看创建的端口信息

 

[root@controller ~]# openstack endpoint list

image.png

6. 验证测试

 取消原先我们定义的环境变量

[root@controller ~]# unset OS_TOKEN OS_URL

[root@controller ~]# openstack service list

Missing value auth-url required for auth plugin password

 

连接的keystone的方式有两种,一种是通过环境变量,一种是通过命令行的方式,我们把环境变量取消了,自然而然就连接不上了

 

使用命令行的方式来连接到keystone测试

 

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

图片15.png

返回如上信息代表成功

 

 

7.编写admin-OpenStack.sh

 

 

[root@controller ~]# vim admin-openstack.sh

export OS_PROJECT_DOMAIN_NAME=default

export OS_USER_DOMAIN_NAME=default

export OS_PROJECT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=123456

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

export OS_IDENTITY_API_VERSION=3 

export OS_IMAGE_API_VERSION=2

 

验证测试

[root@controller ~]# source admin-openstack.sh

[root@controller ~]# openstack user list

图片16.png

8.编写user-OpenStack.sh

 

[root@controller ~]# vi user-openstack.sh

export OS_PROJECT_DOMAIN_NAME=default

export OS_USER_DOMAIN_NAME=default

export OS_PROJECT_NAME=user

export OS_USERNAME=user

export OS_PASSWORD=123456

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

export OS_IDENTITY_API_VERSION=3 

export OS_IMAGE_API_VERSION=2 

验证测试

[root@controller ~]# source user-openstack.sh

[root@controller ~]# openstack project list

图片17.png

至此,keystone认证服务安装完成。


标签: 云计算

作者头像
南宫俊逸创始人

君子好学,自强不息~

上一篇:CentOS 7.x 部署 Openstack 之基础环境 (一)
下一篇:CentOS 7.x 部署 OpenStack 之镜像服务Glance (三)

发表评论

阿里云2021年 618 年中钜惠活动