允许 helm hooks(作业)创建 k8s 资源
Allowing helm hooks (jobs) to create k8s resources
我想 运行 预安装 helm hook。
这将 运行 一个使用自定义图像的作业,其入口点将执行以下命令
kubectl create secret generic my-secret --from-literal=foo=bar
可以通过 RBAC 允许此操作吗?
如果是这样,执行此任务需要授予特定 pod/作业的最小权限是什么?
这是可能的,但可能不是最简单的事情。
您可以使用标准 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预装hooks 运行,好吧,在安装其他任何东西之前,这意味着我们需要这些辅助授权相关对象到运行 hook的地方,他们也需要标记为预安装挂钩。默认 deletion policy 它们将保持安装状态,直到图表被卸载。
如果您在部署时拥有所需数据,您可能会发现仅在 Helm 图表中创建 Secret 会更简单。
我想 运行 预安装 helm hook。
这将 运行 一个使用自定义图像的作业,其入口点将执行以下命令
kubectl create secret generic my-secret --from-literal=foo=bar
可以通过 RBAC 允许此操作吗?
如果是这样,执行此任务需要授予特定 pod/作业的最小权限是什么?
这是可能的,但可能不是最简单的事情。
您可以使用标准 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预装hooks 运行,好吧,在安装其他任何东西之前,这意味着我们需要这些辅助授权相关对象到运行 hook的地方,他们也需要标记为预安装挂钩。默认 deletion policy 它们将保持安装状态,直到图表被卸载。
如果您在部署时拥有所需数据,您可能会发现仅在 Helm 图表中创建 Secret 会更简单。