如何在 Helm 和 ArgoCD 中“重用”随机生成的密码?

问题描述 投票:0回答:3

我正在使用 ArgoCD 来管理我的应用程序部署。我的应用程序是 Helm 图表,我使用“randAlphaNum”生成随机密码。不幸的是,每次我同步应用程序时都会生成一个新密码。所以我尝试使用这样的东西:

apiVersion: v1
kind: Secret
metadata:
  name: mypass
type: Opaque
stringData:
{{ if .Release.IsInstall }}
  pw: {{ randAlphaNum 32 | quote }}
{{ end }}

但是当我检查“App Diff”时,我看到 ArgoCD 也更新了“pw”。所以我尝试使用 Helm 的“查找”功能,但我最终发现 ArgoCD atm 不支持它(参见 https://github.com/argoproj/argo-cd/issues/5202)。所以我想知道是否有其他解决方案可以使用,或者 ArgoCD 中是否有支持的 Helm 功能列表?!

kubernetes-helm argocd
3个回答
2
投票

也许另一种生成密码的方法可以提供帮助 - 尝试Kubernetes Secret Generator

我使用此示例为图表 bitnami/postgresql 生成身份验证密钥:

apiVersion: secretgenerator.mittwald.de/v1alpha1
kind: StringSecret
metadata:
  name: postgresql-auth-secret
spec:
  forceRegenerate: false
  fields:
    - fieldName: "password"
      encoding: "base64"
      length: "30"
    - fieldName: "postgres-password"
      encoding: "base64"
      length: "30"

它似乎也与 ArgoCD 配合得很好。


0
投票

如果您希望在初始安装时生成一个值,然后不再更改它,您应该能够利用

pre-install
挂钩来确保它仅在第一次使用:

apiVersion: v1
kind: Secret
metadata:
  name: mypass
  annotations:
    "helm.sh/hook": "pre-install"
    "helm.sh/hook-delete-policy": "before-hook-creation"
type: Opaque
stringData:
  pw: {{ randAlphaNum 32 | quote }}

这里需要注意的是,通过使用钩子,资源将不再由 Helm 管理,因此运行

helm uninstall
会留下秘密,但删除策略将确保您在下次运行时不会发生冲突。


0
投票

您可以使用不可变的秘密https://kubernetes.io/docs/concepts/configuration/secret/#secret-immutable

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-database-password
  namespace: {{ .Release.Namespace }}
  labels:
    app: {{ .Release.Name }}-database
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-delete-policy": before-hook-creation
type: Opaque
immutable: true
data:
  db-password: {{ randAlphaNum 20 | b64enc | quote }}
© www.soinside.com 2019 - 2024. All rights reserved.