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

借助Azure Service Operator,如何在Helm中获取Azure SQL连接串并生成Secret?

获取Azure SQL Database连接串并传递给消费服务的方案

一、通过Azure Service Operator(ASO)获取SQL DB连接串

ASO部署Azure SQL Database时,会自动将数据库的管理凭据(包括连接串)生成为Kubernetes Secret,无需手动提取:

  • 确认你的SqlDatabase资源配置中,已指定administratorLogin,并通过administratorLoginPassword引用Secret或让ASO自动生成密码(ASO会默认创建包含连接串的Secret)。
  • ASO生成的Secret命名通常遵循<sql-db-resource-name>-admin规则,你也可以在SqlDatabase的spec中通过secretName字段自定义Secret名称。
  • 验证Secret内容:执行kubectl get secret <secret-name> -o yaml,其中data字段下的sqlserver-connection-string就是Base64编码的数据库连接串。

二、传递连接串给消费服务的具体方案

方案1:在Helm模板中基于ASO生成的Secret创建专属Secret

如果消费服务需要自定义Secret的键名、格式,或需要组合多个凭据,可以在Helm模板中定义新的Secret:

# templates/app-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: {{ .Values.app.secretName }}
type: Opaque
data:
  DB_CONNECTION_STRING: {{ (lookup "v1" "Secret" .Release.Namespace .Values.sql.dbSecretName).data.sqlserver-connection-string }}

接着在消费服务的Deployment中引用该Secret:

# templates/app-deployment.yaml
containers:
- name: {{ .Values.app.containerName }}
  env:
  - name: DATABASE_URL
    valueFrom:
      secretKeyRef:
        name: {{ .Values.app.secretName }}
        key: DB_CONNECTION_STRING

优势:适配服务的环境变量需求,统一管理服务的Secret命名;
注意事项:需确保ASO生成的Secret已存在,否则Helm的lookup函数会失败。可以通过helm install --wait等待ASO资源就绪,或给服务Deployment添加Helm hook延迟部署:

metadata:
  annotations:
    "helm.sh/hook": post-install,post-upgrade
    "helm.sh/hook-weight": "10"

方案2:消费服务直接引用ASO生成的Secret

无需额外创建Secret,直接在服务Deployment中引用ASO自动生成的Secret:

# templates/app-deployment.yaml
containers:
- name: {{ .Values.app.containerName }}
  env:
  - name: DATABASE_URL
    valueFrom:
      secretKeyRef:
        name: <aso-generated-secret-name>
        key: sqlserver-connection-string

优势:减少资源冗余,避免Helm模板的依赖时序问题;
局限:如果ASO的Secret命名或键名规则变更,需同步修改服务配置,灵活性较低。

方案3:基于输入参数手动创建Secret(不推荐)

如果必须基于Helm输入创建Secret,你可以在values.yaml中提供连接串(需注意敏感信息的安全),然后在模板中生成Secret:

# templates/manual-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: {{ .Values.app.secretName }}
type: Opaque
data:
  DB_CONNECTION_STRING: {{ .Values.sql.connectionString | b64enc }}

不推荐原因:连接串属于敏感信息,直接在values.yaml中明文存储或传递存在安全风险,且无法利用ASO自动管理凭据的能力。

三、方案选择建议

  • 若服务需要自定义Secret格式、组合多凭据,或需统一Secret命名规范 → 选方案1;
  • 若追求部署简洁,且ASO生成的Secret直接满足服务需求 → 选方案2;
  • 避免手动基于输入创建Secret,优先利用ASO自动生成的凭据,减少安全风险和维护成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:01:13