當安裝完 Red Hat OpenShift 之後...
如果有朋友剛弄好 OpenShift 4 可能對於很多預設機制感到有點狐疑,這篇文章就是要來解釋,安裝完 OpenShift 4 後,最重要的小事 - 帳號權限認證 (Authentication)
Red Hat OpenShift 的權限認證一如繼往都是採用角色型存取控制 (Role Based Access Control, RBAC),這邊就要來準備開始務實一點的操作,本文先從簡單的把預設帳號置換開始做起
圖片出處: 【最終幻想7:重製版】4K電影剪輯版(後篇) - 零收集、電影式運鏡、完整劇情 - PS4 Pro增強模式 - Final Fantasy VII: REMAKE - 太空戰士7- Semenix出品
話說大家也可以多多支持一下 Semenix Gaming - 大大的影片,我的圖片都是截他的頻道,錄的影片相當有水準,最近都在看它的影片當作自己有在打太七 Q_Q
走馬看花之旅: 第五天
預設剛裝完 OpenShift 4,應該都會拿到 3 個資訊
- Web Console: https://console-openshift-console.apps.ocp4.internal/dashboards
- Username:
kubeadmin
- Password:
XXXX-XXXX-XXXX-XXXX
但因為預設帳號導致的資安議題,這個預設的 kubeadmin
及 XXXX-XXXX-XXXX-XXXX
不建議持續使用,建議是換成別的帳號替換它既有的角色 cluster-admin
,詳請可參考 Removing the kubeadmin user - OpenShift 4.3
準備 HTPasswd Identity Provider
預計將 kubeadmin
置換成 ocproot
,權限也要一併移轉,將透過 HTPasswd Identity Porvider
的方式將帳號設定好
設定 OAuth 資源
這邊先開啟一個檔案 oauth.yaml
,新增 identityProvider
名字為 local_htpasswd_provider
,形式為 HTPasswd
,帳號密碼對照表放在 local-htpasswd-secret
裡面。
當中的 local-htpasswd-secret
將之後再新增,所以不用這時候先準備
```yaml oauth.yaml apiVersion: config.openshift.io/v1 kind: OAuth metadata: name: cluster spec: identityProviders: - name: local_htpasswd_provider challenge: true login: true mappingMethod: claim type: HTPasswd htpasswd: fileData: name: local-htpasswd-secret
```bash
# Update OAuth CRD
$ oc apply -f oauth.yaml
oauth.config.openshift.io/cluster configured
# Check
$ oc describe oauth cluster
# Update in the future if needed
$ oc get oauth cluster -o yaml > oauth.yaml
設定新的最高權限帳號 - ocproot
這邊對照過往 Linux 操作系統的習慣,我自行取名 ocproot
,如果你想要取別的也可以,請自行修改沒問題
- 確保你有
htpasswd
可以使用
- 新增
local-htpasswd-secret
檔案,新增ocproot/ocproot
進去
# Create
$ htpasswd -c -B -b localuser-htpasswd ocproot ocproot
Adding password for user ocproot
$ cat localuser-htpasswd
ocproot:$2y$05$pMTSySH/qa.gTcom9q/Pd.WHoI8VMIpCHWgc9d7cnQuIbRuuPeMia
# Update if needed
# $ htpasswd -b localuser-htpasswd ocproot ocproot
# Remove if needed
# $ htpasswd -D localuser-htpasswd ocproot ocproot
- 新增
HTpasswd
進去到 OpenShift 裡面
$ oc create secret generic local-htpasswd-secret --from-file htpasswd=/root/user/localuser-htpasswd -n openshift-config
secret/local-htpasswd-secret created
- 新增叢集最高權限
cluster-admin
給ocproot
$ oc adm policy add-cluster-role-to-user cluster-admin ocproot
clusterrole.rbac.authorization.k8s.io/cluster-admin added: "ocproot"
- 測試
ocproot
$ oc login -u ocproot oc login -u ocproot Authentication required for https://api.ocp4.internal:6443 (openshift) Username: ocproot Password: Login successful. $ oc whoami ocproot $ oc get users NAME UID FULL NAME IDENTITIES ocproot 3635b015-3664-4836-a5a0-2aff1100d99c local_htpasswd_provider:ocproot
移除 kubeadmin
帳號
根據 Removing the kubeadmin user - OpenShift 4.3 來移除預設帳號 kubeadmin
,務必要記得,你的集群裡面一定要有
- 一個以上的
Identity Provider
,一般都是用HTpasswd
- 一個以上的帳號具備
cluster-admin
的權限
不然你會登不進去集群 = =,這是不可逆的指令
修改自動登出時間
根據 Configuring the internal OAuth server - OpenShift 4.3,跟 OpenShift 3 一樣,都是要修改 accessTokenMaxAgeSeconds
值,預設時間應該是 86400
,也就是 24 小時後登出,因為太長了,所以改為 3600
,也就是登入 1 小時後自動登出
```yaml oauth.yaml apiVersion: config.openshift.io/v1 kind: OAuth metadata: name: cluster spec: identityProviders: - name: local_htpasswd_provider challenge: true login: true mappingMethod: claim type: HTPasswd htpasswd: fileData: name: local-htpasswd-secret tokenConfig: accessTokenMaxAgeSeconds: 3600
如同修改 OAuth ㄧ樣,執行下列操作即可
```bash
# Update OAuth CRD
$ oc apply -f oauth.yaml
oauth.config.openshift.io/cluster configured
# Check
$ oc describe oauth cluster
結語
做完上面的步驟,只是剛剛好準備開始以正確且安全的姿勢操作 OpenShift 4,下一篇會提到更複雜的 Users/Groups/Projects 的 RBAC 控制操作
對 我知道你的血條就跟下圖ㄧ樣
Appendix
Q: 登入時,遇到 error: x509: certificate signed by unknown authority
$ oc login -u ocproot --insecure-skip-tls-verify=true
error: x509: certificate signed by unknown authority
這問題是因為預設是自簽憑證 (Self-Signed),系統沒有安裝這張自簽的 CA ,所以要特別拉出來安裝在系統或者是在你的筆電上
$ oc project openshift-authentication
# Same content
$ oc get pods
NAME READY STATUS RESTARTS AGE
oauth-openshift-74fbdf999f-6kpnn 1/1 Running 0 10m
oauth-openshift-74fbdf999f-787cm 1/1 Running 0 10m
# Pick one and copy the cert to outside
$ oc rsh oauth-openshift-74fbdf999f-6kpnn cat /run/secrets/kubernetes.io/serviceaccount/ca.crt > ocp4-ingress-ca.crt
# It work on RHEL 7.7
$ cp ocp4-ingress-ca.crt /etc/pki/ca-trust/source/anchors/
$ update-ca-trust extract
# Verify Cert is working
$ openssl verify ocp4-ingress-ca.crt
ocp4-ingress-ca.crt: OK
切換回 system:admin
$ oc whoami
ocproot
$ oc config use-context admin
Switched to context "admin".
$ oc whoami
system:admin