serviceaccount中不会自动生成可挂载的秘密和令牌



我下载了Kubernetes用于与Jenkins集成,并创建了一个Serviceaccount,但是这个secret不会自动创建。

在过去,我记得Secret是自动创建的,Token是在创建Serviceaccount时挂载的。

如何像以前一样自动创建Secret ?

如@P....所述在kubernetes 1.24版本中,此行为已被更改,LegacyServiceAccountTokenNoAutoGeneration功能门在1.24中默认是启用的。

在1.24+中,包含服务帐户令牌的新秘密不再自动生成,也不会自动包含在秘密中。包含服务帐户令牌的现有秘密仍然可用。

从自动生成的Secret API对象中抓取令牌内容的API客户端必须开始使用TokenRequest API来获取令牌(首选,在所有支持的版本中可用),或者如果需要/需要基于秘密的令牌,您可以显式请求基于秘密的令牌。

参考手动创建服务帐户API令牌以显式请求基于秘密的令牌。

您可以将以下两个清单放入YAML文件并应用它们,或者您可以从命令行执行,如下所示:

$ kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins-user
EOF

$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: jenkins-user-secret
annotations:
kubernetes.io/service-account.name: jenkins-user
type: kubernetes.io/service-account-token
EOF

这里我们有一个持有证书和令牌的秘密:

$ kubectl get secret
NAME               TYPE                                  DATA   AGE
jenkins-user-secret   kubernetes.io/service-account-token   3      4s

上面的答案并没有完全恢复1.24之前的行为,但是我发现下面的答案确实恢复了它。

apiVersion: v1
kind: Secret
metadata:
name: jenkins-user-secret
annotations:
kubernetes.io/service-account.name: jenkins-user
type: kubernetes.io/service-account-token
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
automountServiceAccountToken: true
secrets:
- name: jenkins-user-secret

这解决了我之前在运行

时看到的错误
istioctl x create-remote-secret

抛出错误

Error: could not get access token to read resources from local kube-apiserver: no secret found in the service account:

以上答案中缺少的部分是通过设置"secrets"来配置服务帐户以允许pods使用secret。列表。

您可以使用选项automountServiceAccountToken: true

启用它
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
automountServiceAccountToken: true
删除选项automountServiceAccountToken,默认情况下它将创建secret
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins

相关内容

最新更新