第 7 章 配置身份提供程序
7.1. 配置 htpasswd 身份提供程序
				配置 htpasswd 身份提供程序,允许用户使用 htpasswd 文件中的凭证登录 OpenShift Container Platform。
			
要定义 htpasswd 身份提供程序,请执行以下任务:
- 
						创建一个 htpasswd文件来存储 用户和密码信息。
- 
						创建一个 secret 来代表 htpasswd文件。
- 定义一个htpasswd 身份提供程序资源用于引用该 secret。
- 将资源应用到 默认的 OAuth 配置,以添加身份提供程序。
7.1.1. 关于 OpenShift Container Platform 中的身份提供程序
					默认情况下,集群中只有 kubeadmin 用户。要指定身份提供程序,您必须创建一个自定义资源(CR) 来描述该身份提供程序并把它添加到集群中。
				
						OpenShift Container Platform 用户名不能包括 /、: 和 %。
					
7.1.2. 关于 htpasswd 身份验证
					在 OpenShift Container Platform 中使用 htpasswd 身份验证允许您根据 htpasswd 文件识别用户。htpasswd 文件是一个平面文件,其中包含每个用户的用户名和密码。您可以使用 htpasswd 实用程序创建此文件。
				
对于生产环境,不要在 OpenShift Container Platform 中使用 htpasswd 身份验证。仅在开发环境中使用 htpasswd 身份验证。
7.1.3. 创建 htpasswd 文件
有关如何创建 htpasswd 文件的说明,请参见以下小节之一:
7.1.3.1. 使用 Linux 创建 htpasswd 文件
						要使用 htpasswd 身份提供程序,您必须使用 htpasswd 生成一个包含集群用户名和密码的文件。
					
先决条件
- 
								能够访问 htpasswd实用程序。在 Red Hat Enterprise Linux 上,安装httpd-tools软件包即可使用该实用程序。
流程
- 创建或更新含有用户名和散列密码的平面文件: - htpasswd -c -B -b </path/to/users.htpasswd> <username> <password> - $ htpasswd -c -B -b </path/to/users.htpasswd> <username> <password>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 该命令将生成散列版本的密码。 - 例如: - htpasswd -c -B -b users.htpasswd <username> <password> - $ htpasswd -c -B -b users.htpasswd <username> <password>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Adding password for user user1 - Adding password for user user1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 继续向文件中添加或更新凭证: - htpasswd -B -b </path/to/users.htpasswd> <user_name> <password> - $ htpasswd -B -b </path/to/users.htpasswd> <user_name> <password>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.1.3.2. 使用 Windows 创建 htpasswd 文件
						要使用 htpasswd 身份提供程序,您必须使用 htpasswd 生成一个包含集群用户名和密码的文件。
					
先决条件
- 
								能够访问 htpasswd.exe。许多 Apache httpd 发行版本的\bin目录中均包含此文件。
流程
- 创建或更新含有用户名和散列密码的平面文件: - > htpasswd.exe -c -B -b <\path\to\users.htpasswd> <username> <password> - > htpasswd.exe -c -B -b <\path\to\users.htpasswd> <username> <password>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 该命令将生成散列版本的密码。 - 例如: - > htpasswd.exe -c -B -b users.htpasswd <username> <password> - > htpasswd.exe -c -B -b users.htpasswd <username> <password>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Adding password for user user1 - Adding password for user user1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 继续向文件中添加或更新凭证: - > htpasswd.exe -b <\path\to\users.htpasswd> <username> <password> - > htpasswd.exe -b <\path\to\users.htpasswd> <username> <password>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.1.4. 创建 htpasswd secret
要使用 htpasswd 身份提供程序,您必须定义一个包含 htpasswd 用户文件的 secret。
先决条件
- 创建 htpasswd 文件。
流程
- 创建包含 htpasswd 用户文件的 - Secret对象:- oc create secret generic htpass-secret --from-file=htpasswd=<path_to_users.htpasswd> -n openshift-config - $ oc create secret generic htpass-secret --from-file=htpasswd=<path_to_users.htpasswd> -n openshift-config- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 包含--from-file参数的用户文件的 secret 键必须命名为htpasswd,如上述命令所示。
 提示- 您还可以应用以下 YAML 来创建 secret: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.1.5. Sample htpasswd CR
以下自定义资源 (CR) 显示 htpasswd 身份提供程序的参数和可接受值。
htpasswd CR
7.1.6. 在集群中添加身份提供程序
安装集群之后,请在其中添加一个身份提供程序,以便您的用户可以进行身份验证。
先决条件
- 创建 OpenShift Container Platform 集群。
- 为身份提供程序创建自定义资源(CR)。
- 必须已经以管理员身份登录。
流程
- 应用定义的 CR: - oc apply -f </path/to/CR> - $ oc apply -f </path/to/CR>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果一个 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 login -u <username>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 确认用户登录成功,并显示用户名。 - oc whoami - $ oc whoami- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.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 --decode > users.htpasswd- $ oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode > users.htpasswd- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 从 - users.htpasswd文件中添加或删除用户。- 添加一个新用户: - htpasswd -bB users.htpasswd <username> <password> - $ htpasswd -bB users.htpasswd <username> <password>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Adding password for user <username> - Adding password for user <username>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 删除一个现有用户: - htpasswd -D users.htpasswd <username> - $ htpasswd -D users.htpasswd <username>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Deleting password for user <username> - Deleting password for user <username>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 将 - htpass-secret- Secret对象替换为- users.htpasswd文件中更新的用户:- oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd --dry-run=client -o yaml -n openshift-config | oc replace -f - - $ oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd --dry-run=client -o yaml -n openshift-config | oc replace -f -- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 提示- 您还可以应用以下 YAML 来替换 secret: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 如果删除了一个或多个用户,您还需要为每个用户删除其现有资源。 - 删除 - User对象:- oc delete user <username> - $ oc delete user <username>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - user.user.openshift.io "<username>" deleted - user.user.openshift.io "<username>" deleted- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 请确认已删除了用户,否则如果用户的令牌还没有过期,则用户还可以继续使用其令牌。 
- 删除用户的 - Identity对象:- oc delete identity my_htpasswd_provider:<username> - $ oc delete identity my_htpasswd_provider:<username>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - identity.user.openshift.io "my_htpasswd_provider:<username>" deleted - identity.user.openshift.io "my_htpasswd_provider:<username>" deleted- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
7.1.8. 使用 web 控制台配置身份提供程序
通过 web 控制台而非 CLI 配置身份提供程序 (IDP)。
先决条件
- 您必须以集群管理员身份登录到 web 控制台。
流程
- 
							导航至 Administration Cluster Settings。 
- 在 Configuration 选项卡下,单击 OAuth。
- 在 Identity Providers 部分中,从 Add 下拉菜单中选择您的身份提供程序。
您可以通过 web 控制台来指定多个 IDP,而不会覆盖现有的 IDP。