You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Helm Redis依赖中构建可用的Redis URL

实现Redis URL Secret并供Deployment引用的方案

前提确认

你已经在Charts.yaml中引入了Bitnami Redis依赖,接下来通过以下步骤生成符合要求的Redis URL Secret:


1. 明确Bitnami Redis的内置资源

Bitnami Redis Chart部署后,会在同命名空间生成以下关键资源:

  • 内部服务名:默认格式为<你的Helm发布名>-redis(单实例),集群场景用<发布名>-redis-headless
  • 认证Secret:默认名称为<你的Helm发布名>-redis,单实例下包含redis-password字段;若启用ACL,还会有redis-username(默认值default)
  • 端口:非SSL默认6379,启用SSL后默认6380

2. 生成Redis URL的Secret模板

在你的Chart的templates目录下新建redis-url-secret.yaml文件,内容如下:

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Values.secret.secretName }}
  labels:
    {{- include "your-chart.labels" . | nindent 4 }} # 替换成你Chart的labels模板引用
type: Opaque
data:
  REDIS_URL: {{- /* 读取Redis认证Secret */ -}}
            {{- $redisSecret := lookup "v1" "Secret" .Release.Namespace (printf "%s-redis" .Release.Name) }}
            {{- $password := $redisSecret.data.redis-password | b64dec }}
            {{- /* 确定用户名,默认default,可通过values配置覆盖 */ -}}
            {{- $username := default "default" .Values.redis.auth.username }}
            {{- /* 根据TLS状态选择协议前缀 */ -}}
            {{- $scheme := if .Values.redis.tls.enabled "rediss" "redis" }}
            {{- /* 内部服务主机名 */ -}}
            {{- $host := printf "%s-redis" .Release.Name }}
            {{- /* 确定端口,优先用values配置,否则按TLS状态选默认值 */ -}}
            {{- $port := default (if .Values.redis.tls.enabled "6380" "6379") .Values.redis.service.port }}
            {{- /* 拼接URL并转base64 */ -}}
            {{- printf "%s://%s:%s@%s:%s" $scheme $username $password $host $port | b64enc }}

模板逻辑说明:

  • 用lookup函数直接读取同命名空间内Redis生成的认证Secret,提取密码
  • 根据Redis是否启用TLS自动切换rediss://或redis://协议
  • 用户名支持通过values.yaml的redis.auth.username配置,默认用default
  • 主机名使用Redis的内部服务名,同命名空间内可直接解析访问
  • 端口自动适配TLS状态,也支持通过redis.service.port自定义

3. 配置Deployment引用Secret

确保你的Deployment模板中已经按需求引用该Secret:

env:
- name: REDIS_URL
  valueFrom:
    secretKeyRef:
      name: {{ .Values.secret.secretName }}
      key: REDIS_URL

同时在values.yaml中指定Secret名称:

secret:
  secretName: my-app-redis-url # 替换成你想要的Secret名称

4. 集群/ACL场景适配

如果部署的是Redis集群或启用了ACL:

  • 集群场景:将模板中的$host改为printf "%s-redis-headless" .Release.Name,密码字段改为admin-password(Bitnami Redis集群的默认密码字段)
  • ACL场景:若Redis的用户名存储在Secret的redis-username字段,可将$username改为$redisSecret.data.redis-username | b64dec

注意事项

  • 确保Helm运行时拥有读取同命名空间Secret的权限,集群内部署的Helm通常默认满足该条件
  • 如果给Redis依赖设置了alias(在Charts.yaml的dependencies中添加alias: xxx),需要将模板中<发布名>-redis的后缀改为你设置的别名,比如printf "%s-xxx" .Release.Name

内容的提问来源于stack exchange,提问作者tobias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:16:35