1.6. 配置身份服务
这些步骤准备 Identity Service (keystone),以便与 AD DS 集成。
如果使用 director,请注意以下引用的配置文件由 Puppet 管理。因此,每当运行 openstack overcloud deploy
过程时,您添加的任何自定义配置可能会被覆盖。要将这些设置应用到基于 director 的部署中,请参阅 第 4 章 将特定于域的 LDAP 后端与 director 一起使用。
1.6.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 服务的每个 OpenStack 节点上执行这个步骤:
配置 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/
将 keystone 配置为使用多个后端:
注意您可能需要使用
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
配置额外后端:
在本例中,
LAB
是用作 Identity Service 域的 NetBIOS 名称。为 AD DS 集成创建 Keystone 域。
使用之前检索的 NetBIOS 名称值作为域名。此方法允许您在登录过程中向用户显示一致的域名。例如,如果 NetBIOS 名称是
LAB
:$ openstack domain create LAB
注意如果此命令不可用,请运行
# source overcloudrc-v3
,检查您已为命令行会话启用了 keystone v3。创建配置文件:
要添加 AD DS 后端,请在名为
/var/lib/config-data/puppet-generated/keystone/etc/domains/keystone.
的新文件中输入 LDAP 设置。您需要编辑以下示例设置,以适应 AD DS 部署:LAB
.conf[ldap] url = ldaps://addc.lab.local:636 user = CN=svc-ldap,OU=labUsers,DC=lab,DC=local password = RedactedComplexPassword suffix = DC=lab,DC=local user_tree_dn = OU=labUsers,DC=lab,DC=local user_objectclass = person user_filter = (|(memberOf=cn=grp-openstack,OU=labUsers,DC=lab,DC=local)(memberOf=cn=grp-openstack-admin,OU=labUsers,DC=lab,DC=local)(memberOf=memberOf=cn=grp-openstack-demo,OU=labUsers,DC=lab,DC=local)) user_id_attribute = sAMAccountName user_name_attribute = sAMAccountName user_mail_attribute = mail user_pass_attribute = user_enabled_attribute = userAccountControl user_enabled_mask = 2 user_enabled_default = 512 user_attribute_ignore = password,tenant_id,tenants group_objectclass = group group_tree_dn = OU=labUsers,DC=lab,DC=local group_filter = (CN=grp-openstack*) group_id_attribute = cn group_name_attribute = name use_tls = False tls_cacertfile =/etc/pki/ca-trust/source/anchors/anchorsaddc.lab.local.pem query_scope = sub chase_referrals = false [identity] driver = ldap
每个设置的说明:
设置 Description url
用于身份验证的 AD Domain Controller。使用 LDAPS 端口
636
。user
用于 LDAP 查询的 AD 帐户的可辨识 名称。例如,您可以使用
Get-ADuser svc-ldap | 选择 DistinguishedName 找到 AD 中的 svc-ldap 帐户的可辨识名称
值password
以上使用的 AD 帐户的纯文本密码。
suffix
AD 域的可辨识 名称。您可以使用
Get-ADDomain | 选择 DistinguishedName
找到这个值user_tree_dn
包含 OpenStack 帐户的组织单元(OU)。
user_objectclass
定义 LDAP 用户的类型。对于 AD,请使用
person
类型。user_filter
过滤呈现给身份服务的用户。因此,只有 grp-openstack 组的成员才能具有身份服务中定义的权限。这个值需要完整的可辨uished Name:
Get-ADGroup grp-openstack | 选择 DistinguishedName
user_id_attribute
将 AD 值映射到用户 ID。
user_name_attribute
将 AD 值映射到 名称。
user_mail_attribute
将 AD 值映射到用户电子邮件地址。
user_pass_attribute
将这个值留空。
user_enabled_attribute
验证帐户是否已启用的 AD 设置。
user_enabled_mask
定义要检查的值,以确定帐户是否已启用。在未返回布尔值时使用。
user_enabled_default
表示帐户已启用的 AD 值。
user_attribute_ignore
定义 Identity Service 应该忽略的用户属性。
group_objectclass
将 AD 值映射到 组。
group_tree_dn
包含 用户组(OU)的机构单元 (OU)。
group_filter
过滤呈现给身份服务的组。
group_id_attribute
映射用于组 ID 的 AD 值。
group_name_attribute
将 AD 值映射到组名称。
use_tls
定义要使用 TLS。如果您要使用 LDAPS 而不是 STARTTLS 加密,则需要禁用此设置。
tls_cacertfile
指定 .crt 证书文件的路径。
query_scope
将身份服务配置为还在嵌套子 OUs 中搜索,当查找属于
grp-openstack
组的成员的用户。chase_referrals
设置为
false
,此设置可防止python-ldap
辅助所有使用匿名访问的引用。
将配置文件的所有权改为 keystone 用户:
# chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.conf
重启 keystone 服务以应用更改:
# sudo docker restart keystone
授予
admin
用户对域的访问权限:注意这不向 OpenStack admin 帐户授予实际 AD DS 域中的任何权限。在本例中,术语 域 指的是 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
用户添加到 keystoneLAB
域的admin
角色的命令:# openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cf
通过在该命令中添加 NetBIOS 名称来查看 AD DS 域中的用户列表:
注意可能需要过些时间,LDAP 才能在重启或服务重启后变为可查询。
# openstack user list --domain LAB
查看本地 Identity Service 数据库中的服务帐户:
# openstack user list --domain default