7.3. 配置 LDAP 身份提供程序
配置 ldap
身份提供程序,使用简单绑定身份验证来针对 LDAPv3 服务器验证用户名和密码。
7.3.1. 关于 OpenShift Container Platform 中的身份提供程序
默认情况下,集群中只有 kubeadmin
用户。要指定身份提供程序,您必须创建一个自定义资源(CR) 来描述该身份提供程序并把它添加到集群中。
OpenShift Container Platform 用户名不能包括 /
、:
和 %
。
7.3.2. 关于 LDAP 身份验证
在身份验证过程中,搜索 LDAP 目录中与提供的用户名匹配的条目。如果找到一个唯一匹配项,则尝试使用该条目的可分辨名称 (DN) 以及提供的密码进行简单绑定。
执行下面这些步骤:
-
通过将配置的
url
中的属性和过滤器与用户提供的用户名组合来生成搜索过滤器。 - 使用生成的过滤器搜索目录。如果搜索返回的不是一个条目,则拒绝访问。
- 尝试使用搜索所获条目的 DN 和用户提供的密码绑定到 LDAP 服务器。
- 如果绑定失败,则拒绝访问。
- 如果绑定成功,则将配置的属性用作身份、电子邮件地址、显示名称和首选用户名来构建一个身份。
配置的 url
是 RFC 2255 URL,指定要使用的 LDAP 主机和搜索参数。URL 的语法是:
ldap://host:port/basedn?attribute?scope?filter
在这个 URL 中:
URL 组件 | 描述 |
---|---|
|
对于常规 LDAP,使用 |
|
LDAP 服务器的名称和端口。LDAP 默认为 |
| 所有搜索都应从中开始的目录分支的 DN。至少,这必须是目录树的顶端,但也可指定目录中的子树。 |
|
要搜索的属性。虽然 RFC 2255 允许使用逗号分隔属性列表,但无论提供多少个属性,都仅使用第一个属性。如果没有提供任何属性,则默认使用 |
|
搜索的范围。可以是 |
|
有效的 LDAP 搜索过滤器。如果未提供,则默认为 |
在进行搜索时,属性、过滤器和提供的用户名会组合在一起,创建类似如下的搜索过滤器:
(&(<filter>)(<attribute>=<username>))
例如,可考虑如下 URL:
ldap://ldap.example.com/o=Acme?cn?sub?(enabled=true)
当客户端尝试使用用户名 bob
连接时,生成的搜索过滤器将为 (&(enabled=true)(cn=bob))
。
如果 LDAP 目录需要身份验证才能搜索,请指定用于执行条目搜索的 bindDN
和 bindPassword
。
7.3.3. 创建 LDAP secret
要使用身份提供程序,您必须定义一个包含 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 的 secret 键必须称为bindPassword
。
提示您还可以应用以下 YAML 来创建 secret:
apiVersion: v1 kind: Secret metadata: name: ldap-secret namespace: openshift-config type: Opaque data: bindPassword: <base64_encoded_bind_password>
7.3.4. 创建配置映射
身份提供程序使用 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 来创建配置映射:
apiVersion: v1 kind: ConfigMap metadata: name: ca-config-map namespace: openshift-config data: ca.crt: | <CA_certificate_PEM>
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
- 控制如何在此提供程序的身份和
User
对象之间建立映射。 - 3
- 用作身份的属性列表。使用第一个非空属性。至少需要一个属性。如果列出的属性都没有值,身份验证会失败。定义属性按原样检索,允许使用二进制值。
- 4
- 用作电子邮件地址的属的列表。使用第一个非空属性。
- 5
- 用作显示名称的属性列表。使用第一个非空属性。
- 6
- 为此身份置备用户时用作首选用户名的属性列表。使用第一个非空属性。
- 7
- 在搜索阶段用来绑定的可选 DN。如果定义了
bindPassword
,则必须设置此项。 - 8
- 对包含绑定密码的 OpenShift Container Platform
Secret
对象的可选引用。如果定义了bindDN
,则必须设置此项。 - 9
- 可选:对包含 PEM 编码证书颁发机构捆绑包的 OpenShift Container Platform
ConfigMap
的引用,以用于验证所配置 URL 的服务器证书。仅在insecure
为false
时使用。 - 10
- 为
true
时,不会对服务器进行 TLS 连接。为false
时,ldaps://
URL 使用 TLS 进行连接,并且ldap://
URL 升级到 TLS。当使用ldaps://
URL 时,此项必须设为false
,因为这些 URL 始终会尝试使用 TLS 进行连接。 - 11
- RFC 2255 URL,指定要使用的 LDAP 主机和搜索参数。
要将用户列在 LDAP 集成的白名单中,请使用 lookup
映射方法。在允许从 LDAP 登录前,集群管理员必须为每个 LDAP User
创建一个 Identity
对象和用户对象。
其他资源
-
如需了解所有身份提供程序通用的参数(如
mappingMethod
)的信息,请参阅身份提供程序参数。
7.3.6. 在集群中添加身份提供程序
安装集群之后,请在其中添加一个身份提供程序,以便您的用户可以进行身份验证。
先决条件
- 创建 OpenShift Container Platform 集群。
- 为身份提供程序创建自定义资源(CR)。
- 必须已经以管理员身份登录。
流程
应用定义的 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
。在这种情况下,您可以忽略这个警告。以来自身份提供程序的用户身份登录集群,并在提示时输入密码。
$ oc login -u <username>
确认用户登录成功,并显示用户名。
$ oc whoami