《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.12环境中验证
OpenShift 4 之增加 HTPasswd 方式的身份认证
OpenShift的认证机制
OpenShift是通过OAuth实现用户身份认证的。通过以下Identity Provider,OpenShift 4支持多种用户身份认证方式:
- HTPasswd(HTPasswd是一种最简单的用户身份存储认证机制,它直接将用户名和经过加密的密码直接放在文本文件中)。
- Keystone
- LDAP
- Basic authentication
- Request header
- GitHub or GitHub Enterprise
- GitLab
- OpenID Connect
增加HTPasswd Identity Provider
在安装好OpenShift 4后我们可以用“管理员”用户登录,然后进入控制台。
如果OpenShift还没有配置HTPasswd方式的Identity Provider,可以使用以下方式添加。
- 创建一个基于 HTPasswd Identity Provider的 OAuth。其中HTPasswd Identity Provider的名称为“my_htpasswd_provider”,OAuth用名为“htpass-secret”的Secret验证用户名和密码(在后面章节中将创建“users.htpasswd”文件,然后再加载到htpass-secret中)。
$ cat <<EOF | oc apply -f -
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: my_htpasswd_provider
challenge: true
login: true
mappingMethod: claim
type: HTPasswd
htpasswd:
fileData:
name: htpass-secret
EOF
在HTPasswd机制文件中创建用户
- 安装httpd-tools
$ yum install httpd-tools
- 将用户名和密码写入新创建的“users.htpasswd”文件。
$ htpasswd -c -b users.htpasswd admin admin
$ htpasswd -b users.htpasswd user1 user1
- 可以查看users.htpasswd内容。
$ cat users.htpasswd
加载users.htpasswd数据到Secret对象
OpenShift是使用Secret对象保存加密数据的,因此我们需要把users.htpasswd文件中的用户和密码加载到Secret对象中,这样my_htpasswd_provider就可以使用它们进行身份认证了。
- 将users.htpasswd加载到名为htpass-secret的secret对象。
$ oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd -n openshift-config
- 还可登录到OpenShift Console,进入openshift-config项目,然后找到htpass-secret,可以查看其加载的用户信息。
验证
最后用admin/admin登录验证即可。
$ oc login -u admin -p admin
其他方法
可以直接在 OpenShift 中运行以下 YAML,可创建 admin、user1 - user5 的用户,密码都为 openshift123
apiVersion: v1
kind: Secret
metadata:
name: htpasswd
namespace: openshift-config
type: Opaque
data:
htpasswd: YWRtaW46JGFwcjEkZnltOWQ4aTMkcWhSYjFyVVcvWFlBaTVkUE9MTnhvMAp1c2VyMTokYXByMSQ3bTFvcGs2NCR2SkM3S1g5cXNFYi94NzNDajJ4eEUwCnVzZXIyOiRhcHIxJHZlbzFmdGo0JHlEaG5yU1VFT25mV3FZaTFyL3JLVS8KdXNlcjM6JGFwcjEkdHA1aGM5bnIkSTFOanVLNy54WkR2QkhWVC9xYjhUMAp1c2VyNDokYXByMSR1Ymd3OGVvMyR4NUFRYzJWdFdMVmRHUkNSL0xkNnUxCnVzZXI1OiRhcHIxJHp2bjhnYnBkJE5vZnlGUDNBdmV6Wm0yT0N1LlVwUS8K
---
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: htpasswd_provider
challenge: true
login: true
mappingMethod: claim
type: HTPasswd
htpasswd:
fileData:
name: htpasswd
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: "cluster-admin-admin"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: "admin"
其他参考
如果OpenShift已经有HTPasswd Identity Provider和Secret了,可以参考《OpenShift 4 之增加用户》追加新用户。