第 4 章 配置身份提供程序
4.1. 配置 HTPasswd 身份提供程序
4.1.1. 关于 OpenShift Container Platform 中的身份提供程序
默认情况下,集群中只有 kubeadmin
用户。要指定身份提供程序,您必须创建一个自定义资源 (CR) 来描述该身份提供程序并把它添加到集群中。
OpenShift Container Platform 用户名不能包括 /
、:
和 %
。
要定义 HTPasswd 身份提供程序,您必须执行以下步骤:
-
创建一个
htpasswd
文件来存储用户和密码信息。Linux 和 Windows 的操作说明。 -
创建一个 OpenShift Container Platform secret 来代表
htpasswd
文件。 - 定义 HTPasswd 身份提供程序资源。
- 将资源应用到默认的 OAuth 配置。
4.1.2. 使用 Linux 创建 HTPasswd 文件
要使用 HTPasswd 身份提供程序,您必须使用 htpasswd
生成一个包含集群用户名和密码的文件。
先决条件
-
能够访问
htpasswd
实用程序。在 Red Hat Enterprise Linux 上,安装httpd-tools
软件包即可使用该实用程序。
流程
创建或更新含有用户名和散列密码的平面文件:
$ htpasswd -c -B -b </path/to/users.htpasswd> <user_name> <password>
该命令将生成散列版本的密码。
例如:
$ htpasswd -c -B -b users.htpasswd user1 MyPassword! Adding password for user user1
继续向文件中添加或更新凭证:
$ htpasswd -B -b </path/to/users.htpasswd> <user_name> <password>
4.1.3. 使用 Windows 创建 HTPasswd 文件
要使用 HTPasswd 身份提供程序,您必须使用 htpasswd
生成一个包含集群用户名和密码的文件。
先决条件
-
能够访问
htpasswd.exe
。许多 Apache httpd 发行版本的\bin
目录中均包含此文件。
流程
创建或更新含有用户名和散列密码的平面文件:
> htpasswd.exe -c -B -b <\path\to\users.htpasswd> <user_name> <password>
该命令将生成散列版本的密码。
例如:
> htpasswd.exe -c -B -b users.htpasswd user1 MyPassword! Adding password for user user1
继续向文件中添加或更新凭证:
> htpasswd.exe -b <\path\to\users.htpasswd> <user_name> <password>
4.1.4. 创建 HTPasswd secret
要使用 HTPasswd 身份提供程序,您必须定义一个含有 HTPasswd 用户文件的 secret。
先决条件
- 创建 HTPasswd 文件。
流程
创建一个含有 HTPasswd 用户文件的 OpenShift Container Platform
Secret
。$ oc create secret generic htpass-secret --from-file=htpasswd=</path/to/users.htpasswd> -n openshift-config
注意包含
--from-file
参数的用户文件的 secret 键必须命名为htpasswd
,如上述命令所示。
4.1.5. 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
4.1.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
4.1.7. 为 HTPasswd 身份提供程序更新用户
您可以从现有的 HTPasswd 身份提供程序中添加或删除用户。
先决条件
-
您已创建了包含 HTPasswd 用户文件的
Secret
对象。这里假定它名为htpass-secret
。 -
您已配置了一个 HTPasswd 身份提供程序。这里假定它名为
my_htpasswd_provider
。 -
您可以使用
htpasswd
工具程序。在 Red Hat Enterprise Linux 上,安装httpd-tools
软件包即可使用该实用程序。 - 您需要有集群管理员特权。
流程
从
htpass-secret
Secret
对象中检索 HTPasswd 文件,并将该文件保存到您的文件系统中:$ oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 -d > users.htpasswd
从
users.htpasswd
文件中添加或删除用户。添加一个新用户:
$ htpasswd -bB users.htpasswd <username> <password> Adding password for user <username>
删除一个现有用户:
$ htpasswd -D users.htpasswd <username> Deleting password for user <username>
将
htpass-secret
Secret
对象替换为users.htpasswd
文件中更新的用户:$ oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd --dry-run -o yaml -n openshift-config | oc replace -f -
如果删除了一个或多个用户,您还需要为每个用户删除其现有资源。
删除
User
对象:$ oc delete user <username> user.user.openshift.io "<username>" deleted
请确认已删除了用户,否则如果用户的令牌还没有过期,则用户还可以继续使用其令牌。
删除用户的
Identity
对象:$ oc delete identity my_htpasswd_provider:<username> identity.user.openshift.io "my_htpasswd_provider:<username>" deleted
4.1.8. 使用 web 控制台配置身份提供程序
通过 web 控制台而非 CLI 配置身份提供程序 (IDP)。
先决条件
- 您必须以集群管理员身份登录到 web 控制台。
流程
-
导航至 Administration
Cluster Settings。 - 在 Global Configuration 选项卡下,点 OAuth。
- 在 Identity Providers 部分中,从 Add 下拉菜单中选择您的身份提供程序。
您可以通过 web 控制台来指定多个 IDP,而不会覆盖现有的 IDP。