在 OKD 4.7 中重置 kubeadmin 密码

在 OKD 4.7 中重置 kubeadmin 密码

我尝试在.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 的可用性,以防后者由于某种原因不可用(您可以组合多种身份验证方式)。

路线路径:

  1. 添加‘htpasswd’ 身份提供者到内置身份验证 pod
  2. 为用户添加“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

享受本地控制台登录!

相关内容