RBAC角色以动态名称管理单个Pod

问题描述 投票:1回答:1

我需要使用RBAC授予对一个部署以及该部署的所有Pod的访问权限。我已经成功地为Role配置了RoleBindingdeploymet,并且工作正常:

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: <my-namespace>
  name: <deployment>-manager-role
rules:
  - apiGroups: ["", "extensions", "apps"]
    resources: ["deployments"]
    resourceNames: ["<deployment>"]
    verbs: ["get", "list", "watch", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: <deployment>-manager-binding
  namespace: <my-namespace>
subjects:
  - kind: User
    name: <username>
    apiGroup: ""
roleRef:
  kind: Role
  name: <deployment>-manager-role
  apiGroup: ""

使用此角色,用户可以访问,更新和修补部署。此部署使用动态名称(例如<deployment>-5594cbfcf4-v4xx8)创建吊舱。我试图允许该用户使用部署名称并使用部署名称+通配符char *

访问这些Pod(获取,列出,监视,读取日志,执行,删除)。
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: <my-namespace>
  name: <deployment>-pods-manager-role
rules:
  - apiGroups: ["", "extensions", "apps"]
    resources: ["pods"]
    resourceNames: ["<deployment>*"]
    verbs: ["get", "list", "watch", "update", "patch", "exec", "delete"]

我还更新了角色绑定。但是当我尝试拿到吊舱时:

kubectl --context=<username>-ctx -n <namespace> get pods <deployment>-5594cbfcf4-v4xx8

我遇到错误:

来自服务器的错误(禁止):容器“ -5594cbfcf4-v4xx8”:用户“ ”无法在名称空间“ ”中的API组“”中获取资源“容器”]

如果将<deployment>-5594cbfcf4-v4xx8添加到resourceNames的列表中,则用户可以访问此窗格。

是否可以根据部署名称授予对特定Pod的访问权限?

kubernetes roles rbac kubernetes-pod kubernetes-deployment
1个回答
1
投票

在Kubernetes中,豆荚被认为是短暂的“牛”,它们来来往往。您不应该尝试管理每个Pod的RBAC。

不幸的是,由于resourceNames字段不支持诸如前缀/后缀之类的模式,因此,'*')具有特殊含义,表示“全部”,但这不是模式。因此,resourceNames中的'my-app-*将不起作用。已经为此功能打开了票证,但尚未实现:https://github.com/kubernetes/kubernetes/issues/56582

也有要求能够通过标签管理RBAC,但是该功能也未实现:https://github.com/kubernetes/kubernetes/issues/44703

因此,您可能需要更改模型以向用户授予角色,以管理特定命名空间中的所有pod。您的部署应该是该命名空间中唯一的“ pod源”。这样,您将无需指定任何资源名称。

© www.soinside.com 2019 - 2024. All rights reserved.