juno版OpenStack部署中如何添加认证服务

juno版OpenStack部署中如何添加认证服务

这篇文章给大家介绍juno版OpenStack部署中如何添加认证服务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

keystone简介

keystone主要为了实现以下关键功能:

juno版OpenStack部署中如何添加认证服务

  • 追踪用户和管理其权限;

  • 提供可访问服务的目录,并提供服务的API端点(API endpoints)。

keystone中的一些基本概念简介

  • 用户(User) 可使用OpenStack云服务的个人、系统或服务的数字化形象。(Digital representation of a person, system, or service who uses OpenStack cloud services. )

  • 证书(Credentials) 用于确认用户身份的数据。

  • 认证(Authentication) 确认一个用户身份的认证过程。

  • 令牌(Token) 一段字母和数字组成的文本,用于访问OpenStack 的API和资源。

  • 租户(Tenant) 一个用来分组或隔离资源的集合。租户还可以用来分组或隔离认证对象。根据不同的服务操作者,一个租户可以对应一个顾客、一个账户、一个组织或一个项目。(A container used to group or isolate resources. Tenants also group or isolate identity objects. Depending on the service operator, a tenant may map to a customer, account, organization, or project.)

  • 服务(Service) OpenStack的服务,用于Compute(nova),Object Storage(swift)或Image Service(glance)等。它为用户访问资源,实施运作提供了一个或多个端点(endpoint)。

  • 端点(Endpoint) 一个可以通过网络来访问服务的地址,通常是一个URL地址。

  • 角色 (Role) 一种定义好的拥有施行特定操作的权限的个人特征。

  • keystone客户端(Keystone Client) 一种用于OpenStack认证API的命令行交互界面。

安装和配置

keystone服务安装在controller节点上。

##配置keystone所使用的数据库 使用root身份进入数据库(密码为安装数据库步骤时设立的):

$mysql-uroot-p```进入数据库界面后创建属于keystone的数据库:

CREATE DATABASE keystone;```

把keystone数据库的访问权限赋予名为keystone,来自任何主机地址的用户,并设定访问密码为KEYSTONE_DBPASS(替换为合适的密码):

GRANTALLPRIVILEGESONkeystone.*TO'keystone'@'localhost'IDENTIFIEDBY'KEYSTONE_DBPASS';GRANTALLPRIVILEGESONkeystone.*TO'keystone'@'%'IDENTIFIEDBY'KEYSTONE_DBPASS';```可以把KEYSTONE_DBPASS变更为合适的密码。退出数据库客户端。##安装配置组件1.安装keystone包:

apt-get install keystone python-keystoneclient```

  1. 编辑```

vi /etc/keystone/keystone.conf```文件:

[DEFAULT]部分,定义initial administration token:

[DEFAULT]...admin_token=ADMIN_TOKEN```其中替换ADMIN_TOKEN为合适的值,可以通过```#opensslrand-hex10```来生成。继续在```[DEFAULT]```部分开启“输出详细记录日志”的选项:

[DEFAULT] ... verbose = True```

[database]部分,设定数据库访问选项:

[database]...connection=mysql://keystone:KEYSTONE_DBPASS@controller/keystone```把KEYSTONE_DBPASS替换为创建keystone数据库时所授权的密码。配置默认使用SQL的数据库连接,需要注释掉或删除。在```[token]```部分,配置UUIDtokenprovider和SQLdriver:

[token] ... provider = keystone.token.providers.uuid.Provider driver = keystone.token.persistence.backends.sql.Token```

[revoke]部分,配置SQL revocation driver:

[revoke]...driver=keystone.contrib.revoke.backends.sql.Revoke```同步认证服务数据库:

keystone-manage db_sync```

完成最后的安装

重启认证服务:

#servicekeystonerestart```默认Ubuntu会产生SQLite数据库,可以将其删除:

rm -f /var/lib/keystone/keystone.db```

默认情况下,认证服务会无限量地存储过期的token,这将导致数据库占用空间大幅度增加而且会降低认证服务的性能,用以下命令可以定期清除过期的token:

#(crontab-l-ukeystone2>&1|grep-qtoken_flush)||\echo'@hourly/usr/bin/keystone-managetoken_flush>/var/log/keystone/keystone-tokenflush.log2>&1'\>>/var/spool/cron/crontabs/keystone```#创建租户,用户和角色##配置所需的环境变量在使用keystone命令操作前,需要先使用临时的administrationtoken(即在```/etc/keystone/keystone.conf```文件中设定的ADMIN_TOKEN),并手动配置认证服务的地址(endpoint)。将administrationtoken写入环境变量:

