7.3. 配置 LDAP 身份提供程序

配置 ldap 身份提供程序,使用简单绑定身份验证来针对 LDAPv3 服务器验证用户名和密码。

7.3.1. 关于 OpenShift Container Platform 中的身份提供程序

默认情况下,集群中只有 kubeadmin 用户。要指定身份提供程序,您必须创建一个自定义资源 (CR) 来描述该身份提供程序并把它添加到集群中。

注意

OpenShift Container Platform 用户名不能包括 /:%

7.3.2. 关于 LDAP 身份验证

在身份验证过程中,搜索 LDAP 目录中与提供的用户名匹配的条目。如果找到一个唯一匹配项,则尝试使用该条目的可分辨名称 (DN) 以及提供的密码进行简单绑定。

执行下面这些步骤:

  1. 通过将配置的 url 中的属性和过滤器与用户提供的用户名组合来生成搜索过滤器。
  2. 使用生成的过滤器搜索目录。如果搜索返回的不是一个条目,则拒绝访问。
  3. 尝试使用搜索所获条目的 DN 和用户提供的密码绑定到 LDAP 服务器。
  4. 如果绑定失败,则拒绝访问。
  5. 如果绑定成功,则将配置的属性用作身份、电子邮件地址、显示名称和首选用户名来构建一个身份。

配置的 url 是 RFC 2255 URL,指定要使用的 LDAP 主机和搜索参数。URL 的语法是:

ldap://host:port/basedn?attribute?scope?filter

在这个 URL 中:

URL 组件描述

ldap

对于常规 LDAP,使用 ldap 字符串。对于安全 LDAP (LDAPS),改为使用 ldaps

host:port

LDAP 服务器的名称和端口。LDAP 默认为 localhost:389,LDAPS 则默认为 localhost:636

basedn

所有搜索都应从中开始的目录分支的 DN。至少,这必须是目录树的顶端,但也可指定目录中的子树。

attribute

要搜索的属性。虽然 RFC 2255 允许使用逗号分隔属性列表,但无论提供多少个属性,都仅使用第一个属性。如果没有提供任何属性,则默认使用 uid。建议选择一个在您使用的子树中的所有条目间是唯一的属性。

scope

搜索的范围。可以是 onesub。如果未提供范围,则默认使用 sub 范围。

filter

有效的 LDAP 搜索过滤器。如果未提供,则默认为 (objectClass=*)

重要

如果您使用不安全的 LDAP 连接(ldap:// 或端口 389),则必须在配置向导中检查 Insecure 选项。

在进行搜索时,属性、过滤器和提供的用户名会组合在一起,创建类似如下的搜索过滤器:

(&(<filter>)(<attribute>=<username>))

例如,可考虑如下 URL:

ldap://ldap.example.com/o=Acme?cn?sub?(enabled=true)

当客户端尝试使用用户名 bob 连接时,生成的搜索过滤器将为 (&(enabled=true)(cn=bob))

如果 LDAP 目录需要身份验证才能搜索,请指定用于执行条目搜索的 bindDNbindPassword

7.3.3. 创建 LDAP Secret

要使用身份提供程序,您必须定义一个包含 bindPassword 的 OpenShift Container Platform Secret。

  • 定义包含 bindPassword 的 OpenShift Container Platform Secret。

    $ oc create secret generic ldap-secret --from-literal=bindPassword=<secret> -n openshift-config
    注意

    包含 --from-literal 参数的 bindPassword 的 secret 键必须名为 bindPassword,如上述命令所示。

7.3.4. 创建 ConfigMap

身份提供程序使用 openshift-config 命名空间中的 OpenShift Container Platform ConfigMap 来包含证书颁发机构捆绑包。主要用于包含身份提供程序所需的证书捆绑包。

  • 使用以下命令,定义包含证书颁发机构的 OpenShift Container Platform ConfigMap。证书颁发机构必须存储在 ConfigMap 的 ca.crt 键中。

    $ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config

7.3.5. LDAP CR 示例

以下自定义资源 (CR) 显示 LDAP 身份提供程序的参数和可接受值。

LDAP CR

apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: ldapidp 1
    mappingMethod: claim 2
    type: LDAP
    ldap:
      attributes:
        id: 3
        - dn
        email: 4
        - mail
        name: 5
        - cn
        preferredUsername: 6
        - uid
      bindDN: "" 7
      bindPassword: 8
        name: ldap-secret
      ca: 9
        name: ca-config-map
      insecure: false 10
      url: "ldap://ldap.example.com/ou=users,dc=acme,dc=com?uid" 11

1
此提供程序名称作为前缀放在返回的用户 ID 前,以此组成身份名称。
2
控制如何在此提供程序的身份和用户对象之间建立映射。
3
用作身份的属性列表。使用第一个非空属性。至少需要一个属性。如果列出的属性都没有值,身份验证会失败。定义属性按原样检索,允许使用二进制值。
4
用作电子邮件地址的属的列表。使用第一个非空属性。
5
用作显示名称的属性列表。使用第一个非空属性。
6
为此身份置备用户时用作首选用户名的属性列表。使用第一个非空属性。
7
在搜索阶段用来绑定的可选 DN。如果定义了 bindPassword,则必须设置此项。
8
对包含绑定密码的 OpenShift Container Platform Secret 的可选引用。如果定义了 bindDN,则必须设置此项。
9
可选:对包含 PEM 编码证书颁发机构捆绑包的 OpenShift Container Platform ConfigMap 的引用,以用于验证所配置 URL 的服务器证书。仅在 insecurefalse 时使用。
10
true 时,不会对服务器进行 TLS 连接。为 false 时,ldaps:// URL 使用 TLS 进行连接,并且 ldap:// URL 升级到 TLS。使用 ldaps:// URL 时,此项应该设为 false,因为这些 URL 始终会尝试使用 TLS 进行连接。
11
RFC 2255 URL,指定要使用的 LDAP 主机和搜索参数。
注意

要将用户列在 LDAP 集成的白名单中,请使用 lookup 映射方法。在允许从 LDAP 登录前,集群管理员必须为每个 LDAP 用户创建身份和用户对象。

7.3.6. 将身份提供程序添加到集群中

安装集群之后,请在其中添加一个身份提供程序,以便您的用户可以进行身份验证。

先决条件

  • 创建 OpenShift Container Platform 集群。
  • 为身份提供程序创建自定义资源 (CR)。
  • 必须已经以管理员身份登录。

流程

  1. 应用定义的 CR:

    $ oc apply -f </path/to/CR>
    注意

    如果一个 CR 不存在,oc apply 会创建一个新的 CR,并可能会触发以下警告 Warning: oc apply should be used on resources created by either oc create --save-config or oc apply。在这种情况下,您可以忽略这个警告。

  2. 以来自身份提供程序的用户身份登录集群,并在提示时输入密码。

    $ oc login -u <username>
  3. 确认用户登录成功,并显示用户名。

    $ oc whoami