首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kuberentes RBAC规则允许只从CronJob创建作业

Kuberentes RBAC规则允许只从CronJob创建作业
EN

Stack Overflow用户
提问于 2022-02-25 11:46:44
回答 1查看 752关注 0票数 2

是否有可能创建一个kubernetes RBAC规则,允许从现有的CronJob创建作业,但以其他方式阻止创建作业?

我们希望将集群严格锁定,以避免由CICD管理的任意部署--但我们也需要为CronJobs的手动测试提供便利,或者按计划重新运行失败的作业。我希望开发人员能够运行如下命令:

代码语言:javascript
复制
kubectl create job --from=cronjob/my-job my-job-test-run-1

但不能运行以下内容:

代码语言:javascript
复制
kubectl create job my-evil-job -f evil-job.yaml

这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-01 09:22:39

在这个场景中,为了成功地执行这个命令:

代码语言:javascript
复制
kubectl create job --from=cronjob/<cronjob_name>  

用户/ServiceAccount应该有适当的RBAC规则(至少两条来自下面提供的输出,创建Jobs和获取CronJobs

在第一个示例中,我授予了创建Jobs和获取CronJobs的访问权限,并且能够创建JobJob --from CronJob

代码语言:javascript
复制
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

代码语言:javascript
复制
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的访问权限时,我无法创建JobJob --from CronJob

代码语言:javascript
复制
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在这个场景中没有这两种权限,那么就不可能创建(JobJob --from CronJob),因此不可能只使用rules创建这样的限制。

一种可能的解决方案是将该权限分为两个不同的用户/ServiceAccount,用于两个不同的任务(第一个用户可以创建Jobs + get CronJobs,第二个用户无需创建Jobs的权限)。

另一种可能是尝试使用k8s接纳控制器与f.e。开放策略代理

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71265398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档