• FAQ
  • KubeSphere 3.0 中的 Token 问题

如何修改 Token 的有效时间

Token 的配置可以参考入口:https://github.com/kubesphere/kubesphere/blob/v3.0.0/pkg/apiserver/authentication/options/authenticate_options.go#L72

在 OAuthOptions 对象中定义了相关参数:https://github.com/kubesphere/kubesphere/blob/v3.0.0/pkg/apiserver/authentication/oauth/oauth_options.go#L53

编辑 kubesphere-config 文件,可以修改配置。如下:

kubectl -n kubesphere-system get cm kubesphere-config -o yaml

apiVersion: v1
data:
  kubesphere.yaml: |
    authentication:
      authenticateRateLimiterMaxTries: 10
      authenticateRateLimiterDuration: 10m0s
      loginHistoryRetentionPeriod: 168h
      maximumClockSkew: 10s
      multipleLogin: True
      kubectlImage: kubesphere/kubectl:v1.17.0
      jwtSecret: "25Rcrd5ohXwUl6FiZCAtx1zG7LUN5dBK"
      oauthOptions:
        accessTokenMaxAge: 24h
      ...

这里修改 oauthOptions 中的 accessTokenMaxAge 字段,即可修改 token 的有效期。不配置时,默认是 24 小时。

如何生成永久有效的 Token

Token 是区分类型的,除了通常使用的 access_token,还有 static_token。代码链接:
https://github.com/kubesphere/kubesphere/blob/v3.0.0/pkg/apiserver/authentication/token/issuer.go#L30

判断逻辑: https://github.com/kubesphere/kubesphere/blob/v3.0.0/pkg/models/iam/im/token.go#L60

下面是 @hongming 提供的生成永久 token 的脚本:

  1. 获取 jwtSecret
kubectl -n kubesphere-system get cc ks-installer -o yaml | grep jwtSecret

xxxxx
  1. 查询 ks-installer 的 pod 名字
kubectl -n kubesphere-system get pod -l app=ks-install

NAME                            READY   STATUS    RESTARTS   AGE
ks-installer-75b96b8f7f-rnqvd   1/1     Running   0          2d4h
  1. 进入 ks-installer
kubectl -n kubesphere-system exec -it ks-installer-75b96b8f7f-rnqvd sh
  1. 拷贝生成脚本
cp  ./installer/roles/ks-core/init-token/files/jwt-script/jwt.sh  ./jwt2.sh
  1. 生成 Token

需要先将第 1 步获取的 jwtSecret 设置为环境变量。

export JWT_SECRET=xxxx
bash jwt2.sh $JWT_SECRET '{"email": "admin@kubesphere.io","username": "admin","token_type": "static_token"}'

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..YLZM9cHIzkpbvWz4PXDTU037ehZ6hYQFhz0zEhDR2M4

如何通过 API 生成 Token

参考文档,最底部有 Python 示例。https://kubesphere.com.cn/forum/d/1163-kubesphere-devops-s2i-b2i-api

shaowenchen 更改标题为「KubeSphere 3.0 中的 Token 问题

集成到脚本自动生成

#!/bin/bash
#
#set -x
name=$1
mail=$2
if [ -n "$name" -a -n $mail ]; then
JWT_SECRET=$(kubectl -o yaml get cm kubesphere-config -n kubesphere-system |awk -F '"' '/ jwtSecret:/{print $2}' )
POD=$(kubectl -n kubesphere-system get pod -l app=ks-install |awk '/ks-installer-/{print $1}')
echo -e "-------------------------------------------\n"
kubectl -n kubesphere-system exec -it $POD \
bash /kubesphere/installer/roles/ks-core/init-token/files/jwt-script/jwt.sh \
$JWT_SECRET '{"email": "'${mail}'","username": "'${name}'","token_type": "static_token"}'
echo -e "\n-------------------------------------------\n"
else
echo "$0 <username> <email>"
fi

4 年 后

漏洞扫描的时候扫到kubesphere端口为9100的node-exporter它的ssl证书过期了,你知道这个证书在哪里么?

漏洞扫描的时候扫到kubesphere端口为9100的node-exporter它的ssl证书过期了,你知道这个证书在哪里么?

商业产品与合作咨询