我想运行一个预安装 helm hook。
这将运行一个将使用自定义图像的作业,其入口点将执行以下命令
kubectl create secret generic my-secret --from-literal=foo=bar
可以通过 RBAC 允许此操作吗?
如果是这样,执行此任务需要授予特定 pod/作业的最小权限是多少?
我想运行一个预安装 helm hook。
这将运行一个将使用自定义图像的作业,其入口点将执行以下命令
kubectl create secret generic my-secret --from-literal=foo=bar
可以通过 RBAC 允许此操作吗?
如果是这样,执行此任务需要授予特定 pod/作业的最小权限是多少?
这是可能的,但可能不是最简单的事情。
您可以使用标准的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 会更简单。