使用 HTPasswd 方式管理用戶
當我們用默認的 kubadmin 進入平臺的時候,會有一行提示信息,告訴我們可以配置用戶管理,來允許其他用戶登入。
這也是一個平臺使用過程中的必備步驟,openshift 支持 htpasswd, ldap, github, google 等用戶系統(tǒng)對接。
最常用的還是 htpasswd 和 ldap
本節(jié)介紹 htpasswd 方式配置用戶登錄,此方式用戶和密碼將由 openshift 自身來管理。 與ocp v3 的差異有兩點
- 支持頁面導入了
- 密碼文件不再是以文件方式保存在虛機上,而是以 secret 保存 ocp etcd 中
登錄的提示信息
You are logged in as a temporary administrative user. Update the cluster OAuth configuration to allow others to log in.
使用 oc 命令管理 htpasswd 作為 ocp 用戶管理
首先創(chuàng)建密碼文件
第一個用戶參數需要帶 -c 創(chuàng)建文件,后面添加用戶不要帶c,不然會覆蓋文件。
# 生成一個 htpasswd.txt 文件,用戶名user1,密碼:123456
# 并添加兩個用戶 user1 user2 ,完成后看下文件,確認有這三個用戶
htpasswd -c -B -b htpasswd.txt user1 123456
htpasswd -B -b htpasswd.txt user2 123456
htpasswd -B -b htpasswd.txt user3 123456
創(chuàng)建密鑰導入上述 htpasswd 密碼文件
把密碼文件導入到 openshift-config project 中,secret 名稱 htpass-secret 可以自定義, --from-file 后面的 htpasswd 必須是這個字段,不能修改。
oc create secret generic htpass-secret --from-file=htpasswd=htpasswd.txt -n openshift-config
[root@bastion install]# oc get secret -n openshift-config htpass-secret
NAME TYPE DATA AGE
htpass-secret Opaque 1 25s
創(chuàng)建 oauth CR
創(chuàng)建一個 oauth Custom Resource (CR) ,使用上面的 htpasswd
cat oauth-htpasswd.yaml
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: my_htpasswd_provider #1
mappingMethod: claim
type: HTPasswd
htpasswd:
fileData:
name: htpass-secret #2
- 這是顯示在登錄頁面的字段
- 這個要和上一步得 secret 名稱匹配
導入文件,可以會有個 warning,可忽略
oc apply -f oauth-htpasswd.yaml
# 忽略 warning
Warning: oc apply should be used on resources created by either oc create --save-config or oc apply.
測試新用戶登錄
通過命令或者 web 頁面登錄測試新用戶。 這些用戶進去之后都只能自己新建 projecct 操作,沒有賦權全局。
oc login -u user1
或
oc login https://api.ocp4.example.com:6443
這邊 oc 命令登錄出現(xiàn)了一些問題,頁面是可以的,oc 命令不行。
oc login error: x509: certificate signed by unknown authority
解決方法:
mv ~/.kube/config /tmp/
Login failed (401 Unauthorized)
解決方法:
這個應該 user1 用戶之前登錄過,參照下一步的特別注意,清除之前的 user1 用戶。注意別刪錯了,secret 不能刪。
增刪用戶
如果要增刪用戶,修改之前創(chuàng)建的 secret
# 先把 secret 導出來,轉成明文
oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 -d > users.htpasswd
# 針對密碼文件增刪用戶
# 增加用戶
htpasswd -bB users.htpasswd <username> <password>
# 刪除已有用戶
htpasswd -D users.htpasswd <username>
# 覆蓋之前的 secret
oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd --dry-run -o yaml -n openshift-config | oc replace -f -
特別注意
如果移除了用戶,以下兩處已存在的資源也需要刪除。如果修改了 identityProviders,這兩處的用戶信息也需要刪除,不然登錄會出錯
刪除 user
oc delete user <username>
不刪除 user 的話,后續(xù)這個用戶還可以登錄。刪除 identity 中的 user
oc delete identity my_htpasswd_provider:<username>
用戶權限設置
給 user1 集群管理員權限,這是最大權限
給 user2 cluster-reader 權限,可以查看所有 project 下的資源
給 user3 賦予 openshift-monitoring project 管理員權限
需要user2, user3 先登錄過一次,不然 ocp 的 user 資源對象里找不到他,加不上權限
oc adm policy add-cluster-role-to-user cluster-admin user1
oc adm policy add-cluster-role-to-user cluster-reader user2
oc adm policy add-role-to-user admin user3 -n openshift-monitoring
通過 web 頁面配置 oauth 采用 htpasswd 認證
除了通過命令導入也可以通過頁面,前提是先創(chuàng)建好 htpasswd 文件,等于說 secret 和 oauth 的資源是web 頁面幫助創(chuàng)建的。
通過上面的提示信息跳轉,或者 Administrator 角色,進入菜單 Administration--Cluster Settings--Global Configuration--Oauth
在 Identity Providers 的 Add 下拉菜單找到 HTPasswd
進入配置頁面,name自定義,可不改。
HTPasswd File 上傳我們剛剛生成的 htpasswd.txt 文件,完成后點擊 Add 即完成。