Kubernetes-动态名称空间/安全性

时间:2018-10-05 15:57:35

标签: security dynamic kubernetes namespaces

在K8s集群中,已为

user1和user2分配了“管理员”角色,在这些角色中,它们只能在分配的名称空间中工作。在以下情况下,分别为ns1和ns2

user1->分配的名称空间ns1

user2->分配的名称空间ns2

user3->分配了名称空间ns3,并且还分配了namespace-admin角色。 namespace-admin角色(user3)应该能够在ns3命名空间中创建任何资源,以及他在集群中创建的任何新命名空间。该角色应具有动态创建新名称空间的能力。但是user3不能访问不是由用户“ user3”创建的ns1或ns2命名空间。

user3将动态创建新的名称空间并在这些名称空间中部署工作负载。

这可以解决吗?这类似于Openshift的“项目”概念。

2 个答案:

答案 0 :(得分:1)

是的,您可以使用Role将该角色绑定到user3,从而限制user3仅在名称空间ns3中创建/删除资源。

然后,您可以使用ClusterRole并仅访问namespaces资源,并允许其访问create, delete, etc

类似这样的东西:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: my-namespace
  name: user-namespace-role
rules:
- apiGroups: [""]
  resources: ["services", "endpoints", "pods"] # etc...
  verbs: ["get", "list", "create"] # etc

然后:

kubectl create rolebinding user-namespace-binding --role=user-namespace-role --user=user3 --namespace=my-namespace

然后:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cluster-role-all-namespaces
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # etc

然后:

kubectl create clusterrolebinding all-namespaces-binding --clusterrole=cluster-role-all-namespaces --user=user3

对于user1和user2,您可以为其唯一的命名空间创建RoleRoleBinding

答案 1 :(得分:0)

  

user3应该能够在名称空间ns3中创建任何资源,以及他在集群中创建的任何新名称空间。

要获得动态权限,您需要一个组件在用户创建的命名空间中向用户授予3个权限(这是openshift项目API处理程序的作用)