我尝试在.openshift_install.log
文件中查找密码,找到了一些内容,但没有成功。我尝试了,oc get secrets kubeadmin -n kube-system -ojsonpath='{.data.kubeadmin}' | base64 --decode && echo ""
但也没有成功。如何使用 oc 重置 kubeadmin 密码?谢谢
答案1
查找加密密码
kubeadmin 用户的密码存储在kubeadmin
命名空间中的 Secret中kube-system
。您应该能够看到带有 的 bcrypt 编码值oc get secret kubeadmin -n kubesystem -ojsonpath='{.data.kubeadmin}' | base64 -d
。加密密码以 开头$2y$10$
,指定它使用成本为 10 的 bcrypt 算法。
要重置密码,您需要生成新的编码密码并更新密钥。请注意,密码必须是至少 23 个字符。
更换密码的步骤
- 生成一个新的随机密码。
- 使用该实用程序加密密码
htpasswd
。 - 现在使用 对该编码的密码进行 base64 编码
base64 -w0
。-w0
用于禁用换行。 - 使用 修补集群中的秘密
oc patch secret/kubeadmin -n kube-system -p '{"data": {"kubeadmin": "[value for the base64 encoded, bcrypt encrypted password]"}}'
。
完整的例子
- 新密码将是
w9dYJ-00Je7-K2A0H-ED5ku-6Sdvz
- 加密方式
htpasswd -bnBC 10 "" w9dYJ-00Je7-K2A0H-ED5ku-6Sdvz | tr -d ':\n'
- 对结果进行编码
echo $2y$10$c9zxzleI5pvNXdWNHD3bT.vdqpJY2cI752YLswMydZR2VoIudbtti | base64 -w0
- 使用以下方式将补丁应用到集群
oc patch secret/kubeadmin -n kube-system -p '{"data": {"kubeadmin": "JDJ5JDEwJGM5enh6bGVJNXB2TlhkV05IRDNiVC52ZHFwSlkyY0k3NTJZTHN3TXlkWlIyVm9JdWRidHRpCg=="}}'
- 您现在应该可以使用新密码登录集群。
答案2
首先,让我们提醒一下,如果你仔细按照安装步骤操作,那么你需要安装“oc”CLI 工具并使用它来登录到你的集群通过:
$ export KUBECONFIG=<installation_directory>/auth/kubeconfig
# replace <installation_directory> by the directory where you created your
# installation artefacts with the openshift-install prog
$ oc whoami
这将确认您以“system:admin”身份登录
从那时起,找到 Web 控制台的 URL 路径非常容易,只需执行以下操作:
$ oc whoami --show-console
并且安装程序还会将一个文件拖放到您的 <installation_directory> 中:
$ cat <installation_directory>/auth/kubeadmin-password
最后一个文件实际上被视为安全漏洞,可能会在未来的版本中消失(RedHat 建议您删除该帐户)。
因此,还有一种替代方法,即从“oc”命令行定义一些额外的“管理员”用户帐户,无论如何,这对于与同事共享 OC 集群管理任务要好得多,每个人都使用自己的身份,而不是共享 kubeadmin 密码,并且登录方法不依赖于 IDP 的可用性,以防后者由于某种原因不可用(您可以组合多种身份验证方式)。
路线路径:
- 添加‘htpasswd’ 身份提供者到内置身份验证 pod
- 为用户添加“cluster-admin”角色如此创造
请查看上面链接的文档中的详细步骤,以了解您正在做什么。以下是简要摘要。
#ensure you are properly logged in for the next 'oc' CLI commands
$ export KUBECONFIG=<installation_directory>/auth/kubeconfig
$ oc whoami
system:admin
#ensure the authentication operator is up and running
$ oc get clusteroperators
NAME VERSION AVAILABLE etc...
authentication 4.12.0 True etc...
...
#ensure authentication API pods are deployed
$ oc get pods -n openshift-authentication
NAME READY STATUS etc...
oauth-openshift-84955b4d7c-4d2dc 1/1 Running
oauth-openshift-84955b4d7c-4wx8v 1/1 Running
oauth-openshift-84955b4d7c-7pnqj 1/1 Running
# create an initial htpasswd file (if you already have one, or want to update passwords, omit the 'c' arg)
$ htpasswd -cB users.htpasswd <myLoginNameHere>
# your are prompted for a password twice
# repeat the command for additional users' login names
# prepare the file for inclusion as a string attribute in YAML
$ base64 -w0 users.htpasswd >users.htpasswd.b64
# edit a inject-htpass-secret.yaml file with the following content
apiVersion: v1
kind: Secret
metadata:
name: htpass-secret
namespace: openshift-config
type: Opaque
data:
htpasswd: 'YmVybmFyZG... you paste here between quotes the B64 content of your users.htpasswd.b64 file ... ZtQ1MwaEdDCg=='
# create or update the secret 'htpass-secret' with the new htpasswd artefact
$ oc apply -f inject-htpass-secret.yaml
如果您只需要更新现有配置中的用户/密码,则以上操作就足够了。
#check you don't have yet a htpasswd identity provider configured
$ oc describe oauth.config.openshift.io/cluster
# or alternatively:
$ oc edit oauth.config.openshift.io cluster
# and you shall see that the Spec attribute is an empty object
#Then, add the provider. Edit an config-OAuth-id-provider.yaml file as below.
# you can only customize the name for your provider, here 'htpasswd_provider'
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: htpasswd_provider
mappingMethod: claim
type: HTPasswd
htpasswd:
fileData:
name: htpass-secret
# and apply (or update the htpasswd_provider ! ...or add it!)
$ oc apply -f config-OAuth-id-provider.yaml
最后,为用户添加 cluster-admin 角色
#each user must login once first,
# which is the way for the authentication operator to discover that a new user exists
#then, add the cluster role
$ oc adm policy add-cluster-role-to-user cluster-admin <userLoginNameHere>
#if you are already logged in, you may see your web console updating its display instantly
享受本地控制台登录!