$ export OS_SERVICE_TOKEN=ADMIN_TOKEN``` 将endpoint写入环境变量:

$exportOS_SERVICE_ENDPOINT=http://controller:35357/v2.0```##创建租户,用户和角色1.创建拥有管理操作职能的管理租户,管理用户和管理角色。创建```admin```租户:

$ keystone tenant-create --name admin --description "Admin Tenant" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Admin Tenant | | enabled | True | | id | e8cda8def37b4d32b765759f1faa5ed2 | | name | admin | +-------------+----------------------------------+

创建```admin```用户:

$ keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | email | admin@example.com | | enabled | True | | id | 13b460ca8d9e4aa094e8f4f4fff6f087 | | name | admin | | username | admin | +----------+----------------------------------+``` 用合适的密码代替ADMIN_PASS。

创建 admin角色:

$keystonerole-create--nameadmin+----------+----------------------------------+|Property|Value|+----------+----------------------------------+|id|2bf07853b40b420eb9e9e2aa23ff3e9e||name|admin|+----------+----------------------------------+```将```admin```角色赋予给```admin```租户和```admin```用户。

$ keystone user-role-add --user admin --tenant admin --role admin``` 这条命令不会产生输出显示。

  1. 创建拥有特定权限的demo租户,demo用户

创建demo租户:

$keystonetenant-create--namedemo--description"DemoTenant"+-------------+----------------------------------+|Property|Value|+-------------+----------------------------------+|description|DemoTenant||enabled|True||id|ef5783a270d84bb880a2c6fb85eac651||name|demo|+-------------+----------------------------------+```创建属于```demo```租户的```demo```用户

keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | email | demo@example.com | | enabled | True | | id | 2a6e8190e26c4f27ba98171235a8b219 | | name | demo | | tenantId | ef5783a270d84bb880a2c6fb85eac651 | | username | demo | +----------+----------------------------------+``` 用合适的密码代替DEMO_PASS

OpenStack服务的配置方案

OpenStack的服务都需要被赋予租户,用户和角色的性质来与其他服务进行交互。每个服务都需要创建一个或多个独立的用户,这个用户被赋予 admin角色,并且属于 service租户下。

创建 service租户:

$keystonetenant-create--nameservice--description"ServiceTenant"+-------------+----------------------------------+|Property|Value|+-------------+----------------------------------+|description|ServiceTenant||enabled|True||id|e4288b01bc084a29ad6133f882a58732||name|service|+-------------+----------------------------------+```#创建服务实体和API端点(serviceentityandAPIendpoint)##配置所需的环境变量具体操作如上一步骤所述。##创建服务实体和API端点1.创建服务实体认证服务会将OpenStack环境中的所有服务登记在目录中,所有服务都通过这个目录来定位环境中的其他服务。创建认证服务的服务实体:

$ keystone service-create --name keystone --type identity
--description "OpenStack Identity" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | OpenStack Identity | | enabled | True | | id | d7bbd538857b4caa9f7f9730a74b98ca | | name | keystone | | type | identity | +-------------+----------------------------------+```

  1. 创建服务API端点 认证服务会将OpenStack环境中每个服务对应的API端点登记在目录中,这个目录将用来支持各个服务之间的通信。

创建认证服务的API端点:

$keystoneendpoint-create\--service-id$(keystoneservice-list|awk'/identity/{print$2}')\--publicurlhttp://controller:5000/v2.0\--internalurlhttp://controller:5000/v2.0\--adminurlhttp://controller:35357/v2.0\--regionregionOne+-------------+----------------------------------+|Property|Value|+-------------+----------------------------------+|adminurl|http://controller:35357/v2.0||id|32fb8b8934024c30bd1f0b7795a51220||internalurl|http://controller:5000/v2.0||publicurl|http://controller:5000/v2.0||region|regionOne||service_id|d7bbd538857b4caa9f7f9730a74b98ca|+-------------+----------------------------------+```#验证操作1.复位环境变量:

