我下载了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