我试图使用RBAC锁定kubernetes中的命名空间,因此我遵循了这个教程。
我正在开发一个裸金属集群 (no,无云提供商),并使用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: [""]RoleBinding :
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这个应该返回“否”,但我得到了“是”:-(
我做错什么了?
Thx
发布于 2018-11-22 14:02:50
我终于找到了问题所在。
角色和角色绑定必须在目标命名空间中创建。
通过直接在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在本例中,我将权限授予用户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创建它们。
发布于 2018-11-20 00:34:24
有几种可能性:
https://stackoverflow.com/questions/53378787
复制相似问题