通过Helm Chart部署服务时,安装失败,因为不允许tiller服务帐户创建ServiceMonitor资源。

注意:

  • ServiceMonitor是Prometheus运算符(operator)定义的CRD,用于自动获取Pod中正在运行的容器的度量。
  • Helm Tiller安装在单个 namespace 中,并且已使用Role和RoleBinding设置了RBAC。

  • 我想验证tiller服务帐户的权限。kubectl具有auth can-i命令,像这样的查询(见下文)始终返回no
  • kubectl auth can-i list deployment --as=tiller
  • kubectl auth can-i list deployment --as=staging:tiller

  • 检查服务帐户权限的正确方法是什么?
    如何启用tiller帐户创建ServiceMonitor资源?

    最佳答案

    在尝试了很多事情并在整个Google谷歌搜索之后,我终于找到this blogpost about Securing your cluster with RBAC and PSP,其中给出了一个示例,该示例演示了如何检查服务帐户的访问权限。

    正确的命令是:kubectl auth can-i <verb> <resource> --as=system:serviceaccount:<namespace>:<serviceaccountname> [-n <namespace>]
    要检查tiller帐户是否有权创建ServiceMonitor对象:kubectl auth can-i create servicemonitor --as=system:serviceaccount:staging:tiller -n staging
    注意:要解决tiller帐户的问题,我必须在servicemonitors apiGroup中向monitoring.coreos.com资源添加权限。更改之后,上述命令最终返回了yes,并且成功完成了Helm Chart的安装。

    更新了tiller-manager角色:

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: tiller-manager
      labels:
        org: ipos
        app: tiller
      annotations:
        description: "Role to give Tiller appropriate access in namespace"
        ref: "https://docs.helm.sh/using_helm/#example-deploy-tiller-in-a-namespace-restricted-to-deploying-resources-only-in-that-namespace"
    rules:
    - apiGroups: ["", "batch", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    - apiGroups:
        - monitoring.coreos.com
      resources:
        - servicemonitors
      verbs:
        - '*'
    

    10-08 08:37