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 账号创建过于麻烦暂时不考虑。如果需要的话可参考 https://kubernetes.io/docs/reference/access-authn-authz/authentication。
    serviceaccount 设置永不过期token参考: https://www.padok.fr/en/blog/new-kubernetes-changes#No_Secret_by_default_for_service_account_tokens, https://kubernetes.io/docs/concepts/configuration/secret/#service-account-token-secrets

既然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了。

posted on 2022-08-09 16:10  biwentao  阅读(3506)  评论(2编辑  收藏  举报

导航