如何从堡垒节点生成oc集群token实现脚本自动登录
Bash环境OpenShift集群自动认证方案
脚本自动登录实现(规避未授权报错)
不要直接用手动登录生成的临时token做脚本认证,按以下步骤配置稳定的认证逻辑:
- 为备份脚本创建专用的服务账号(ServiceAccount),绑定集群管理员权限,避免直接使用kubeadmin账号带来的权限管控和token过期问题
执行以下命令完成配置:# 在openshift-config项目下创建备份专用服务账号 oc create sa backup-script-sa -n openshift-config # 为服务账号绑定集群管理员角色 oc adm policy add-cluster-role-to-user cluster-admin -z backup-script-sa -n openshift-config - 提取服务账号的认证token:
4.11以前版本直接执行oc sa get-token backup-script-sa -n openshift-config即可获取;4.11及以后版本需要手动创建长期Token Secret,配置如下:
执行# sa-long-term-token.yaml apiVersion: v1 kind: Secret metadata: name: backup-sa-perm-token namespace: openshift-config annotations: kubernetes.io/service-account.name: backup-script-sa type: kubernetes.io/service-account-tokenoc apply -f sa-long-term-token.yaml创建后,通过oc extract secret/backup-sa-perm-token -n openshift-config --keys=token --to=-提取token值。 - 在备份脚本头部加入登录状态预校验逻辑,执行操作前先确认认证状态,避免触发未授权报错,参考代码:
#!/bin/bash CLUSTER_API="https://<你的集群API地址>:6443" AUTH_TOKEN="<上一步提取的长期token>" # 校验当前登录状态,未认证则自动登录 if ! oc whoami >/dev/null 2>&1; then oc login --token="${AUTH_TOKEN}" --server="${CLUSTER_API}" # 登录失败直接终止脚本 if [ $? -ne 0 ]; then echo "集群认证失败,退出备份流程" exit 1 fi fi # 后续写入你的备份业务逻辑即可
生产环境不推荐直接使用kubeadmin账号生成长期token,权限粒度过粗存在安全风险。
Token有效期说明
执行oc login --token=sometext --server=https://example.com:6443时使用的token是否需要24小时更换,取决于token类型:
- 手动通过网页控制台复制、或者默认
oc login交互流程生成的用户会话token,默认有效期为24小时,到期后必须重新获取,否则就会抛出error: you must be logged in to the server (unauthorised)报错。 - 按照上文流程创建的ServiceAccount绑定长期Secret生成的token,默认永久有效,不需要每24小时更换,仅在手动删除服务账号、删除对应Token Secret、或者集群配置了强制SA Token轮转策略时才会失效。
内容的提问来源于stack exchange,提问作者Vj Thakur
相关产品推荐
相关产品推荐

