security - Kubernetes - 动态命名空间/安全

标签 security dynamic kubernetes namespaces

用户1和用户2已在K8s集群中被分配了“管理员”角色,他们只能在分配给他们的命名空间内工作。在下面的例子中,分别为 ns1 和 ns2

user1 --> 分配的命名空间 ns1

user2 --> 分配的命名空间 ns2

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

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

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

最佳答案

是的,您可以使用将角色绑定(bind)到 user3 的Role 来限制 user3 仅在命名空间 ns3 中创建/删除资源。

然后,您可以使用仅访问命名空间资源的ClusterRole,并允许其创建、删除等

类似这样的事情:

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

关于security - Kubernetes - 动态命名空间/安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52669427/

相关文章:

javascript - 管理界面的 IP 白名单

kubernetes - 如何在Kubernetes中对所有BestEffort Pod进行OOM?

proxy - 如何使用 Kubeadm 在代理后面安装 Kubernetes 集群?

security - 银行网站上经常使用的个性化安全图像背后的目的是什么?

java - 无法挽回地破坏Java中的数据

ios - 使用具有通用 setter 和 ARC 的 Objective-C 动态属性

dynamic - Biztalk:XML​​包含映射到CSV的电子邮件,作为附件发送

mysql - 如何在 kubernetes 中禁用 mysql 严格模式?

java - Xbootclasspath 和 Java 安全性

javascript - 动态添加输入类型