与 Identity Service 集成
使用 Active Directory 或红帽身份管理作为外部身份验证后端
摘要
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
身份服务
身份服务(代号 keystone)为 Red Hat OpenStack Platform 13 提供身份验证和授权。
本指南论述了如何将身份服务与 Microsoft Active Directory 域服务(AD DS)、红帽身份管理(IdM)和 LDAP 集成。
第 1 章 Active Directory 集成 复制链接链接已复制到粘贴板!
本章论述了如何将身份服务(keystone)与 Active Directory 域服务集成。在这种情况下,身份服务验证某些 Active Directory 域服务(AD DS)用户,同时在 Identity Service 数据库中保留授权设置和关键服务帐户。因此,Identity Service 对 AD DS 具有对用户帐户进行身份验证的只读访问权限,同时保持对分配给身份验证帐户的特权的管理。
如果使用 director,请参阅 第 4 章 将特定于域的 LDAP 后端与 director 一起使用。这是因为以下引用的配置文件由 Puppet 管理。因此,每当运行 openstack overcloud deploy 过程时,您添加的任何自定义配置可能会被覆盖。
1.1. 关键术语 复制链接链接已复制到粘贴板!
- 身份验证 - 使用密码验证用户是否声称的身份的进程。
- 授权 - 验证经过身份验证的用户对试图访问的资源有正确的权限。
- 域 - 此术语与 AD DS 域不同,而是是指在身份服务中配置的额外命名空间,用于对用户、组和项目进行分区。这些独立的域可以配置为对不同 LDAP 或 AD DS 环境中的用户进行身份验证。
1.2. 假设 复制链接链接已复制到粘贴板!
这个示例部署进行以下假设:
- Active Directory Domain Services 配置且可操作。
- Red Hat OpenStack Platform 是配置且可操作。
- DNS 名称解析可以完全正常工作,所有主机都正确注册。
- AD DS 身份验证流量使用 LDAPS 加密,使用端口 636。
1.3. 影响声明 复制链接链接已复制到粘贴板!
这些步骤允许 AD DS 用户对 OpenStack 进行验证并访问资源。OpenStack 服务帐户(如 keystone 和 glance)和授权管理(权限、角色、项目)将保留在 Identity Service 数据库中。使用身份服务管理工具将权限和角色分配到 AD DS 帐户。
1.3.1. 高可用性选项 复制链接链接已复制到粘贴板!
此配置创建依赖于单个 Active Directory Domain Controller 的可用性;如果 Identity Service 无法向 AD Domain Controller 进行身份验证,则项目用户将会受到影响。有很多选项可用于管理这个风险;例如,您可以将身份服务配置为查询 DNS 别名或负载平衡设备,而不是单独的 AD 域控制器。您还可以将 keystone 配置为查询不同的域控制器,它应该不可用。
1.3.2. 中断要求 复制链接链接已复制到粘贴板!
- 需要重新启动身份服务以添加 AD DS 后端。
- 所有节点上的 Compute 服务都需要重新启动,以便切换到 keystone v3。
- 在 AD DS 中创建其帐户后,用户才能访问仪表板。为减少停机,请考虑预先创建 AD DS 帐户,在此更改前就好。
1.3.3. 防火墙配置 复制链接链接已复制到粘贴板!
如果防火墙在 AD DS 和 OpenStack 之间过滤流量,则需要允许通过以下端口进行访问:
| 源 | 目的地 | 类型 | 端口 |
|---|---|---|---|
| OpenStack Controller 节点 | Active Directory Domain Controller | LDAPS | TCP 636 |
1.4. 配置 Active Directory Domain Services 复制链接链接已复制到粘贴板!
本节介绍了 Active Directory 管理员需要完成的任务:
| 任务 | 详情 |
| 创建一个服务帐户。 |
这可根据您的服务帐户的命名约定进行命名,例如: |
| 创建用户组。 |
如果用户需要访问 OpenStack,则他们必须是此组的成员。这可以通过您的用户组命名规则进行命名,例如: |
| 创建项目组。 |
每个 OpenStack 项目都需要一个对应的 AD 组。例如, |
| 配置服务帐户。 |
服务帐户 |
| 导出 LDAPS 公钥。 |
以以下格式导出公钥(而不是私钥):DER |
| 将密钥发送到 OpenStack 管理员。 | OpenStack 管理员将使用此密钥加密 OpenStack 和 Active Directory 之间的 LDAPS 通信。 |
| 检索 AD DS 域的 NetBIOS 名称。 | OpenStack 管理员将该名称用于 Keystone 域,允许在环境之间实现一致的域命名。 |
例如,以下过程显示了在 Active Directory Domain Controller 上运行的 PowerShell 命令:
创建 LDAP 查找帐户。身份服务使用此帐户查询 AD DS LDAP 服务:
PS C:\> New-ADUser -SamAccountName svc-ldap -Name "svc-ldap" -GivenName LDAP -Surname Lookups -UserPrincipalName svc-ldap@lab.local -Enabled $false -PasswordNeverExpires $true -Path 'OU=labUsers,DC=lab,DC=local'
PS C:\> New-ADUser -SamAccountName svc-ldap -Name "svc-ldap" -GivenName LDAP -Surname Lookups -UserPrincipalName svc-ldap@lab.local -Enabled $false -PasswordNeverExpires $true -Path 'OU=labUsers,DC=lab,DC=local'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为此帐户设置密码,然后启用它。系统会提示您输入一个满足 AD 域复杂性要求的密码:
PS C:\> Set-ADAccountPassword svc-ldap -PassThru | Enable-ADAccount
PS C:\> Set-ADAccountPassword svc-ldap -PassThru | Enable-ADAccountCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为 OpenStack 用户创建一个组,取名为
grp-openstack。PS C:\> NEW-ADGroup -name "grp-openstack" -groupscope Global -path "OU=labUsers,DC=lab,DC=local"
PS C:\> NEW-ADGroup -name "grp-openstack" -groupscope Global -path "OU=labUsers,DC=lab,DC=local"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建项目组:
PS C:\> NEW-ADGroup -name "grp-openstack-demo" -groupscope Global -path "OU=labUsers,DC=lab,DC=local" PS C:\> NEW-ADGroup -name "grp-openstack-admin" -groupscope Global -path "OU=labUsers,DC=lab,DC=local"
PS C:\> NEW-ADGroup -name "grp-openstack-demo" -groupscope Global -path "OU=labUsers,DC=lab,DC=local" PS C:\> NEW-ADGroup -name "grp-openstack-admin" -groupscope Global -path "OU=labUsers,DC=lab,DC=local"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
svc-ldap用户添加到grp-openstack组中:PS C:\> ADD-ADGroupMember "grp-openstack" -members "svc-ldap"
PS C:\> ADD-ADGroupMember "grp-openstack" -members "svc-ldap"Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 AD Domain Controller 中,使用
证书 MMC将 LDAPS 证书的公钥(而不是私钥)导出为 DER 编码的x509.cer 文件。将此文件发送到 OpenStack 管理员。 检索 AD DS 域的 NetBIOS 名称。
PS C:\> Get-ADDomain | select NetBIOSName NetBIOSName ----------- LAB
PS C:\> Get-ADDomain | select NetBIOSName NetBIOSName ----------- LABCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将此值发送到 OpenStack 管理员。
1.5. 配置 LDAPS 证书 复制链接链接已复制到粘贴板!
当使用多个域进行 LDAP 身份验证时,您可能会收到各种错误,如 Unable to retrieve authorized projects,否则 无法识别 Peer 的证书签发者。如果 keystone 对某个域使用不正确的证书,会出现这种情况。作为临时解决方案,将所有 LDAPS 公钥合并到一个 .crt 捆绑包中,并配置所有 keystone 域以使用此文件。
Keystone 使用 LDAPS 查询来验证用户帐户。要加密此流量,keystone 使用 keystone.conf 定义的证书文件。此流程将从 Active Directory 接收的公钥转换为 .crt 格式,并将其复制到 keystone 可以引用的位置。
将 LDAPS 公钥复制到运行 OpenStack Identity (keystone)的节点,并将
.cer转换为.crt。这个示例使用名为addc.lab.local.cer的源证书文件:openssl x509 -inform der -in addc.lab.local.cer -out addc.lab.local.crt cp addc.lab.local.crt /etc/pki/ca-trust/source/anchors
# openssl x509 -inform der -in addc.lab.local.cer -out addc.lab.local.crt # cp addc.lab.local.crt /etc/pki/ca-trust/source/anchorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
另外,如果您需要运行诊断命令,如 ldapsearch,您还需要将证书添加到 RHEL 证书存储中:
将
.cer转换为.pem。这个示例使用名为addc.lab.local.cer的源证书文件:openssl x509 -inform der -in addc.lab.local.cer -out addc.lab.local.pem
# openssl x509 -inform der -in addc.lab.local.cer -out addc.lab.local.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenStack 控制器上安装
.pem。例如,在 Red Hat Enterprise Linux 中:cp addc.lab.local.pem /etc/pki/ca-trust/source/anchors/ update-ca-trust
# cp addc.lab.local.pem /etc/pki/ca-trust/source/anchors/ # update-ca-trustCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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
# setsebool -P authlogin_nsswitch_use_ldap=onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出可能包含类似于如下的消息。可以忽略它们:
Full path required for exclude: net:[4026532245].
Full path required for exclude: net:[4026532245].Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
域目录:mkdir /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/ chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/
# mkdir /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/ # chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 keystone 配置为使用多个后端:
注意您可能需要使用
yum install安装 crudini。crudinicrudini --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
# 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 sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果使用 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'OPENSTACK_API_VERSIONS = { "identity": 3 } OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果使用 director,请注意
/var/lib/config-data/puppet-generated/horizon/etc/openstack-dashboard/local_settings由 Puppet 管理。因此,每当运行openstack overcloud deploy过程时,您添加的任何自定义配置可能会被覆盖。因此,您可能需要每次手动重新添加此配置。重启 horizon 容器以应用设置:
sudo docker restart horizon
$ sudo docker restart horizonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置额外后端:
在本例中,
LAB是用作 Identity Service 域的 NetBIOS 名称。为 AD DS 集成创建 Keystone 域。
使用之前检索的 NetBIOS 名称值作为域名。此方法允许您在登录过程中向用户显示一致的域名。例如,如果 NetBIOS 名称是
LAB:openstack domain create LAB
$ openstack domain create LABCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果此命令不可用,请运行
# source overcloudrc-v3,检查您已为命令行会话启用了 keystone v3。创建配置文件:
要添加 AD DS 后端,请在名为
/var/lib/config-data/puppet-generated/keystone/etc/domains/keystone.的新文件中输入 LDAP 设置。您需要编辑以下示例设置,以适应 AD DS 部署:LAB.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 每个设置的说明:
Expand 设置 Description url用于身份验证的 AD Domain Controller。使用 LDAPS 端口
636。user用于 LDAP 查询的 AD 帐户的可辨识 名称。例如,您可以使用
Get-ADuser svc-ldap | 选择 DistinguishedName 找到 AD 中的 svc-ldap 帐户的可辨识名称值password以上使用的 AD 帐户的纯文本密码。
suffixAD 域的可辨识 名称。您可以使用
Get-ADDomain | 选择 DistinguishedName找到这个值user_tree_dn包含 OpenStack 帐户的组织单元(OU)。
user_objectclass定义 LDAP 用户的类型。对于 AD,请使用
person类型。user_filter过滤呈现给身份服务的用户。因此,只有 grp-openstack 组的成员才能具有身份服务中定义的权限。这个值需要完整的可辨uished Name:
Get-ADGroup grp-openstack | 选择 DistinguishedNameuser_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
# chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 keystone 服务以应用更改:
sudo docker restart keystone
# sudo docker restart keystoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 授予
admin用户对域的访问权限:注意这不向 OpenStack admin 帐户授予实际 AD DS 域中的任何权限。在本例中,术语 域 指的是 OpenStack 对 keystone 域的用法。
获取
LAB域的ID:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 admin 用户的
ID值:openstack user list --domain default | grep admin | 3d75388d351846c6a880e53b2508172a | admin |
# openstack user list --domain default | grep admin | 3d75388d351846c6a880e53b2508172a | admin |Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 admin 角色的
ID值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用返回的域和 admin ID 来构造将
admin用户添加到 keystoneLAB域的admin角色的命令:openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cf
# openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在该命令中添加 NetBIOS 名称来查看 AD DS 域中的用户列表:
注意可能需要过些时间,LDAP 才能在重启或服务重启后变为可查询。
openstack user list --domain LAB
# openstack user list --domain LABCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看本地 Identity Service 数据库中的服务帐户:
openstack user list --domain default
# openstack user list --domain defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6.2. 允许 Active Directory 组成员访问项目 复制链接链接已复制到粘贴板!
为了允许经过身份验证的用户访问 OpenStack 资源,建议的做法是授权特定的 Active Directory 组授予项目的访问权限。这样可保存 OpenStack 管理员,不必将每个用户分配到项目中的角色。相反,Active Directory 组在项目中被授予角色。因此,属于这些 Active Directory 组成员的 Active Directory 用户将能够访问预先确定的项目。
如果您希望手动管理单个 Active Directory 用户的授权,请参阅 第 1.6.3 节 “允许 Active Directory 用户访问项目”。
本节假设 Active Directory 管理员已完成这些步骤:
-
在 Active Directory 中,创建名为
grp-openstack-admin的组。 -
在 Active Directory 中,创建名为
grp-openstack-demo的组。 - 根据需要,将您的 Active Directory 用户添加到上述组之一。
-
将您的 Active Directory 用户添加到
grp-openstack组。 -
思考一个指定的项目。本例使用名为
demo的项目,通过openstack project create --domain default --description "Demo Project" demo创建的。
这些步骤将为 AD 组分配角色。然后,组成员具有访问 OpenStack 资源的权限。
检索 AD 组列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索角色列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向 Active Directory 组授予项目的访问权限,方法是将它们添加到一个或多个这些角色中。例如,如果您希望
grp-openstack-demo组中的用户是demo项目的一般用户,您必须将组添加到_member_角色中:openstack role add --project demo --group d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8 _member_
# openstack role add --project demo --group d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8 _member_Copy to Clipboard Copied! Toggle word wrap Toggle overflow
因此,当域字段输入 LAB 时,grp-openstack-demo 的成员可以通过输入其 AD DS 用户名和密码来登录仪表板:
如果用户收到错误 Error: Unable to retrieve container list,并且希望能够管理容器,则它们必须添加到 SwiftOperator 角色中。
1.6.3. 允许 Active Directory 用户访问项目 复制链接链接已复制到粘贴板!
可以授予属于 grp-openstack AD 组的成员的 AD DS 用户,可授予在仪表板中登录到项目的权限:
检索 AD 用户列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索角色列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过向一个或多个角色添加项目访问权限,授予用户对项目的访问权限。例如,如果您希望
user1是demo项目的一般用户,您可以将它们添加到member角色中:openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e _member_
# openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e _member_Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,如果您希望
user1是demo项目的管理员用户,您可以将它们添加到admin角色中:openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e admin
# openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,当在
Domain字段中输入LAB时,user1能够通过输入 AD DS 用户名和密码来登录仪表板:
如果用户收到错误 Error: Unable to retrieve container list,并且希望能够管理容器,则它们必须添加到 SwiftOperator 角色中。
1.7. 授予对 Domain 选项卡的访问权限 复制链接链接已复制到粘贴板!
要允许 admin 用户看到 Domain 选项卡,您需要为它分配 默认 域中的 admin 角色:
查找
admin用户的 UUID:openstack user list | grep admin | a6a8adb6356f4a879f079485dad1321b | admin |
$ openstack user list | grep admin | a6a8adb6356f4a879f079485dad1321b | admin |Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将默认域中的admin角色添加到admin用户:openstack role add --domain default --user a6a8adb6356f4a879f079485dad1321b admin
$ openstack role add --domain default --user a6a8adb6356f4a879f079485dad1321b adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,
admin用户现在可以看到Domain选项卡。
1.8. 创建新项目 复制链接链接已复制到粘贴板!
完成这些集成步骤后,当您创建新项目时,您需要确定它是在 Default 域中创建它,还是在刚刚创建的 keystone 域中。您可以通过考虑您的工作流以及如何管理用户帐户来实现此决定。Default 域可以被视为内部域,用于管理服务帐户和 admin 项目。为了分离目的,您可能想要将 AD 支持的用户保存在单独的 keystone 域中。
1.9. 仪表板登录过程中的更改 复制链接链接已复制到粘贴板!
在 Identity Service 中配置多个域会在仪表板登录页面中启用一个新的 Domain 字段。
用户应该输入与其登录凭据匹配的域。此字段必须手动填写 keystone 中存在的一个域。使用 openstack 命令列出可用的条目。
在本例中,AD DS 帐户需要指定 LAB 域。内置 keystone 帐户(如 admin )必须将 Default 指定为其域:
1.10. 对命令行的更改 复制链接链接已复制到粘贴板!
对于某些命令,您可能需要指定适用的域。例如,在此命令中附加 --domain LAB 可返回 LAB 域中的用户(属于 grp-openstack 组的成员):
openstack user list --domain LAB
# openstack user list --domain LAB
附加 --domain Default 会返回内置 keystone 帐户:
openstack user list --domain Default
# openstack user list --domain Default
1.11. 测试 AD DS 集成 复制链接链接已复制到粘贴板!
此流程通过测试用户访问仪表板功能来验证 AD DS 集成:
-
在 AD 中创建测试用户,并将用户添加到
grp-openstackAD DS 组。 -
将用户添加到
demo租户的_member_角色。 - 使用 AD test 用户的凭据登录控制面板。
- 单击每个选项卡,以确认它们已成功显示且无错误消息。
- 使用控制面板构建测试实例。
如果您在执行这些步骤时遇到问题,请使用内置的 admin 帐户执行第 3-5 步。如果成功,这表明 OpenStack 仍按预期工作,并且 AD → 身份集成设置中的某个位置存在问题。请参阅 第 1.13 节 “故障排除”。
1.12. 为非管理员用户创建 RC 文件 复制链接链接已复制到粘贴板!
您可能需要为非管理员用户创建 RC 文件。例如:
1.13. 故障排除 复制链接链接已复制到粘贴板!
1.13.1. 测试 LDAP 连接 复制链接链接已复制到粘贴板!
此命令需要在主机操作系统中查找所需的证书。如需更多信息,请参阅 配置 LDAPS 证书 部分。
使用 ldapsearch 对 Active Directory 域控制器远程执行测试查询。此处的成功结果表示网络连接正常工作,AD DS 服务已启动。在本例中,对端口 636 的 server addc.lab.local 执行测试查询:
ldapsearch -Z -x -H ldaps://addc.lab.local:636 -D "svc-ldap@lab.local" -W -b "OU=labUsers,DC=lab,DC=local" -s sub "(cn=*)" cn
# ldapsearch -Z -x -H ldaps://addc.lab.local:636 -D "svc-ldap@lab.local" -W -b "OU=labUsers,DC=lab,DC=local" -s sub "(cn=*)" cn
LDAPSearch 是 openldap-clients 软件包的一部分。您可以使用 # yum install openldap-clients安装它
1.13.2. 测试证书信任配置 复制链接链接已复制到粘贴板!
如果您在使用 ldapsearch 进行测试时收到了错误 Peer 的证书签发者,请确认您的 TLS_CACERTDIR 路径设置正确。例如:
- /etc/openldap/ldap.conf
TLS_CACERTDIR /etc/openldap/certs
TLS_CACERTDIR /etc/openldap/certs
作为临时解决方案,您可能需要禁用证书验证。
不得永久配置此设置 :
-
/etc/openldap/ldap.conf
TLS_REQCERT allow
TLS_REQCERT allow
如果在设置这个值后 ldapsearch 查询可以正常工作,您可能需要检查您的证书信任是否正确。
1.13.3. 测试端口访问 复制链接链接已复制到粘贴板!
使用 nc 检查 LDAPS 端口 636 是否可以远程访问。在本例中,对 server addc.lab.local 执行探测。按 ctrl-c 退出提示符。
nc -v addc.lab.local 636 Ncat: Version 6.40 ( http://nmap.org/ncat ) Ncat: Connected to 192.168.200.10:636. ^C
# nc -v addc.lab.local 636
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.200.10:636.
^C
无法建立连接可能会代表防火墙配置问题。
第 2 章 Identity Management 集成 复制链接链接已复制到粘贴板!
规划 OpenStack 身份与 Red Hat Identity Manager (IdM)集成时,请确保这两个服务都已配置并正在运行,并审查集成与用户管理和防火墙设置的影响。Red Hat Identity Manager IdM 依赖于 SRV 记录来实现负载平衡。您不应该将负载均衡器放在 IdM 的前面。
- 前提条件
- Red Hat Identity Management 是配置且可操作。
- Red Hat OpenStack Platform 是配置且可操作。
- DNS 名称解析可以完全正常工作,所有主机都正确注册。
- 权限和角色
- 此集成允许 IdM 用户对 OpenStack 进行验证并访问资源。OpenStack 服务帐户(如 keystone 和 glance)和授权管理(权限和角色)将保留在 Identity Service 数据库中。使用身份服务管理工具为 IdM 帐户分配权限和角色。
- 高可用性选项
- 这个配置会依赖于单个 IdM 服务器的可用性:如果 Identity Service 无法向 IdM 服务器进行身份验证,则项目用户将会受到影响。不建议将负载均衡器放在 IdM 前,但您可以将 keystone 配置为查询不同的 IdM 服务器,应该不可用。
- 中断要求
- 为了添加 IdM 后端,需要重启 Identity Service。
- 在 IdM 中创建其帐户后,用户才能访问仪表板。要减少停机时间,请考虑预先创建 IdM 帐户。
- 防火墙配置
IdM 和 OpenStack 之间的通信包括以下内容:
- 验证用户
- IdM 每隔两小时从控制器检索证书撤销列表(CRL)
- 在过期时为新证书的 certmonger 请求
如果初始请求失败,则定期 certmonger 任务将继续请求新证书。
如果在 IdM 和 OpenStack 间过滤防火墙流量,您需要允许通过以下端口进行访问:
+
| 源 | 目的地 | 类型 | 端口 |
| OpenStack Controller 节点 | Red Hat Identity Management | LDAPS | TCP 636 |
2.1. 配置 IdM 服务器 复制链接链接已复制到粘贴板!
在 IdM 服务器中运行这些命令:
创建 LDAP 查找帐户。Identity Service 使用这个帐户查询 IdM LDAP 服务:
kinit admin ipa user-add First name: OpenStack Last name: LDAP User [radministrator]: svc-ldap
# kinit admin # ipa user-add First name: OpenStack Last name: LDAP User [radministrator]: svc-ldapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意创建之后,查看此帐户的密码过期设置。
为 OpenStack 用户创建一个组,取名为 grp-openstack。只有此组成员才能在 OpenStack 身份服务中分配权限。
ipa group-add --desc="OpenStack Users" grp-openstack
# ipa group-add --desc="OpenStack Users" grp-openstackCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 svc-ldap 帐户密码,并将其添加到 grp-openstack 组中:
ipa passwd svc-ldap ipa group-add-member --users=svc-ldap grp-openstack
# ipa passwd svc-ldap # ipa group-add-member --users=svc-ldap grp-openstackCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以 svc-ldap 用户身份登录,并在系统提示时执行密码更改:
kinit svc-ldap
# kinit svc-ldapCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. 配置 LDAPS 证书 复制链接链接已复制到粘贴板!
当使用多个域进行 LDAP 身份验证时,您可能会收到各种错误,如 Unable to retrieve authorized projects,否则 无法识别 Peer 的证书签发者。如果 keystone 对某个域使用不正确的证书,会出现这种情况。作为临时解决方案,将所有 LDAPS 公钥合并到一个 .crt 捆绑包中,并配置所有 keystone 域以使用此文件。
在 IdM 环境中,找到 LDAPS 证书。此文件可以使用 /etc/openldap/ldap.conf :
TLS_CACERT /etc/ipa/ca.crt
TLS_CACERT /etc/ipa/ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 文件复制到运行 keystone 服务的 OpenStack 节点。例如,这个命令使用 scp 将 ca.crt 复制到名为 node.lab.local 的节点上:
scp /etc/ipa/ca.crt root@node.lab.local:/root/
# scp /etc/ipa/ca.crt root@node.lab.local:/root/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenStack 节点上,将 .crt 转换为 .pem:
openssl x509 -in ca.crt -out ca.pem -outform PEM
# openssl x509 -in ca.crt -out ca.pem -outform PEMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 .crt 复制到证书目录中。这是 keystone 服务用来访问证书的位置:
cp ca.crt /etc/pki/ca-trust/source/anchors
# cp ca.crt /etc/pki/ca-trust/source/anchorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
另外,如果您需要运行诊断命令,如 ldapsearch,您还需要将证书添加到 RHEL 证书存储中。例如:
cp ca.pem /etc/pki/ca-trust/source/anchors/ update-ca-trust
# cp ca.pem /etc/pki/ca-trust/source/anchors/
# update-ca-trust
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
# setsebool -P authlogin_nsswitch_use_ldap=onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出可能包含类似于如下的消息。可以忽略它们:
Full path required for exclude: net:[4026532245].
Full path required for exclude: net:[4026532245].Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 域 目录:
mkdir /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/ chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/
# mkdir /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/ # chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置身份服务以使用多个后端:
注意您可能需要使用
yum install安装 crudini。crudinicrudini --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
# 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 sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果使用 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'OPENSTACK_API_VERSIONS = { "identity": 3 } OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果使用 director,请注意
/var/lib/config-data/puppet-generated/horizon/etc/openstack-dashboard/local_settings由 Puppet 管理。因此,每当运行openstack overcloud deploy过程时,您添加的任何自定义配置可能会被覆盖。因此,您可能需要每次手动重新添加此配置。重启 horizon 容器以应用设置:
sudo docker restart horizon
$ sudo docker restart horizonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置额外后端:
为 IdM 集成创建 keystone 域。您需要决定新 keystone 域的名称,然后创建该域。例如,这个命令会创建一个名为
LAB的 Keystone 域:openstack domain create LAB
$ openstack domain create LABCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建配置文件:
要添加 IdM 后端,请在名为
/var/lib/config-data/puppet-generated/keystone/etc/domains/keystone.的新文件中输入 LDAP 设置。您需要编辑以下示例设置,以适应 IdM 部署:LAB.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 每个设置的说明:
Expand 设置 Description url用于身份验证的 IdM 服务器。使用 LDAPS 端口
636。user用于 LDAP 查询的 IdM 中的帐户。
password以上使用的 IdM 帐户的纯文本密码。
user_filter过滤呈现给身份服务的用户。因此,只有 grp-openstack 组的成员才能具有身份服务中定义的权限。
user_tree_dnIdM 中 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
# chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 授予 admin 用户对域的访问权限:
注意这不向 OpenStack admin 帐户授予 IdM 中的任何权限。在本例中,术语域指的是 OpenStack 对 keystone 域的用法。
获取 LAB 域的
ID:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 admin 用户的
ID值:openstack user list --domain default | grep admin | 3d75388d351846c6a880e53b2508172a | admin |
$ openstack user list --domain default | grep admin | 3d75388d351846c6a880e53b2508172a | admin |Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 admin 角色的
ID值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用返回的域和 admin ID 来构造将 admin 用户添加到 keystone LAB 域的 admin 角色的命令:
openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cf
$ openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cfCopy to Clipboard Copied! Toggle word wrap Toggle overflow
重启 keystone 服务以应用更改:
sudo docker restart keystone
$ sudo docker restart keystoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在命令中添加 keystone 域名来查看 IdM 域中的用户列表:
openstack user list --domain LAB
$ openstack user list --domain LABCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看本地 keystone 数据库中的服务帐户:
openstack user list --domain default
$ openstack user list --domain defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2. 允许 IdM 组成员访问项目 复制链接链接已复制到粘贴板!
要允许经过身份验证的用户访问 OpenStack 资源,推荐的方法是授权某些 IdM 组授予项目访问权限。这样可保存 OpenStack 管理员,不必将每个用户分配到项目中的角色。相反,IdM 组在项目中被授予角色。因此,属于这些 IdM 组成员的 IdM 用户将能够访问预先确定的项目。
如果您希望手动管理单个 IdM 用户的授权,请查看 第 2.3.3 节 “允许 IdM 用户访问项目”。
本节假设 IdM 管理员已经完成这些步骤:
-
在 IdM 中创建名为
grp-openstack-admin的组。 -
在 IdM 中创建一个名为
grp-openstack-demo的组。 - 根据需要将 IdM 用户添加到上述组之一。
-
将 IdM 用户添加到
grp-openstack组。 -
思考一个指定的项目。本例使用名为
demo的项目,通过openstack project create --domain default --description "Demo Project" demo创建的。
这些步骤为 IdM 组分配角色。然后,组成员具有访问 OpenStack 资源的权限。
检索 IdM 组列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索角色列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 IdM 组授予项目的访问权限,方法是将它们添加到一个或多个这些角色中。例如,如果您希望
grp-openstack-demo组中的用户是demo项目的一般用户,您必须将组添加到_member_角色中:openstack role add --project demo --group d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8 _member_
$ openstack role add --project demo --group d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8 _member_Copy to Clipboard Copied! Toggle word wrap Toggle overflow
因此,当域字段输入 LAB 时,grp-openstack-demo 的成员可以通过输入其 IdM 用户名和密码来登录控制面板:
如果用户收到错误 Error: Unable to retrieve container list,并且希望能够管理容器,则它们必须添加到 SwiftOperator 角色中。
2.3.3. 允许 IdM 用户访问项目 复制链接链接已复制到粘贴板!
属于 grp-openstack IdM 组的成员的 IdM 用户被授予在仪表板中登录到项目的权限:
检索 IdM 用户列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索角色列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过向一个或多个角色添加项目访问权限,授予用户对项目的访问权限。例如,如果您希望
user1是demo项目的一般用户,您可以将它们添加到member角色中:openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e _member_
# openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e _member_Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,如果您希望
user1是demo项目的管理员用户,您可以将它们添加到admin角色中:openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e admin
# openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,在
Domain字段中输入LAB时,user1就可以通过输入其 IdM 用户名和密码来登录到仪表板:
如果用户收到错误 Error: Unable to retrieve container list,并且希望能够管理容器,则它们必须添加到 SwiftOperator 角色中。
2.4. 授予对 Domain 选项卡的访问权限 复制链接链接已复制到粘贴板!
要允许 admin 用户看到 Domain 选项卡,您需要为它分配 默认 域中的 admin 角色:
查找
admin用户的 UUID:openstack user list | grep admin | a6a8adb6356f4a879f079485dad1321b | admin |
$ openstack user list | grep admin | a6a8adb6356f4a879f079485dad1321b | admin |Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将默认域中的admin角色添加到admin用户:openstack role add --domain default --user a6a8adb6356f4a879f079485dad1321b admin
$ openstack role add --domain default --user a6a8adb6356f4a879f079485dad1321b adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,
admin用户现在可以看到Domain选项卡。
2.5. 创建新项目 复制链接链接已复制到粘贴板!
完成这些集成步骤后,当您创建新项目时,您需要确定它是在 Default 域中创建它,还是在刚刚创建的 keystone 域中。您可以通过考虑您的工作流以及如何管理用户帐户来实现此决定。Default 域可以被视为内部域(用于服务帐户和 admin 项目),因此您的 AD 支持的用户可能被放置到不同的 keystone 域中;这严格不需要与 IdM 用户所处的相同 Keystone 域,用于分离目的,可能有多个 keystone 域。
2.5.1. 仪表板登录过程中的更改 复制链接链接已复制到粘贴板!
在 Identity Service 中配置多个域会在仪表板登录页面中启用一个新的 Domain 字段。
用户应该输入与其登录凭据匹配的域。此字段必须手动填写 keystone 中存在的一个域。使用 openstack 命令列出可用的条目。
在本例中,IdM 帐户需要指定 LAB 域。内置 keystone 帐户(如 admin )必须将 Default 指定为其域:
2.5.2. 对命令行的更改 复制链接链接已复制到粘贴板!
对于某些命令,您可能需要指定适用的域。例如,在此命令中附加 --domain LAB 可返回 LAB 域中的用户(属于 grp-openstack 组的成员):
openstack user list --domain LAB
$ openstack user list --domain LAB
附加 --domain Default 会返回内置 keystone 帐户:
openstack user list --domain Default
$ openstack user list --domain Default
2.5.3. 测试 IdM 集成 复制链接链接已复制到粘贴板!
此流程通过测试用户访问仪表板功能来验证 IdM 集成:
-
在 IdM 中创建测试用户,并将用户添加到
grp-openstackIdM 组中。 -
将用户添加到
demo租户的_member_角色。 - 使用 IdM test 用户的凭据登录控制面板。
- 单击每个选项卡,以确认它们已成功显示且无错误消息。
- 使用控制面板构建测试实例。
如果您在执行这些步骤时遇到问题,请使用内置的 admin 帐户执行第 3-5 步。如果成功,这表明 OpenStack 仍按预期工作,并且 IdM → Identity 集成设置中的某个问题存在。请参阅 第 2.7 节 “故障排除”。
2.6. 为非管理员用户创建 RC 文件 复制链接链接已复制到粘贴板!
您可能需要为非管理员用户创建 RC 文件。例如:
2.7. 故障排除 复制链接链接已复制到粘贴板!
2.7.1. 测试 LDAP 连接 复制链接链接已复制到粘贴板!
使用 ldapsearch 对 IdM 服务器远程执行测试查询。此处的成功结果表示网络连接正常工作,IdM 服务已启动。在本例中,测试查询针对端口 636 上的服务器 idm.lab.local 执行:
ldapsearch -D "cn=directory manager" -H ldaps://idm.lab.local:636 -b "dc=lab,dc=local" -s sub "(objectclass=*)" -w RedactedComplexPassword
# ldapsearch -D "cn=directory manager" -H ldaps://idm.lab.local:636 -b "dc=lab,dc=local" -s sub "(objectclass=*)" -w RedactedComplexPassword
LDAPSearch 是 openldap-clients 软件包的一部分。您可以使用 # yum install openldap-clients 来安装它。
2.7.2. 测试端口访问 复制链接链接已复制到粘贴板!
使用 nc 检查 LDAPS 端口(636)是否可以远程访问。在本例中,探测针对服务器 idm.lab.local 执行。按 ctrl-c 退出提示符。
nc -v idm.lab.local 636 Ncat: Version 6.40 ( http://nmap.org/ncat ) Ncat: Connected to 192.168.200.10:636. ^C
# nc -v idm.lab.local 636
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.200.10:636.
^C
无法建立连接可能会代表防火墙配置问题。
第 3 章 使用 novajoin 与 IdM 集成 复制链接链接已复制到粘贴板!
novajoin 允许您在部署过程中使用 Red Hat Identity Manager (IdM)注册节点。因此,您可以将 IdM 功能与您的 OpenStack 部署集成,包括身份、kerberos 凭证和访问控制。
通过 novajoin 的 IdM 注册目前仅适用于 undercloud 和 overcloud 节点。overcloud 实例的 novajoin 集成应该在以后的版本中被支持。
3.1. 在 undercloud 中安装并配置 novajoin 复制链接链接已复制到粘贴板!
3.1.1. 将 undercloud 添加到 CA 复制链接链接已复制到粘贴板!
在部署 overcloud 之前,您必须将 undercloud 添加到证书颁发机构(CA)中:
在 undercloud 节点上,安装
python-novajoin软件包:sudo yum install python-novajoin
$ sudo yum install python-novajoinCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 undercloud 节点上,运行
novajoin-ipa-setup脚本,调整值以适合您的部署:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下部分中,您将使用生成的一次性密码(OTP)注册 undercloud。
3.1.2. 将 undercloud 添加到 IdM 复制链接链接已复制到粘贴板!
此流程使用 IdM 注册 undercloud,并配置 novajoin。在 undercloud.conf 中配置以下设置(在 [DEFAULT] 部分中):
默认情况下,禁用 novajoin 服务。启用它:
[DEFAULT] enable_novajoin = true
[DEFAULT] enable_novajoin = trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您需要设置一个一次性密码(OTP),以使用 IdM 注册 undercloud 节点:
ipa_otp = <otp>
ipa_otp = <otp>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保 neutron 的 DHCP 服务器提供 overcloud 的域名与 IdM 域(您小写的 kerberos 域)匹配:
overcloud_domain_name = <domain>
overcloud_domain_name = <domain>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 undercloud 设置适当的主机名:
undercloud_hostname = <undercloud FQDN>
undercloud_hostname = <undercloud FQDN>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 IdM 设置为 undercloud 的名称服务器:
undercloud_nameservers = <IdM IP>
undercloud_nameservers = <IdM IP>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于较大的环境,您需要查看 novajoin 连接超时值。在
undercloud.conf中,添加对名为undercloud-timeout.yaml的新文件的引用:hieradata_override = /home/stack/undercloud-timeout.yaml
hieradata_override = /home/stack/undercloud-timeout.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
undercloud-timeout.yaml中添加以下选项。您可以指定超时值(以秒为单位),例如5:nova::api::vendordata_dynamic_connect_timeout: <timeout value> nova::api::vendordata_dynamic_read_timeout: <timeout value>
nova::api::vendordata_dynamic_connect_timeout: <timeout value> nova::api::vendordata_dynamic_read_timeout: <timeout value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
undercloud.conf文件。 运行 undercloud 部署命令,将更改应用到现有的 undercloud:
openstack undercloud install
$ openstack undercloud installCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
keytab文件是否有 undercloud 的密钥条目:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用主机原则测试系统
/etc/krb.keytab文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 nova 原则测试 novajoin
/etc/novajoin/krb.keytab文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2. 在 overcloud 中安装和配置 novajoin 复制链接链接已复制到粘贴板!
这些部分描述了如何使用 IdM 注册 overcloud 节点。
3.2.1. 配置 overcloud DNS 复制链接链接已复制到粘贴板!
要自动检测 IdM 环境并更容易注册,请考虑使用 IdM 作为您的 DNS 服务器:
连接到 undercloud:
source ~/stackrc
$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 control plane 子网配置为使用 IdM 作为 DNS 名称服务器:
openstack subnet set ctlplane-subnet --dns-nameserver <idm_server_address>
$ openstack subnet set ctlplane-subnet --dns-nameserver <idm_server_address>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在环境文件中设置
DnsServers参数以使用您的 IdM 服务器:parameter_defaults: DnsServers: ["<idm_server_address>"]
parameter_defaults: DnsServers: ["<idm_server_address>"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此参数通常在自定义
network-environment.yaml文件中定义。
3.2.2. 将 overcloud 配置为使用 novajoin 复制链接链接已复制到粘贴板!
要启用 IdM 集成,请创建一个
/usr/share/openstack-tripleo-heat-templates/environments/predictable-placement/custom-domain.yaml环境文件的副本:cp /usr/share/openstack-tripleo-heat-templates/environments/predictable-placement/custom-domain.yaml \ /home/stack/templates/custom-domain.yaml
$ cp /usr/share/openstack-tripleo-heat-templates/environments/predictable-placement/custom-domain.yaml \ /home/stack/templates/custom-domain.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/home/stack/templates/custom-domain.yaml环境文件,并将CloudDomain和CloudName*值设置为适合您的部署。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 overcloud 部署过程中包含以下环境文件:
-
/usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml -
/usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-everywhere-endpoints-dns.yaml /home/stack/templates/custom-domain.yaml例如:
openstack overcloud deploy \ --templates \ -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-everywhere-endpoints-dns.yaml \ -e /home/stack/templates/custom-domain.yaml \
openstack overcloud deploy \ --templates \ -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-everywhere-endpoints-dns.yaml \ -e /home/stack/templates/custom-domain.yaml \Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,部署的 overcloud 节点将自动注册到 IdM。
-
这仅为内部端点设置 TLS。对于外部端点,您可以使用普通的方法为
/usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-tls.yaml环境文件(必须修改它来添加自定义证书和密钥)。因此,您的openstack deploy命令与此类似:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您还可以使用 IdM 发布公共证书。在这种情况下,您需要使用
/usr/share/openstack-tripleo-heat-templates/environments/services/haproxy-public-tls-certmonger.yaml环境文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 在 IdM 中验证节点 复制链接链接已复制到粘贴板!
在 IdM 中找到 overcloud 节点,并确认主机条目包含
Keytab:True:Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSH 到节点,并确认 sssd 可以查询 IdM 用户。例如,查询名为
susan的 IdM 用户:getent passwd susan uid=1108400007(susan) gid=1108400007(bob) groups=1108400007(susan)
$ getent passwd susan uid=1108400007(susan) gid=1108400007(bob) groups=1108400007(susan)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. 为 Novajoin 配置 DNS 条目 复制链接链接已复制到粘贴板!
如果您使用 haproxy-public-tls-certmonger.yaml 模板为端点发布公共证书,那么您将需要为 Novajoin 所用的 VIP 端点手动创建 DNS 条目:
识别 overcloud 网络。您可以在
/home/stack/virt/network/network-environment.yaml中找到它们:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个 overcloud 网络创建虚拟 IP 地址(VIP)列表。例如: /home/stack/virt/public_vip.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IdM 中为每个 VIP 添加 DNS 条目。您可能还需要创建新区域。以下示例演示了 IdM 的 DNS 记录和区创建:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 将特定于域的 LDAP 后端与 director 一起使用 复制链接链接已复制到粘贴板!
Red Hat OpenStack Platform director 可将 keystone 配置为使用一个或多个 LDAP 后端。这种方法会导致为每个 keystone 域创建单独的 LDAP 后端。
4.1. 设置配置选项 复制链接链接已复制到粘贴板!
对于使用 Red Hat OpenStack Platform director 的部署,您需要在 heat 模板中将 KeystoneLDAPDomainEnable 标志设置为 true ;因此,这会在 keystone 中配置 domain_specific_drivers_enabled 选项(在 identity 配置组中)。
域配置文件的默认目录设置为 /etc/keystone/domains/。您可以使用 keystone::domain_config_directory hiera 键设置所需的路径来覆盖它,并将它添加为环境文件中的 ExtraConfig 参数。
您还必须添加 LDAP 后端配置的规格。这是使用 tripleo-heat-templates 中的 KeystoneLDAPBackendConfigs 参数实现,然后您可以在其中指定所需的 LDAP 选项。
4.2. 配置 director 部署 复制链接链接已复制到粘贴板!
创建
keystone_domain_specific_ldap_backend.yaml环境文件的副本:cp /usr/share/openstack-tripleo-heat-templates/environments/services/keystone_domain_specific_ldap_backend.yaml /home/stack/templates/
$ cp /usr/share/openstack-tripleo-heat-templates/environments/services/keystone_domain_specific_ldap_backend.yaml /home/stack/templates/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/home/stack/templates/keystone_domain_specific_ldap_backend.yaml环境文件,并将值设置为适合您的部署。例如,这些条目为名为testdomain的 keystone 域创建 LDAP 配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以配置环境文件来指定多个域。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这将产生两个名为
domain1和domain2的域;每个域都有自己的配置,每个域都有不同的 LDAP 域。