首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当试图锁定命名空间时,RBAC没有按预期工作。

当试图锁定命名空间时,RBAC没有按预期工作。
EN

Stack Overflow用户
提问于 2018-11-19 16:21:21
回答 2查看 1.8K关注 0票数 0

我试图使用RBAC锁定kubernetes中的命名空间,因此我遵循了这个教程

我正在开发一个裸金属集群 (no,无云提供商),并使用Ansible安装kubernetes。

我创建了名称空间:

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: lockdown

服务帐户:

代码语言:javascript
复制
apiVersion: v1
kind: ServiceAccount
metadata:
  name: sa-lockdown
  namespace: lockdown

角色:

代码语言:javascript
复制
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: lockdown
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: [""]
  verbs: [""]

RoleBinding :

代码语言:javascript
复制
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rb-lockdown
subjects:
- kind: ServiceAccount
  name: sa-lockdown
roleRef:
  kind: Role
  name: lockdown
  apiGroup: rbac.authorization.k8s.io

最后,我使用下一个命令测试了授权。

代码语言:javascript
复制
kubectl auth can-i get pods --namespace lockdown --as system:serviceaccount:lockdown:sa-lockdown

这个应该返回“否”,但我得到了“是”:-(

我做错什么了?

Thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-22 14:02:50

我终于找到了问题所在。

角色和角色绑定必须在目标命名空间中创建

通过直接在yaml中指定命名空间,我更改了以下角色和角色绑定类型。

代码语言:javascript
复制
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: lockdown
  namespace: lockdown
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - watch
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rb-lockdown
  namespace: lockdown
subjects:
- kind: ServiceAccount
  name: sa-lockdown
roleRef:
  kind: Role
  name: lockdown
  apiGroup: rbac.authorization.k8s.io

在本例中,我将权限授予用户get,sa- to watch list E 115podsE 216命名空间中的<>E 117锁定E 218

现在,如果我要求获得豆荚:kubectl auth can-i get pods --namespace lockdown --as system:serviceaccount:lockdown:sa-lockdown,它将返回,是,。

相反,如果要求获得部署:kubectl auth can-i get deployments --namespace lockdown --as system:serviceaccount:lockdown:sa-lockdown,它将返回,而不是。

您也可以将文件保留在问题中,只需使用kubectl create -f <file> -n lockdown创建它们。

票数 1
EN

Stack Overflow用户

发布于 2018-11-20 00:34:24

有几种可能性:

  1. 您是在针对安全端口或不安全端口运行"can-i“检查(请参阅add=6)。针对非安全(非https)端口提出的请求总是被授权的。
  2. RBAC是可加性的,所以如果有一个现有的集群绑定或角色绑定授予该服务帐户"get pods“权限(或组系统中的一个:serviceaccounts:serviceaccounts、system:serviceaccounts或system:lockdown),那么该服务帐户将具有该权限。不能通过绑定更多限制性角色来“取消授予”权限。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53378787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档