×

配置htpasswd身份提供程序,允许用户使用 htpasswd 文件中的凭据登录 OpenShift Container Platform。

要定义 htpasswd 身份提供程序,请执行以下任务:

  1. 创建一个htpasswd文件来存储用户和密码信息。

  2. 创建一个密钥来表示htpasswd文件。

  3. 定义一个引用该密钥的 htpasswd 身份提供程序资源

  4. 应用该资源到默认 OAuth 配置中以添加身份提供程序。

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

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

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

关于 htpasswd 身份验证

在 OpenShift Container Platform 中使用 htpasswd 身份验证允许您基于 htpasswd 文件识别用户。htpasswd 文件是一个平面文件,包含每个用户的用户名和哈希密码。您可以使用htpasswd实用程序创建此文件。

不要在 OpenShift Container Platform 的生产环境中使用 htpasswd 身份验证。仅在开发环境中使用 htpasswd 身份验证。

创建 htpasswd 文件

有关如何创建 htpasswd 文件的说明,请参阅以下部分之一:

使用 Linux 创建 htpasswd 文件

要使用 htpasswd 身份提供程序,必须使用htpasswd生成一个包含集群用户名和密码的平面文件。

先决条件
  • 可以访问htpasswd实用程序。在 Red Hat Enterprise Linux 上,可以通过安装httpd-tools包来获得此程序。

步骤
  1. 使用用户名和哈希密码创建或更新平面文件。

    $ htpasswd -c -B -b </path/to/users.htpasswd> <username> <password>

    该命令会生成密码的哈希版本。

    例如:

    $ htpasswd -c -B -b users.htpasswd <username> <password>
    示例输出
    Adding password for user user1
  2. 继续向文件中添加或更新凭据。

    $ htpasswd -B -b </path/to/users.htpasswd> <user_name> <password>

使用 Windows 创建 htpasswd 文件

要使用 htpasswd 身份提供程序,必须使用htpasswd生成一个包含集群用户名和密码的平面文件。

先决条件
  • 可以访问htpasswd.exe。此文件包含在许多 Apache httpd 发行版的\bin目录中。

步骤
  1. 使用用户名和哈希密码创建或更新平面文件。

    > htpasswd.exe -c -B -b <\path\to\users.htpasswd> <username> <password>

    该命令会生成密码的哈希版本。

    例如:

    > htpasswd.exe -c -B -b users.htpasswd <username> <password>
    示例输出
    Adding password for user user1
  2. 继续向文件中添加或更新凭据。

    > htpasswd.exe -b <\path\to\users.htpasswd> <username> <password>

创建 htpasswd 密钥

要使用 htpasswd 身份提供程序,必须定义一个包含 htpasswd 用户文件的密钥。

先决条件
  • 创建一个 htpasswd 文件。

步骤
  • 创建一个包含 htpasswd 用户文件的Secret对象。

    $ oc create secret generic htpass-secret --from-file=htpasswd=<path_to_users.htpasswd> -n openshift-config (1)
    1 包含用于--from-file参数的用户文件的密钥名称必须为htpasswd,如上述命令所示。

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

    apiVersion: v1
    kind: Secret
    metadata:
      name: htpass-secret
      namespace: openshift-config
    type: Opaque
    data:
      htpasswd: <base64_encoded_htpasswd_file_contents>

htpasswd CR 示例

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

htpasswd CR
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: my_htpasswd_provider (1)
    mappingMethod: claim (2)
    type: HTPasswd
    htpasswd:
      fileData:
        name: htpass-secret (3)
1 此提供程序名称作为前缀添加到提供程序用户名,以形成身份名称。
2 控制如何在此提供程序的身份与User对象之间建立映射。
3 一个现有的密钥,其中包含使用htpasswd生成的文件。
其他资源
  • 有关所有身份提供程序共有的参数(例如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

更新 htpasswd 身份提供程序的用户

您可以向现有的 htpasswd 身份提供程序添加或删除用户。

先决条件
  • 您已创建包含 htpasswd 用户文件的Secret对象。此过程假设其名称为htpass-secret

  • 您已配置 htpasswd 身份提供程序。此过程假设其名称为my_htpasswd_provider

  • 可以访问htpasswd实用程序。在 Red Hat Enterprise Linux 上,可以通过安装httpd-tools包来获得此程序。

  • 您具有集群管理员权限。

步骤
  1. htpass-secretSecret对象检索 htpasswd 文件,并将文件保存到您的文件系统。

    $ oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode > users.htpasswd
  2. users.htpasswd文件添加或删除用户。

    • 要添加新用户:

      $ htpasswd -bB users.htpasswd <username> <password>
      示例输出
      Adding password for user <username>
    • 要删除现有用户:

      $ htpasswd -D users.htpasswd <username>
      示例输出
      Deleting password for user <username>
  3. 使用users.htpasswd文件中更新的用户替换htpass-secretSecret对象。

    $ oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd --dry-run=client -o yaml -n openshift-config | oc replace -f -

    或者,您可以应用以下 YAML 来替换密钥:

    apiVersion: v1
    kind: Secret
    metadata:
      name: htpass-secret
      namespace: openshift-config
    type: Opaque
    data:
      htpasswd: <base64_encoded_htpasswd_file_contents>
  4. 如果您删除了一个或多个用户,则还必须删除每个用户的现有资源。

    1. 删除User对象。

      $ oc delete user <username>
      示例输出
      user.user.openshift.io "<username>" deleted

      请务必删除用户,否则用户可以在其令牌未过期的情况下继续使用其令牌。

    2. 删除用户的Identity对象。

      $ oc delete identity my_htpasswd_provider:<username>
      示例输出
      identity.user.openshift.io "my_htpasswd_provider:<username>" deleted

使用 Web 控制台配置身份提供程序

通过 Web 控制台而不是 CLI 配置您的身份提供程序 (IDP)。

先决条件
  • 您必须以集群管理员身份登录到 Web 控制台。

步骤
  1. 导航到**管理**→**集群设置**。

  2. 在**配置**选项卡下,单击**OAuth**。

  3. 在**身份提供程序**部分,从**添加**下拉菜单中选择您的身份提供程序。

您可以通过 Web 控制台指定多个 IDP,而不会覆盖现有 IDP。