如何在Azure Key Vault的External Secrets中将键名横杠替换为下划线
批量将Azure Key Vault密钥的横杠键名替换为下划线导入Kubernetes
Azure Key Vault不允许密钥名称使用下划线,只能用横杠分隔,但Kubernetes生态中很多应用依赖下划线格式的环境变量键名。手动逐个配置secretKey与remoteRef的映射过于繁琐,以下是两种批量转换的方案:
方案1:使用External Secrets Operator的Transformer功能(推荐)
External Secrets Operator(ESO)v0.7.0及以上版本支持通过transformers对拉取的密钥进行批量字段转换,其中stringReplace转换器可以直接替换键名中的字符。
示例配置
apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: akv-batch-secrets spec: secretStoreRef: name: azure-keyvault-store # 替换为你的SecretStore名称 kind: SecretStore target: name: converted-k8s-secret # 最终生成的K8s Secret名称 dataFrom: - extract: key: "*" # 匹配Azure Key Vault中的所有密钥,可按需修改为前缀匹配(如"DB-*") transformers: - stringReplace: source: "-" target: "_" field: "key" # 指定转换密钥的键名字段
说明
extract: key: "*"会批量拉取AKV中所有密钥stringReplace转换器自动将每个密钥的键名中的横杠-替换为下划线_- 若只需转换特定前缀的密钥,将
*改为对应前缀(如DB-*)即可
方案2:脚本批量生成映射配置
如果你的ESO版本不支持Transformer功能,可以通过脚本批量生成手动映射的配置段,避免重复劳动。
示例Shell脚本(依赖Azure CLI)
AKV_NAME="your-key-vault-name" # 替换为你的AKV名称 # 获取AKV中所有密钥名称 KEY_NAMES=$(az keyvault secret list --vault-name $AKV_NAME --query "[].name" -o tsv) # 生成External Secrets的data映射段 echo "data:" for KEY in $KEY_NAMES; do SECRET_KEY=$(echo "$KEY" | tr '-' '_') echo " - secretKey: $SECRET_KEY" echo " remoteRef:" echo " key: $KEY" done
运行脚本后,将输出的data部分复制到你的External Secret YAML中即可。
内容的提问来源于stack exchange,提问作者pluk
相关产品推荐
相关产品推荐

