gpt4 book ai didi

c# - 用于作业的 Kubernetes 服务帐户

转载 作者:行者123 更新时间:2023-12-02 11:32:34 25 4
gpt4 key购买 nike

我需要从启用 RBAC 的集群中同一命名空间中的另一个 pod 调用 Kubernetes 作业。作业是使用 C# Kubernetes client library 创建的。 .此任务在未启用 RBAC 的测试环境中正常工作。

关注 Kubernetes documentation 后为了创建服务帐户,我有以下 YAML。

apiVersion: v1
kind: ServiceAccount
metadata:
name: x20-jobs-sp
namespace: prod
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: prod
name: x20-jobs-sp-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["batch", "extensions"]
resources: ["jobs"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: x20-jobs-sp-rolebinding
namespace: prod
subjects:
- kind: ServiceAccount
# Reference to ServiceAccount kind's `metadata.name`
name: x20-jobs-sp
# Reference to ServiceAccount kind's `metadata.namespace`
namespace: prod
roleRef:
kind: ClusterRole
name: x20-jobs-sp-role
apiGroup: rbac.authorization.k8s.io

这是调用作业的代码。

var job = await client.CreateNamespacedJobAsync(new k8s.Models.V1Job
{
Metadata = new k8s.Models.V1ObjectMeta
{
Name = safeName
},
Spec = new k8s.Models.V1JobSpec
{
Template = new k8s.Models.V1PodTemplateSpec
{
Spec = new k8s.Models.V1PodSpec
{
Containers = new List<k8s.Models.V1Container>()
{
new k8s.Models.V1Container
{
Image = $"{_containerRegistry}/{jobName}:{_imageTag}",
Args = args.Select(x => x.ToString()).ToList(),
Env = GetDefaultEnvironment(),
Name = safeName,
ImagePullPolicy = "Always"
}
},
ImagePullSecrets = new List<k8s.Models.V1LocalObjectReference>
{
new k8s.Models.V1LocalObjectReference
{
Name = _containerRegistry
}
},
RestartPolicy = "OnFailure",
ServiceAccountName = "x20-jobs-sp" // jobs service principal
}
},
TtlSecondsAfterFinished = _ttlSecondsAfterFinished
}
}, _namespace);


这正确地创建了 ServiceAccount、ClusterRole 和 ClusterRoleBinding,但是尝试调用任务仍然会导致 Forbidden结果。

我为 ClusterRole 尝试了许多不同的选项,包括使用内置的 cluster-admin。角色,都没有成功。这已经使用 kubectl auth can-i 进行了测试。命令。

我错过了什么?

最佳答案

所以事实证明,原因是尝试调用作业的 pod 的默认服务帐户没有必要的角色绑定(bind)。
我通过添加 cluster-admin 对此进行了测试角色绑定(bind)到命名空间中的默认服务帐户并调用作业。kubectl create clusterrolebinding --user system:serviceaccount:prod:default prod-cluster-admin --clusterrole cluster-admin

关于c# - 用于作业的 Kubernetes 服务帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60066170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com