创建命名空间后自动创建 Kubernetes 资源

bla*_*ead 3 namespaces rbac kubernetes

我有两支球队:

  • 开发人员:他们每次部署应用程序的分支/标签时都会创建一个新的 Kubernetes 命名空间
  • ops:他们使用(集群)角色和(集群)角色绑定管理对集群的访问控制

问题是“开发人员”在“操作”创建 RBAC 资源之前无法对其命名空间进行 kubectl。并且“开发人员”无法自己创建 RBAC 资源,因为他们没有要放入角色绑定资源的主题列表(共享列表不是一种选择)。

我已经阅读了关于Admission webhook的官方文档,但我的理解是它们只对触发 webhook 的资源起作用。

每当创建新的命名空间时,Kubernetes 是否有原生和/或简单的方法来应用资源?

bla*_*ead 5

我通过编写自定义控制器提出了一个解决方案。

随着部署了以下自定义资源,控制器的注入role,并rolebinding在命名空间匹配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
Run Code Online (Sandbox Code Playgroud)

控制器仍处于开发的早期阶段,但我已在越来越多的集群中成功使用它。

这是给那些感兴趣的人:https : //github.com/blakelead/nsinjector