【问题标题】:RBAC not working as expected when trying to lock namespace尝试锁定命名空间时,RBAC 无法按预期工作
【发布时间】:2018-11-26 18:27:38
【问题描述】:

我正在尝试使用 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

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

我做错了什么?
谢谢

【问题讨论】:

    标签: kubernetes roles kubectl rbac


    【解决方案1】:

    几种可能性:

    1. 您是否对安全端口或非安全端口运行“can-i”检查(添加 --v=6 以查看)。针对不安全(非 https)端口发出的请求总是被授权的。
    2. RBAC 是附加的,因此,如果现有 clusterrolebinding 或 rolebinding 授予该服务帐户(或 system:serviceaccounts:lockdown、system:serviceaccounts 或 system:authenticated 组之一)“get pods”权限,那么服务帐户将拥有该权限。您不能通过绑定更多限制性角色来“取消授予”权限

    【讨论】:

    • 感谢您的回答!不幸的是,我的集群死了 :-( - 我需要更多时间来测试这个解决方案!
    【解决方案2】:

    我终于找到了问题所在。

    rolerolebinding 必须 在目标命名空间内创建。

    我通过直接在 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 授予了 getwatchlist 的权限em> 命名空间 lockdown 中的 pods


    现在,如果我要求获取 pod:kubectl auth can-i get pods --namespace lockdown --as system:serviceaccount:lockdown:sa-lockdown,它将返回 yes

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


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

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      相关资源
      最近更新 更多