【问题标题】:Allowing helm hooks (jobs) to create k8s resources允许 helm hooks (jobs) 创建 k8s 资源
【发布时间】:2021-09-01 15:43:47
【问题描述】:

我想运行一个预安装 helm hook。

这将运行一个将使用自定义图像的作业,其入口点将执行以下命令

kubectl create secret generic my-secret --from-literal=foo=bar

可以通过 RBAC 允许此操作吗?

如果是这样,执行此任务需要授予特定 pod/作业的最低权限是多少?

【问题讨论】:

    标签: kubernetes kubernetes-helm rbac kubernetes-rbac


    【解决方案1】:

    这是可能的,但也许不是最简单的事情。

    您可以使用标准的Kubernetes RBAC system 来允许这样做,角色类似于

    # templates/pre-install-role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: {{ include "chart.name" . }}-pre-install
      annotations:
        helm.sh/hook: pre-install
    rules:
      - apiGroups: [""]
        resources: ["secrets"]
        verbs: ["create"]
    

    但是,该 Role 需要附加到某些东西才能产生效果,这意味着您还需要创建一个 ServiceAccount 和一个 RoleBinding 以将两者附加到一起:

    # templates/pre-install-service-account.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: {{ include "chart.name" . }}-pre-install
      annotations:
        helm.sh/hook: pre-install
    
    # templates/pre-install-service-role-binding.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: {{ include "chart.name" . }}-pre-install
      annotations:
        helm.sh/hook: pre-install
    subjects:
      - kind: ServiceAccount
        namespace: {{ .Release.Namespace }}
        name: {{ include "chart.name" . }}-pre-install
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: {{ include "chart.name" . }}-pre-install
    

    最后,在您的预安装作业中,您需要参考

    serviceAccountName: {{ include "chart.name" . }}-pre-install
    

    注意,Helm 预安装钩子在安装其他任何东西之前运行,这意味着我们需要这些与授权相关的辅助对象来运行钩子,它们也需要标记为预安装钩子。使用默认的deletion policy,它们将保持安装状态,直到图表被卸载。

    如果您在部署时拥有所需的数据,您可能会发现在 Helm 图表中创建 Secret 会更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2020-12-25
      • 2021-02-27
      • 2020-01-22
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多