0

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

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

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

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

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

4

1 回答 1

2

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

您可以使用标准的Kubernetes RBAC 系统来实现这一点,其角色类似于

# 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 预安装钩子在安装其他任何东西之前运行,这意味着我们需要这些与授权相关的辅助对象来运行钩子,它们也需要标记为预安装钩子。使用默认删除策略,它们将保持安装状态,直到图表被卸载。

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

于 2021-06-17T11:17:54.420 回答