×

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

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

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

OpenShift Container Platform 不支持包含/:%的用户名。

关于 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=*)

搜索时,属性、过滤器和提供的用户名会组合起来创建一个类似于以下形式的搜索过滤器:

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

例如,考虑以下URL:

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

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

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

创建LDAP密钥

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

步骤
  • 创建一个包含bindPassword字段的Secret对象。

    $ oc create secret generic ldap-secret --from-literal=bindPassword=<secret> -n openshift-config (1)
    1 包含--from-literal参数的bindPassword的密钥必须命名为bindPassword

    或者,您可以应用以下YAML来创建密钥:

    apiVersion: v1
    kind: Secret
    metadata:
      name: ldap-secret
      namespace: openshift-config
    type: Opaque
    data:
      bindPassword: <base64_encoded_bind_password>

创建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

    或者,您可以应用以下YAML来创建ConfigMap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ca-config-map
      namespace: openshift-config
    data:
      ca.crt: |
        <CA_certificate_PEM>

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: "ldaps://ldaps.example.com/ou=users,dc=acme,dc=com?uid" (11)
1 此提供程序名称作为前缀添加到返回的用户ID,以形成身份名称。
2 控制如何在此提供程序的身份和User对象之间建立映射。
3 用作身份的属性列表。使用第一个非空属性。至少需要一个属性。如果列出的属性均无值,则身份验证失败。定义的属性将作为原始数据检索,允许使用二进制值。
4 用作电子邮件地址的属性列表。使用第一个非空属性。
5 用作显示名称的属性列表。使用第一个非空属性。
6 为该身份预配用户时用作首选用户名的属性列表。使用第一个非空属性。
7 在搜索阶段用于绑定的可选DN。如果定义了bindPassword,则必须设置。
8 包含bind密码的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用户创建一个Identity对象和一个User对象。

其他资源
  • 有关所有身份提供程序共有的参数(例如mappingMethod)的信息,请参阅身份提供程序参数

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

安装集群后,向其中添加身份提供程序,以便用户可以进行身份验证。

先决条件
  • 创建一个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