×

配置keystone身份提供程序以将您的OpenShift Container Platform集群与Keystone集成,从而可以使用与配置为在内部数据库中存储用户的OpenStack Keystone v3服务器共享身份验证。此配置允许用户使用其Keystone凭据登录到OpenShift Container Platform。

关于OpenShift Container Platform中的身份提供商

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

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

关于Keystone认证

Keystone 是一个OpenStack项目,提供身份、令牌、目录和策略服务。

您可以配置与Keystone的集成,以便新的OpenShift Container Platform用户基于Keystone用户名或唯一的Keystone ID。使用这两种方法,用户都可以通过输入其Keystone用户名和密码登录。将OpenShift Container Platform用户基于Keystone ID更安全,因为如果您删除Keystone用户并使用该用户名创建一个新的Keystone用户,则新用户可能会访问旧用户的资源。

创建密钥

身份提供程序在openshift-config命名空间中使用OpenShift Container PlatformSecret对象来包含客户端密钥、客户端证书和密钥。

步骤
  • 使用以下命令创建一个包含密钥和证书的Secret对象

    $ oc create secret tls <secret_name> --key=key.pem --cert=cert.pem -n openshift-config

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

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret_name>
      namespace: openshift-config
    type: kubernetes.io/tls
    data:
      tls.crt: <base64_encoded_cert>
      tls.key: <base64_encoded_key>

创建配置映射

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

步骤
  • 使用以下命令定义包含证书颁发机构的 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>

Keystone CR 示例

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

Keystone CR
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: keystoneidp (1)
    mappingMethod: claim (2)
    type: Keystone
    keystone:
      domainName: default (3)
      url: https://keystone.example.com:5000 (4)
      ca: (5)
        name: ca-config-map
      tlsClientCert: (6)
        name: client-cert-secret
      tlsClientKey: (7)
        name: client-key-secret
1 此提供程序名称作为前缀添加到提供程序用户名,以形成身份名称。
2 控制如何在此提供程序的身份和 `User` 对象之间建立映射。
3 Keystone 域名。在 Keystone 中,用户名是特定于域的。仅支持单个域。
4 用于连接到 Keystone 服务器的 URL(必需)。这必须使用 https。
5 可选:指向包含 PEM 编码证书颁发机构捆绑包的 OpenShift Container Platform `ConfigMap` 对象的引用,用于验证为配置的 URL 验证服务器证书。
6 可选:指向包含客户端证书的 OpenShift Container Platform `Secret` 对象的引用,在向配置的 URL 发出请求时出示。
7 指向包含客户端证书密钥的 OpenShift Container Platform `Secret` 对象的引用。如果指定了 `tlsClientCert`,则需要此项。
其他资源
  • 有关所有身份提供程序共有的参数(例如 `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