首页 > 解决方案 > 创建命名空间后自动创建 Kubernetes 资源

问题描述

我有2个团队:

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

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

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

标签: kubernetesnamespacesrbac

解决方案


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

部署了以下自定义资源后,控制器将 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


推荐阅读