大多数kubernetes运算符要求具有创建集群角色,集群角色绑定和crds的能力。
我想要正确的rbac隔离,并且我想避免直接将部署服务帐户设置为管理员。
但是,如果我仅授予它群集角色版本权限,则似乎允许它以admin开头。
解决该问题的正确方法是什么? (如果有)。
答案 0 :(得分:0)
您可以拥有名称空间和服务帐户,这些帐户只能访问所需的特定资源和apiGroup。
apiVersion: v1
kind: ServiceAccount
metadata:
name: gitlab-tez-dev # account name
namespace: tez-dev #namespace
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tez-dev-full-access #role
namespace: tez-dev
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["deployments", "replicasets", "pods", "services"] #resources to which permissions are granted
verbs: ["*"] # what actions are allowed
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tez-dev-view
namespace: tez-dev
subjects:
- kind: ServiceAccount
name: gitlab-tez-dev
namespace: tez-dev
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: tez-dev-full-access
因此,上述角色没有群集访问权限,而仅限于定义的名称空间以及指定的特定资源和操作。
然后可以将其用于在定义的名称空间中进行部署。
答案 1 :(得分:0)
您是否看到过prometheus-operator情况下的操作?
这样可以避免授予部署服务帐户完整的管理员权限,尤其是让它控制对“ rbac.authorization.k8s.io” API组中的角色或clusterroles资源执行操作“创建/绑定”的权限。
我认为您可以将其用作为操作的App和App-Operator设置单独的RBAC规则的良好参考方案。