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 节点上执行这个步骤:

  1. 配置 SELinux:

    # setsebool -P authlogin_nsswitch_use_ldap=on

    输出可能包含类似于如下的消息。可以忽略它们:

    Full path required for exclude: net:[4026532245].
  2. 创建 目录:

    # mkdir /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/
    # chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/
  3. 将 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 一起使用

  4. 在控制面板中启用多个域.将这些行添加到 /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
  5. 配置额外后端:

    在本例中,LAB 是用作 Identity Service 域的 NetBIOS 名称。

    1. 为 AD DS 集成创建 Keystone 域。

      使用之前检索的 NetBIOS 名称值作为域名。此方法允许您在登录过程中向用户显示一致的域名。例如,如果 NetBIOS 名称是 LAB

      $ openstack domain create LAB
      注意

      如果此命令不可用,请运行 # source overcloudrc-v3,检查您已为命令行会话启用了 keystone v3。

    2. 创建配置文件:

      要添加 AD DS 后端,请在名为 /var/lib/config-data/puppet-generated/keystone/etc/domains/keystone. LAB.conf 的新文件中输入 LDAP 设置。您需要编辑以下示例设置,以适应 AD DS 部署:

      [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 辅助所有使用匿名访问的引用。

  6. 将配置文件的所有权改为 keystone 用户:

    # chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.conf
  7. 重启 keystone 服务以应用更改:

    # sudo docker restart keystone
  8. 授予 admin 用户对域的访问权限:

    注意

    这不向 OpenStack admin 帐户授予实际 AD DS 域中的任何权限。在本例中,术语 指的是 OpenStack 对 keystone 域的用法。

    1. 获取 LAB 域的 ID

      # openstack domain show LAB
      +---------+----------------------------------+
      | Field   | Value                            |
      +---------+----------------------------------+
      | enabled | True                             |
      | id      | 6800b0496429431ab1c4efbb3fe810d4 |
      | name    | LAB                              |
      +---------+----------------------------------+
    2. 获取 admin 用户的 ID 值:

      # openstack user list --domain default | grep admin
      | 3d75388d351846c6a880e53b2508172a | admin      |
    3. 获取 admin 角色的 ID 值:

      # openstack role list
      +----------------------------------+---------------+
      | ID                               | Name          |
      +----------------------------------+---------------+
      | 544d48aaffde48f1b3c31a52c35f01f9 | SwiftOperator |
      | 6d005d783bf0436e882c55c62457d33d | ResellerAdmin |
      | 785c70b150ee4c778fe4de088070b4cf | admin         |
      | 9fe2ff9ee4384b1894a90878d3e92bab | _member_      |
      +----------------------------------+---------------+
    4. 使用返回的域和 admin ID 来构造将 admin 用户添加到 keystone LAB 域的 admin 角色的命令:

      # openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cf
    5. 通过在该命令中添加 NetBIOS 名称来查看 AD DS 域中的用户列表:

      注意

      可能需要过些时间,LDAP 才能在重启或服务重启后变为可查询。

      # openstack user list --domain LAB
    6. 查看本地 Identity Service 数据库中的服务帐户:

      # openstack user list --domain default
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.