security - Kubernetes - 动态命名空间/安全
问题描述
user1 和 user2 在 K8s 集群中被分配了“管理员”角色,他们只能在分配给他们的命名空间内工作。在下面的例子中,ns1 和 ns2 分别
user1 --> 分配的命名空间 ns1
user2 --> 分配的命名空间 ns2
user3 --> 分配了命名空间 ns3 并且还分配了命名空间管理员角色。命名空间管理员角色 (user3) 应该能够在命名空间 ns3 中创建任何资源以及他在集群中创建的任何新命名空间。这个角色应该能够动态地创建新的命名空间。但是 user3 不应该有权访问不是由用户“user3”创建的 ns1 或 ns2 命名空间。
user3 将动态创建新的命名空间并在这些命名空间中部署工作负载。
这可以解决吗?这类似于 Openshift 的“项目”概念。
解决方案
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,您可以为其独特的命名空间创建一个Role
and 。RoleBinding
推荐阅读
- html - 如何通过 html 网站控制我的 neopixel Arduino 灯
- python - 我想计算数据以在 django models.py 中连续保存
- css - 通过css更改图标
- c++ - 从 baseClass 函数本身返回 baseClass* 的访问工厂
- machine-learning - LSTM fit_generator steps_per_epoch
- javascript - word-break css 选项无效
- spring-mvc - 无效的 CSRF 令牌
- javascript - 在点击提交后检查输入是否为空,然后在该字段中插入一个值
- mysql - 使用 Like 和 Where 语句表单表仅从特定列中搜索内容
- amazon-web-services - AWS Systems Manager 使用云形成模板