我正在尝试使用 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
这个应该返回“否”,但我得到“是” :-(
我做错了什么?
谢谢
答案 0 :(得分:1)
几种可能性:
答案 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
即可创建文件。