Kubernetes管理员隔离

时间:2019-06-26 12:42:11

标签: kubernetes kubernetes-operator

大多数kubernetes运算符要求具有创建集群角色,集群角色绑定和crds的能力。

我想要正确的rbac隔离,并且我想避免直接将部署服务帐户设置为管理员。

但是,如果我仅授予它群集角色版本权限,则似乎允许它以admin开头。

解决该问题的正确方法是什么? (如果有)。

2 个答案:

答案 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规则的良好参考方案。