$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT```

  1. admin租户和用户的身份,请求一条authentication token:

$keystone--os-tenant-nameadmin--os-usernameadmin--os-passwordADMIN_PASS\--os-auth-urlhttp://controller:35357/v2.0token-get+-----------+----------------------------------+|Property|Value|+-----------+----------------------------------+|expires|2015-11-24T12:37:45Z||id|1d5ebdf4e60a4f648240a20a65cbf96e||tenant_id|4f7806287c9a437e9cd912504ff71727||user_id|fd151acb7cc34bba8d4d9cf391ad0d06|+-----------+----------------------------------+```ADMIN_PASS为之前设定的```admin```用户密码。3.以```admin```租户和用户的身份,列出租户清单:

$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS
--os-auth-url http://controller:35357/v2.0 tenant-list +----------------------------------+---------+---------+ | id | name | enabled | +----------------------------------+---------+---------+ | 4f7806287c9a437e9cd912504ff71727 | admin | True | | d1f7caccc65840b68258997a759da07f | demo | True | | 5ab4d5c513f543cfbf8e3be97f5df5fb | service | True | +----------------------------------+---------+---------+ ADMIN_PASS为之前设定的 admin```用户密码。

  1. admin租户和用户的身份,列出用户清单:

$keystone--os-tenant-nameadmin--os-usernameadmin--os-passwordADMIN_PASS\--os-auth-urlhttp://controller:35357/v2.0user-list+----------------------------------+-------+---------+-------------------+|id|name|enabled|email|+----------------------------------+-------+---------+-------------------+|fd151acb7cc34bba8d4d9cf391ad0d06|admin|True|admin@example.com||812116bcca5b4a01981669fcef09ee11|demo|True|demo@example.com|+----------------------------------+-------+---------+-------------------+```ADMIN_PASS为之前设定的```admin```用户密码。5.以```admin```租户和用户的身份,列出角色清单:

$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS
--os-auth-url http://controller:35357/v2.0 role-list +----------------------------------+----------+ | id | name | +----------------------------------+----------+ | 9fe2ff9ee4384b1894a90878d3e92bab | member | | 61286483662e40ba8f0a48b05fc8a451 | admin | +----------------------------------+----------+ ADMIN_PASS为之前设定的 admin```用户密码。其中_member_的来历如下,在创建用户时:Using the --tenant option automatically assigns the member role to a user. This option will also create the member role if it does not exist.(创建时使用的命令为keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS)

  1. demo租户和用户的身份,请求一条authentication token:

$keystone--os-tenant-namedemo--os-usernamedemo--os-passwordDEMO_PASS\--os-auth-urlhttp://controller:35357/v2.0token-get+-----------+----------------------------------+|Property|Value|+-----------+----------------------------------+|expires|2015-11-24T13:06:04Z||id|9eca8d1dff374c2da6f358e85f0b60af||tenant_id|d1f7caccc65840b68258997a759da07f||user_id|812116bcca5b4a01981669fcef09ee11|+-----------+----------------------------------+```DEMO_PASS为之前设定的```demo```用户密码。7.以```demo```租户和用户的身份,验证无法执行```admin```专属命令:

$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS
--os-auth-url http://controller:35357/v2.0 user-list You are not authorized to perform the requested action: admin_required (HTTP 403)```

创建OpenStack客户端环境脚本

创建脚本

  1. 创建文件 admin-openrc.sh,并输入以下内容:

exportOS_TENANT_NAME=adminexportOS_USERNAME=adminexportOS_PASSWORD=ADMIN_PASSexportOS_AUTH_URL=http://controller:35357/v2.0```ADMIN_PASS为之前设定的```admin```用户密码。2.创建文件```demo-openrc.sh```,并输入以下内容:

export OS_TENANT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v2.0 DEMO_PASS为之前设定的 demo```用户密码。

**注:**端口35357是为拥有管理权限的操作准备的,端口5000是为普通用户操作准备的。

启动客户端环境脚本

根据不同租户和用户,执行 $ source admin-openrc.sh $ source demo-openrc.sh

安装时出现的问题及解决方法

安装完keystone后,创建"Admin Tenant"时出现“Unable to establish connection to http://controller:35357/v2.0/tenants”的错误,可能是安装keystone时未完整安装,重新安装并更新。在验证步骤时出现(HTTP 401),有可能是密码等配置错误,导致访问权限受限,重新检查配置文件和各个用户的密码情况。

关于juno版OpenStack部署中如何添加认证服务就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-12-23 21:19:33
收藏
分享
海报
0 条评论
44
上一篇:如何在GKE上面创建你的第一个Kubernetes集群 下一篇:socket中的短连接与长连接以及心跳包示例分析
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码