2.3. 配置身份服务
这些步骤准备 Identity Service 以与 IdM 集成。
如果使用 director,请注意以下引用的配置文件由 Puppet 管理。因此,每当运行 openstack overcloud deploy
过程时,您添加的任何自定义配置可能会被覆盖。要将这些设置应用到基于 director 的部署中,请参阅 第 4 章 将特定于域的 LDAP 后端与 director 一起使用。
2.3.1. 配置控制器
如果要更新任何配置文件,您需要注意某些 OpenStack 服务现在在容器内运行;这适用于 keystone、nova 和 cinder 等。因此,有一些管理实践需要考虑:
-
不要更新您在物理节点的主机操作系统上找到的任何配置文件,例如:
/etc/cinder/cinder.conf
。这是因为容器化服务不引用此文件。 不要更新容器中运行的配置文件。这是因为重启容器后会丢失任何更改。
相反,如果您需要对容器化服务添加任何更改,则需要更新用于生成容器的配置文件。它们存储在
/var/lib/config-data/puppet-generated/
中例如:
-
keystone:
/var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf
-
cinder:
/var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf
nova:
/var/lib/config-data/puppet-generated/nova/etc/nova/nova.conf
重启容器后,所有更改都会被应用。例如:
sudo docker restart keystone
在运行 keystone 服务的控制器上执行这个步骤:
配置 SELinux:
# setsebool -P authlogin_nsswitch_use_ldap=on
输出可能包含类似于如下的消息。可以忽略它们:
Full path required for exclude: net:[4026532245].
创建 域 目录:
# mkdir /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/ # chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/
配置身份服务以使用多个后端:
注意您可能需要使用
yum install
安装 crudini。crudini
# crudini --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf identity domain_specific_drivers_enabled true # crudini --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf identity domain_config_dir /etc/keystone/domains # crudini --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf assignment driver sql
注意如果使用 director,请注意
/var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf
由 Puppet 管理。因此,每当运行openstack overcloud deploy
过程时,您添加的任何自定义配置可能会被覆盖。因此,您可能需要每次手动重新添加此配置。有关基于 director 的部署,请参阅 第 4 章 将特定于域的 LDAP 后端与 director 一起使用。在控制面板中启用多个域.将这些行添加到 /var/lib/config-data/puppet-generated/horizon/etc/openstack-dashboard/local_settings 中:
OPENSTACK_API_VERSIONS = { "identity": 3 } OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
注意如果使用 director,请注意
/var/lib/config-data/puppet-generated/horizon/etc/openstack-dashboard/local_settings
由 Puppet 管理。因此,每当运行openstack overcloud deploy
过程时,您添加的任何自定义配置可能会被覆盖。因此,您可能需要每次手动重新添加此配置。重启 horizon 容器以应用设置:
$ sudo docker restart horizon
配置额外后端:
为 IdM 集成创建 keystone 域。您需要决定新 keystone 域的名称,然后创建该域。例如,这个命令会创建一个名为
LAB
的 Keystone 域:$ openstack domain create LAB
创建配置文件:
要添加 IdM 后端,请在名为
/var/lib/config-data/puppet-generated/keystone/etc/domains/keystone.
的新文件中输入 LDAP 设置。您需要编辑以下示例设置,以适应 IdM 部署:LAB
.conf[ldap] url = ldaps://idm.lab.local user = uid=svc-ldap,cn=users,cn=accounts,dc=lab,dc=local user_filter = (memberOf=cn=grp-openstack,cn=groups,cn=accounts,dc=lab,dc=local) password = RedactedComplexPassword user_tree_dn = cn=users,cn=accounts,dc=lab,dc=local user_objectclass = inetUser user_id_attribute = uid user_name_attribute = uid user_mail_attribute = mail user_pass_attribute = group_tree_dn = cn=groups,cn=accounts,dc=lab,dc=local group_objectclass = groupOfNames group_id_attribute = cn group_name_attribute = cn group_member_attribute = member group_desc_attribute = description use_tls = False query_scope = sub chase_referrals = false tls_cacertfile =/etc/pki/ca-trust/source/anchors/anchorsca.crt [identity] driver = ldap
每个设置的说明:
设置 Description url
用于身份验证的 IdM 服务器。使用 LDAPS 端口
636
。user
用于 LDAP 查询的 IdM 中的帐户。
password
以上使用的 IdM 帐户的纯文本密码。
user_filter
过滤呈现给身份服务的用户。因此,只有 grp-openstack 组的成员才能具有身份服务中定义的权限。
user_tree_dn
IdM 中 OpenStack 帐户的路径。
user_objectclass
定义 LDAP 用户的类型。对于 IdM,使用
inetUser
类型。user_id_attribute
映射用于用户 ID 的 IdM 值。
user_name_attribute
将 IdM 值映射到 名称。
user_mail_attribute
映射用于用户电子邮件地址的 IdM 值。
user_pass_attribute
将这个值留空。
注意与 IdM 组集成将只返回直接成员,而不返回嵌套组。因此,依赖
LDAP_MATCHING_RULE_IN_CHAIN
或memberof 的查询:1.2.840.113556.1.4.1941
当前无法使用 IdM。
将配置文件的所有权改为 keystone 用户:
# chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.conf
授予 admin 用户对域的访问权限:
注意这不向 OpenStack admin 帐户授予 IdM 中的任何权限。在本例中,术语域指的是 OpenStack 对 keystone 域的用法。
获取 LAB 域的
ID
:$ openstack domain show LAB +---------+----------------------------------+ | Field | Value | +---------+----------------------------------+ | enabled | True | | id | 6800b0496429431ab1c4efbb3fe810d4 | | name | LAB | +---------+----------------------------------+
获取 admin 用户的
ID
值:$ openstack user list --domain default | grep admin | 3d75388d351846c6a880e53b2508172a | admin |
获取 admin 角色的
ID
值:# openstack role list +----------------------------------+---------------+ | ID | Name | +----------------------------------+---------------+ | 544d48aaffde48f1b3c31a52c35f01f9 | SwiftOperator | | 6d005d783bf0436e882c55c62457d33d | ResellerAdmin | | 785c70b150ee4c778fe4de088070b4cf | admin | | 9fe2ff9ee4384b1894a90878d3e92bab | _member_ | +----------------------------------+---------------+
使用返回的域和 admin ID 来构造将 admin 用户添加到 keystone LAB 域的 admin 角色的命令:
$ openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cf
重启 keystone 服务以应用更改:
$ sudo docker restart keystone
通过在命令中添加 keystone 域名来查看 IdM 域中的用户列表:
$ openstack user list --domain LAB
查看本地 keystone 数据库中的服务帐户:
$ openstack user list --domain default