在我正在处理的舵图的
Charts.yaml
中,我有一个 Redis 依赖项
dependencies:
- name: redis
version: "18.4.0"
repository: https://charts.bitnami.com/bitnami
现在,我想构建一个 Redis URL 用作其他资源的秘密。
因此,我希望能够在我的部署中设置类似的内容
env:
- name: REDIS_URL
valueFrom:
secretKeyRef:
name: {{ .Values.secret.secretName }}
key: REDIS_URL
我现在的问题是,如何获取 Redis URL,使其看起来像
REDIS_URL="rediss://<user_name>:<user_pw>@<redis host>:<port>"
或
REDIS_URL="redis://<user_name>:<user_pw>@<redis host>:<port>"
理想情况下,它是集群内和同一命名空间内的连接。
Helm 没有一个好的通用方法将计算值从依赖关系图传递到其父级。通常,最好的答案是检查依赖关系图并查看它正在创建什么。
对于 bitnami/redis 图表,您可以发现 主要服务 最终被命名为
{{ .Release.Name }}-redis-master
;它的Secret只是{{ .Releae.Name }}-redis
,并且只有一个密钥redis-password
;并且图表中的任何位置都没有特定的用户名设置。 Redis 的“默认密码身份验证模式”使用单个共享密码。正如容器环境中的典型情况一样,该端口始终是标准 Redis 端口 6379。
但是,您不能直接将一个 Secret 值合并到另一个 Secret 中,并且尝试从 Helm 图表代码读回 Secret 通常不是一个好的做法。如果您只是想以这种格式将 URL 放入您的应用程序中,我会将其构造为一组环境变量,这些变量可以从 Secrets 动态设置或连接:
{{- define "myapp.env.redis" -}}
- name: REDIS_HOST
value: {{ .Release.Name }}-redis-master
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Release.Name }}-redis
key: redis-password
- name: REDIS_URL
value: redis://redis:$(REDIS_PASSWORD)@$(REDIS_HOST):6379/0
{{- end -}}
env:
{{ include "myapp.env.redis | indent 2 }}
请注意,Redis 图表有几种不同的方法来设置该 Secret。例如,您可以尝试读取
.Values.redis.auth.password
,但不一定已设置。