Kubernetes v1.24 更新后,ServiceAccount 不再自动生成密钥令牌,因此需要解决相关问题
Kubernetes的变更内容
从Kubernetes v1.24版本开始,创建ServiceAccount时不再自动生成Secret Token。
公式:1.24.0 版本发布说明相应部分
事件
在ArgoWorkflow服务器上,使用在v1.24版本及以后创建的Token不存在的ServiceAccount绑定用户登录时,无法执行角色的功能,导致发生错误。(由于缺少Token,无法执行RBAC授权内容。)
错误内容 (huò wù
错误-1
{"code":7,"message":"not allowed"}: not allowed
错误2
Connection closed to api/v1/workflow-events/...
处理
通过明确创建ServiceAccount用的Secret资源,使Token被授予给了ServiceAccount。
-
- Kubernetesドキュメント
- ArgoWorkflowドキュメント
服务账户 (已存在)
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
namespace: default
annotations:
workflows.argoproj.io/rbac-rule: "'<GROUP_OBJECT_ID>' in groups"
workflows.argoproj.io/rbac-rule-precedence: "1"
秘密(新建)
apiVersion: v1
kind: Secret
metadata:
name: my-service-account.service-account-token # name is discoverable. ref. https://argoproj.github.io/argo-workflows/manually-create-secrets/#option-1-discovery-by-name
annotations:
kubernetes.io/service-account.name: my-service-account
type: kubernetes.io/service-account-token
在应用上述更改后,新添加的秘钥会自动应用于ServiceAccount的Tokens,并且错误会被解决。
$ kubectl describe serviceaccount my-service-account
Name: my-service-account
Namespace: default
.
.
.
Mountable secrets: <none>
Tokens: my-service-account.service-account-token
Events: <none>
请提供更多句子,以便我能够正确地引用。
-
- Kubernetes 1.24.0 release notes
-
- Kubernetes original issue
- https://argoproj.github.io/argo-workflows/manually-create-secrets/