尝试锁定名称空间时,RBAC无法正常工作

时间:2018-11-19 16:21:22

标签: kubernetes roles kubectl rbac

我正在尝试使用 RBAC 锁定kubernetes中的名称空间,所以我遵循了tutorial
我正在使用 baremetal群集(没有minikube,没有云提供商),并使用Ansible安装了kubernetes。

我创建了以下命名空间:

apiVersion: v1
kind: Namespace
metadata:
  name: lockdown

服务帐户:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: sa-lockdown
  namespace: lockdown

角色:

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

角色绑定:

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

最后我使用下一条命令测试了授权

kubectl auth can-i get pods --namespace lockdown --as system:serviceaccount:lockdown:sa-lockdown

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

我做错了什么?
谢谢

2 个答案:

答案 0 :(得分:1)

几种可能性:

  1. 您是否要对安全端口或不安全端口运行“ can-i”检查(添加--v = 6进行查看)。始终会授权针对不安全(非https)端口的请求。
  2. RBAC是可加的,因此,如果现有的集群角色绑定或角色绑定向该服务帐户(或系统:serviceaccounts:lockdown,system:serviceaccounts或system:authenticated组之一)授予“获取吊舱”权限,则该服务帐户将具有该权限。您不能通过绑定更多限制性角色来“保证”权限

答案 1 :(得分:0)

我终于找到了问题所在。

必须在目标名称空间内创建 role rolebinding

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

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

在此示例中,我授予用户 sa-lockdown 权限以 获取监视列表 pod lockdown 命名空间中。


现在,如果我要获取豆荚: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即可创建文件。