kubernetes - 创建命名空间后自动创建 Kubernetes 资源
问题描述
我有2个团队:
- 开发人员:他们每次部署应用程序的分支/标签时都会创建一个新的 Kubernetes 命名空间
- ops:他们使用(集群)角色和(集群)角色绑定管理对集群的访问控制
问题是,在“ops”创建 RBAC 资源之前,“devs”无法对他们的命名空间进行 kubectl。并且“开发人员”不能自己创建 RBAC 资源,因为他们没有要放入角色绑定资源的主题列表(共享列表不是一种选择)。
我已经阅读了有关Admission webhook的官方文档,但我的理解是它们只对触发 webhook 的资源起作用。
每当创建新的命名空间时,Kubernetes 中是否有一种本地和/或简单的方法来应用资源?
解决方案
我通过编写自定义控制器想出了一个解决方案。
部署了以下自定义资源后,控制器将 and 注入到role
与 androlebinding
匹配的命名空间dev-.*
中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
推荐阅读
- c++ - 移动在 C++ 控制台游戏中不起作用(使用 _kbhit 和 _getch)
- kubernetes - 防止 VirtualService 路由到空/不健康的目的地?
- html - 在常量位置添加 SVG 图片,但仅在最后一页
- syntax - 什么是 SPSS 语法错误 n° 10933 以及如何解决?
- apache - 即使文件已被排除,也包括文件夹
- powershell - 是否有一个我可以用我想要导出而不是使用 Export-ModuleMember 来装饰我的函数的属性?
- java - JAXB:删除父节点保留其子节点
- python - 运行受 api-key 保护的 python fastapi 的 docker 中 /openapi.json 的安全问题
- python - 当适配器已经是正确的类型时忽略适配器的创建
- mysql - 如何从 phpmyadmin 将查询结果导出到 csv 文件中