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

如何从Azure Key Vault创建多字段Kubernetes Secret(AKS环境)

嘿,我来帮你搞定这个需求!要在AKS里创建混合了硬编码值和Azure Key Vault密码的Secret,最靠谱的方式是用External Secrets Operator (ESO)——它专门用来对接外部密钥存储,完美适配你的场景。下面是一步步的实操指南:

前提条件
  • 你已经有运行中的AKS集群,并且集群通过托管身份(Managed Identity)获得了访问目标Azure Key Vault的权限(确保Key Vault的访问策略里给这个MI分配了Secret Get权限)
  • 已经在AKS集群里安装了External Secrets Operator(用Helm安装最方便,比如helm repo add external-secrets https://charts.external-secrets.io然后helm install external-secrets external-secrets/external-secrets)
步骤1:配置SecretStore(建立AKS与Key Vault的连接)

首先创建一个SecretStore资源,它相当于ESO和Key Vault之间的“连接配置”。示例YAML如下,记得替换成你的实际信息:

apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
  name: azure-kv-store
  namespace: default # 换成你要创建Secret的命名空间
spec:
  provider:
    azure:
      vaultUrl: "https://your-keyvault-name.vault.azure.net/" # 你的Key Vault地址
      authType: ManagedIdentity
      managedIdentityClientID: "your-mi-client-id" # 有权限访问Key Vault的托管身份客户端ID

这个配置用托管身份做认证,完全不用硬编码任何凭据,安全又省心。

步骤2:创建ExternalSecret(生成目标Secret)

接下来创建ExternalSecret——这是核心,它会告诉ESO:要生成的Secret长什么样,哪些字段来自Key Vault,哪些是硬编码的。完全贴合你的需求的示例如下:

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: my-external-secret
spec:
  # 指定用刚才创建的SecretStore连接Key Vault
  secretStoreRef:
    name: azure-kv-store
    kind: SecretStore
  # 定义最终生成的Kubernetes Secret的结构
  target:
    name: my-external-secret # 最终Secret的名字,和你要的一致
    template:
      type: Opaque
      metadata:
        # 加上你要求的标签(注意你原示例里是mylable,我保持了拼写一致)
        labels:
          mylable: external
        # 加上你要求的注解
        annotations:
          myannotation: external
      # 混合硬编码字段和Key Vault拉取的字段
      data:
        name: "credentials" # 硬编码的name字段
        url: "https://example.com" # 硬编码的url字段
        username: "user" # 硬编码的username字段
        password: "{{ .passwordFromKV }}" # 引用从Key Vault拉取的密码
  # 定义从Key Vault拉取的密钥映射
  data:
  - secretKey: passwordFromKV
    remoteRef:
      key: your-password-key-name # 替换成你Key Vault里存储密码的密钥名称

重点说明:

  • target.template完全复刻了你要的Secret格式,包括标签、注解和所有字段
  • data部分把Key Vault里的密码密钥映射成passwordFromKV,然后在模板里用双大括号引用它,ESO会自动替换成真实的密码值
  • 当Key Vault里的密码更新时,ESO会自动同步到AKS的Secret里,不用手动操作
步骤3:验证结果

创建完上面两个资源后,等个几十秒让ESO同步,然后用这个命令查看生成的Secret:

kubectl get secret my-external-secret -o yaml

你会看到生成的Secret完全符合你给出的目标格式,password字段已经自动填充了Key Vault里的内容。

备选方案:手动创建(不推荐)

如果你暂时不想用Operator,也可以用Azure CLI手动拉取密码然后创建Secret,但这种方式不能自动同步Key Vault的更新,适合临时场景:

# 先从Key Vault拉取密码
PASSWORD=$(az keyvault secret show --name your-password-key-name --vault-name your-keyvault-name --query value -o tsv)

# 创建带硬编码字段、标签和注解的Secret
kubectl create secret generic my-external-secret \
  --from-literal=name=credentials \
  --from-literal=url=https://example.com \
  --from-literal=username=user \
  --from-literal=password=$PASSWORD \
  --annotation myannotation=external \
  --label mylable=external

但还是强烈推荐用ESO,毕竟自动同步才是生产环境的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:50:22