使用HTPasswd身份提供程序管理OpenShift/OKD用户

时间:2020-02-23 14:31:46  来源:igfitidea点击:

现在,我们在OpenShift Container平台上讨论了许多文章。
本教程将说明如何将HTPasswd配置为OCP/OKD群集的身份提供者。
我们可以将OpenShift OAuth服务器配置为使用许多身份提供程序,即:

HTPasswd根据存储使用htpasswd生成的凭据的机密验证用户名和密码。
LDAP使用简单绑定身份验证,配置LDAP身份提供程序以针对LDAPv3服务器验证用户名和密码。
Keystone启用与OpenStack Keystone v3服务器的共享身份验证。
OpenID Connect使用授权代码流与OpenID Connect身份提供者集成。
GitHub配置GitHub身份提供者以针对GitHub或者GitHub Enterprises OAuth身份验证服务器验证用户名和密码。

HTPasswd OAuth提供者

该提供程序根据包含来自Apache HTTP Server项目的htpasswd命令生成的用户名和密码的机密验证用户。
作为集群管理员,我们可以更改密码内部的数据。
这意味着更新用于身份验证的用户名和密码。

使用HTPasswd Identity Provider管理群集用户仅适用于用户数量很少的开发环境。
在拥有数百至数千用户的大多数生产环境中,与组织的身份管理系统集成的更强大的身份提供者至关重要。

使用HTPasswd Identity Provider管理OpenShift/OKD用户

为了向OpenShift/OKD添加另一个身份提供程序,我们需要以集群管理员的身份访问OpenShift集群。
如果我们正在使用全新安装的OpenShift集群,则可以使用两种方法来验证API请求:使用kubeadmin虚拟用户和密码授予OAuth访问令牌;使用kubeconfig文件嵌入永不过期的X.509客户端证书。
在本教程中,我们将使用kubeconfig身份验证方法将HTPasswd提供程序添加到OpenShift。
此操作需要oc客户端。
根据kubeconfig文件的位置,我们可能需要导出它。

export KUBECONFIG=/root/auth/kubeconfig

通过检查集群中的可用节点来确认它正在运行。

$oc get nodes

或者,我们可以使用 --configoc命令的选项:

$oc --config /path/to/kubeconfig get nodes

要使用kubeadm虚拟用户进行身份验证,我们将运行类似以下的命令。

$oc login -u kubeadmin -p KubeadmUserPassword

配置HTPasswd身份提供程序

我们将从生成所需的htpasswd文件开始,该文件将保存用户凭据。
需要安装一个提供htpasswd命令的软件包。

--- CentOS/RHEL/Fedora --
$sudo yum -y install httpd-tools
--- Ubuntu/Debian --
$sudo apt install apache2-utils
--- Arch Linux/Manjaro
$ sudo pacman -S apache

创建一个HTPasswd文件

创建一个新的或者更新现有的htpasswd文件。

$htpasswd -c -B -b ocp_users.htpasswd user1 password1

要添加或者更新凭据,请使用:

$htpasswd -Bb ocp_users.htpasswd user2 password2
$htpasswd -Bb ocp_users.htpasswd user3 password3

确认文件已创建。

$cat ocp_users.htpasswd 
user1:y$VNgzIy33djzSlOLkHqiR6.CG9oQaPM4CZz4q86Z4s4m23gtllV7I.
user2:y
$htpasswd -D ocp_users.htpasswd user3
Deleting password for user user3
grDO248lSANnOWOlqY2BO/B6/CWm6yJGSYBfZgDnJFBsVrBIIaTW user3:y$pqp6mo9oGk7E2AIfawDKg.ntUIUjIMRidYvR017mRxdhs5.ctWED2

要从htpasswd删除用户,请运行以下命令:

$oc create secret generic htpass-secret \
  --from-file=htpasswd=./ocp_users.htpasswd \
  -n openshift-config

创建HTPasswd秘密

在使用HTPasswd身份提供者之前,我们需要定义一个包含HTPasswd用户文件的机密。

$vim htpasswd-oauth.yaml

配置OAuth自定义资源

要使用HTPasswd身份提供程序,必须编辑OAuth自定义资源,以将条目添加到.spec.identity Providers数组中。
让我们创建一个新文件。

apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: Local Password
    mappingMethod: claim 
    type: HTPasswd
    htpasswd:
      fileData:
        name: htpass-secret

在下面添加和编辑内容。

oc apply -f htpasswd-oauth.yaml

其中:ocp-htpasswd-provider是提供者的名称。
该名称以提供者用户名作为前缀以形成身份名称。
htpass-secret是现有机密的名称,其中包含使用htpasswd生成的文件。

$oc login -u <username>

现在,我们可以在OpenShift登录屏幕上选择"本地密码",以使用添加的凭据向HTPasswd提供程序进行身份验证。

data-ezsrcset =" https://theitroad.com/wp-content/uploads/2017/04/openshift-configure-htpasswd-identity-provider-1024x297.png 1024w,https://theitroad.com/wp-content/上传/2017/04/openshift-configure-htpasswd-identity-provider-300x87.png 300w,https://theitroad.com/wp-content/uploads/2017/04/openshift-configure-htpasswd-identity-provider-768x223 .png 768w,https://theitroad.com/wp-content/uploads/2017/04/openshift-configure-htpasswd-identity-provider-1536x445.png 1536w,https://theitroad.com/wp-content/uploads /2017/04/openshift-configure-htpasswd-identity-provider-696x202.png 696w,https://theitroad.com/wp-content/uploads/2017/04/openshift-configure-htpasswd-identity-provider-1068x310.
png 1068w,https://theitroad.com/wp-content/uploads/2017/04/openshift-configure-htpasswd-identity-provider-1448x420.png 1448w,https://theitroad.com/wp-content/uploads/2017/04/openshift-configure-htpasswd-identity-provider.png 1883w">我们也可以使用添加的ide用户,使用oc命令从CLI登录到集群实体提供商。

oc create secret generic htpass-secret \
  --from-file htpasswd=./ocp_users.htpasswd \
  --dry-run -o yaml \
  | oc replace -n openshift-config -f 

出现提示时输入密码。

在OpenShift上更新HTPasswd机密

每当我们在htpasswd文件中添加,更改或者删除用户时,也必须在OpenShift群集上更新机密。
秘密中的所有数据都必须使用base64编码。
一种编码数据的方法是使用oc create secret,方法是将输出YAML发送到标准输出,然后将输出传递给oc replace命令以更新现有秘密。

oc get -o yaml oauth cluster > htpasswd-oauth.yaml

更新OAuth自定义资源

如果要编辑OAuth自定义资源,请使用oc get命令将现有OAuth群集资源导出到YAML格式的文件中。

$oc apply -f htpasswd-oauth.yaml

对嵌入式标识提供程序设置进行必要的更改,然后使用oc replace命令应用新的自定义资源。

oc adm policy add-cluster-role-to-user cluster-admin <username>

向用户分配管理权限

群集范围内的cluster-admin角色向用户和组授予群集管理特权。
我们可以使用以下命令将cluster-admin角色授予标准用户。

oc extract secret/htpass-secret -n openshift-config --to - > temp-secrets

提取秘密数据

我们可以提取秘密数据并将其保存到可以查看或者修改的文件中。
使用oc提取程序执行此操作。

##代码##