k8s

k8s 1.24版本创建sa没有生成secret

问题详情

k8s版本是1.24.16,创建sa时没有自动创建对应的secret,使用automountServiceAccountToken: true参数也没有自动生成。

file

解决

1.24版本的新特性:https://www.padok.fr/en/blog/new-kubernetes-changes#No_Secret_by_default_for_service_account_tokens

查看官方文档:https://kubernetes.io/zh-cn/docs/concepts/security/service-accounts/

file

LegacyServiceAccountTokenNoAutoGeneration参数在1.24中进入Beta,默认启用,在1.26中进入GA。

所以secret需要手动创建并绑定sa。yaml如下:

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

file

sa和secret已经绑定。查看secret的token:

file

这个token是k8s自动生成的,是永不过期的。把token解密后访问https://jwt.io/查看过期时间:

file

创建pod引用这个sa。

apiVersion: v1
kind: Pod
metadata:
   name: sapod
spec:
  serviceAccountName: cluster-sa
  containers:
  - name: centos
    image: centos:latest
    imagePullPolicy: IfNotPresent
    command:
    - /bin/sh
    - -c
    - "sleep 3600"

创建完成后查看pod的volume:

file

pod创建了一个卷名字为kube-api-access-mpltx,挂载到了容器内/var/run/secrets/kubernetes.io/serviceaccount目录。但是卷的数据来源并不是Secret,其中token是由kubelet到tokenRequest api去申请的token,且token的有效期为1小时;ca.crt来自kube-root-ca.crt这个configmap;namespace是通过downwardAPI插件获取Pod自身的字段值。

查看pod内的token:

k exec -it sapod -- cat /var/run/secrets/kubernetes.io/serviceaccount/token

查看这个token的过期时间:

file

可以看到这个token过期时间为1年。每1小时更新一次。(expirationSeconds: 3607)

删除sa,secret会自动删除。

file

要是想token永不过期,可以使用useraccount,但是配置很麻烦,参考:https://kubernetes.io/docs/reference/access-authn-authz/authentication%E3%80%82

简单的方法就是手动创建secret, 绑定serviceaccount, 让k8s自动生成永不过期的token,再用这个token来访问apiserver。

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x