我有2个团队:
- 开发人员:他们每次部署应用程序的分支/标签时都会创建一个新的 Kubernetes 命名空间
- ops:它们通过(集群)角色和(集群)角色绑定管理对集群的访问控制
问题是,在“ops”创建 RBAC 资源之前,“devs”无法 kubectl 其命名空间。并且“开发人员”无法自己创建 RBAC 资源,因为他们没有要放入角色绑定资源中的主题列表(不能选择共享列表)。
我已阅读有关的官方文档准入网络钩子 https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/但我的理解是,它们只作用于触发 webhook 的资源。
每当创建新的命名空间时,Kubernetes 中是否有一种本机和/或简单的方法来应用资源?
我通过编写自定义控制器提出了一个解决方案。
部署以下自定义资源后,控制器注入role
and rolebinding
在命名空间匹配中dev-.*
and fix-.*
:
kind: NamespaceResourcesInjector
apiVersion: blakelead.com/v1alpha1
metadata:
name: nri-test
spec:
namespaces:
- dev-.*
- fix-.*
resources:
- |
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: dev-role
rules:
- apiGroups: [""]
resources: ["pods","pods/portforward", "services", "deployments", "ingresses"]
verbs: ["list", "get"]
- apiGroups: [""]
resources: ["pods/portforward"]
verbs: ["create"]
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["list", "get"]
- |
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dev-rolebinding
subjects:
- kind: User
name: dev
roleRef:
kind: Role
name: dev-role
apiGroup: rbac.authorization.k8s.io
该控制器仍处于开发的早期阶段,但我已在越来越多的集群中成功使用它。
这是给有兴趣的人的:https://github.com/blakelead/nsinjector https://github.com/blakelead/nsinjector
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)