k8s 1.24 service account 版本以后怎么获取永不过期token?
问题产生背景:
一个服务操作多个k8s集群, 这个时候就会出现授权问题。k8s 1.24版本之前sa账号产生的token在secret中是永久不过期的。在1.24版本以后secret将不再保留token.而此时容器中的token是只有一个小时就过期的,这对于一个服务来操作多个k8s集群基本就不可能了。
解决办法:
- 使用useraccount
- 设置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了。