我正在使用 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 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 配合得很好。
如果您希望在初始安装时生成一个值,然后不再更改它,您应该能够利用
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
会留下秘密,但删除策略将确保您在下次运行时不会发生冲突。
您可以使用不可变的秘密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 }}