是否有可能创建一个kubernetes RBAC规则,允许从现有的CronJob创建作业,但以其他方式阻止创建作业?
我们希望将集群严格锁定,以避免由CICD管理的任意部署--但我们也需要为CronJobs的手动测试提供便利,或者按计划重新运行失败的作业。我希望开发人员能够运行如下命令:
kubectl create job --from=cronjob/my-job my-job-test-run-1但不能运行以下内容:
kubectl create job my-evil-job -f evil-job.yaml这有可能吗?
发布于 2022-03-01 09:22:39
在这个场景中,为了成功地执行这个命令:
kubectl create job --from=cronjob/<cronjob_name> 用户/ServiceAccount应该有适当的RBAC规则(至少两条来自下面提供的输出,创建Jobs和获取CronJobs。
在第一个示例中,我授予了创建Jobs和获取CronJobs的访问权限,并且能够创建Job和Job --from CronJob。
user@minikube:~$ cat test_role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: job
rules:
- apiGroups: ["batch"]
resources: ["jobs"]
verbs: ["create"]
- apiGroups: ["batch"]
resources: ["cronjobs"]
verbs: ["get"]
user@minikube:~$ kubectl create job --image=inginx testjob20
job.batch/testjob20 created
user@minikube:~$ kubectl create job --from=cronjobs/hello testjob21
job.batch/testjob21 created但是,如果我只授予访问权来创建Job而没有get CronJob,那么我就能够创建Job,而不是创建Job --from CronJob。
user@minikube:~$ cat test_role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: job
rules:
- apiGroups: ["batch"]
resources: ["jobs"]
verbs: ["create"]
user@minikube:~$ kubectl create job --image=nginx testjob3
job.batch/testjob3 created
user@minikube:~$ kubectl create job --from=cronjobs/hello testjob4
Error from server (Forbidden): cronjobs.batch "hello" is forbidden: User "system:serviceaccount:default:t1" cannot get resource "cronjobs" in API group "batch" in the namespace "default"当我删除创建Jobs的访问权限时,我无法创建Job和Job --from CronJob
user@minikube:~$ cat test_role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: job
rules:
- apiGroups: ["batch"]
resources: ["cronjobs"]
verbs: ["get"]
user@minikube:~$ kubectl create job --image=inginx testjob10
error: failed to create job: jobs.batch is forbidden: User "system:serviceaccount:default:t1" cannot create resource "jobs" in API group "batch" in the namespace "default"
user@minikube:~$ kubectl create job --from=cronjobs/hello testjob11
error: failed to create job: jobs.batch is forbidden: User "system:serviceaccount:default:t1" cannot create resource "jobs" in API group "batch" in the namespace "default"正如您所看到的,如果用户/ServiceAccount在这个场景中没有这两种权限,那么就不可能创建(Job或Job --from CronJob),因此不可能只使用rules创建这样的限制。
一种可能的解决方案是将该权限分为两个不同的用户/ServiceAccount,用于两个不同的任务(第一个用户可以创建Jobs + get CronJobs,第二个用户无需创建Jobs的权限)。
另一种可能是尝试使用k8s接纳控制器与f.e。开放策略代理
https://stackoverflow.com/questions/71265398
复制相似问题