个人问题整理记录

334 阅读1分钟

k8s 1.24 service account 版本以后怎么获取永不过期token?

问题产生背景:

一个服务操作多个k8s集群, 这个时候就会出现授权问题。k8s 1.24版本之前sa账号产生的token在secret中是永久不过期的。在1.24版本以后secret将不再保留token.而此时容器中的token是只有一个小时就过期的,这对于一个服务来操作多个k8s集群基本就不可能了。

解决办法:

  1. 使用useraccount
  2. 设置serviceaccount 关联的token永不过期
    由于useraccount 账号创建过于麻烦暂时不考虑。如果需要的话可参考 kubernetes.io/docs/refere…
    serviceaccount 设置永不过期token参考: www.padok.fr/en/blog/new…kubernetes.io/docs/concep…

既然1.24 以后不再创建secret 了。那么我们其实可以手动创建secret, 关联好serviceaccount, 让k8s帮我们填好永不过期token就可以了。

apiVersion: v1
kind: Secret
metadata:
  name: secret-sa-sample
  annotations:
    kubernetes.io/service-account.name: "sa-name"
type: kubernetes.io/service-account-token

kubernetes.io/service-account.name 这个key所对应的值就代表其所需要关联的serviceaccount。当我们创建好secret之后, 就可以看到k8s会自动帮我们填充好token,ca.crt等信息。此时生成的token就永不过期了,我们就可以拿着这个token来访问k8s, apisever了。

Kubernetes v1.25创建ServiceAccount未生成Secret问题

说明#

kubernetes v1.24.0 更新之后进行创建 ServiceAccount 不会自动生成 Secret 需要对其手动创建。

网上的很多教程都没有创建 Secret 这步,应该是之前版本的教程,笔者使用的是 v1.25 版本,这部分需要特别添加。

创建#

cat >role-jenkins.yaml<<EOF
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkins
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-jenkins
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: jenkins
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: v1
kind: Secret
metadata:
  name: jenkins
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: "jenkins"
type: kubernetes.io/service-account-token
EOF
# 创建 ServiceAccount 和 Secret
kubectl apply -f role-jenkins.yaml
# 获取 Secret
kubectl -n kube-system get secrets
# 查看 Secret 详情
kubectl -n kube-system describe secrets jenkins
# 获取 Token
kubectl -n kube-system get secrets jenkins -o go-template --template '{{index .data "token"}}' | base64 --decode

参考#

ServiceAccounts 及 Secrets 重大变化: blog.csdn.net/qq_33921750…