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

在AKS服务中将Azure App Configuration暴露为环境变量或ConfigMap

针对AKS中Spring Boot服务使用Azure App Configuration的替代方案

方案一:手动导出配置到ConfigMap(适合静态配置)

这个方案适用于配置不频繁变更的场景,直接将Azure App Configuration的键值对导出为K8s ConfigMap,挂载到Spring Boot应用中使用。

  1. 导出Azure App Config配置到本地文件
    登录Azure CLI后,执行命令导出所有键值对为环境变量格式的文件:
az appconfig kv export --name <你的App Config实例名> --file app-config.env --format key-value

如果需要导出为Spring Boot原生支持的properties格式,改用:

az appconfig kv export --name <你的App Config实例名> --file app-config.properties --format properties
  1. 生成K8s ConfigMap
    基于导出的文件创建ConfigMap:
  • 环境变量格式:
kubectl create configmap app-config --from-env-file=app-config.env --dry-run=client -o yaml > app-config.yaml
  • Properties格式:
kubectl create configmap app-config-props --from-file=application-appconfig.properties=app-config.properties

执行kubectl apply -f app-config.yaml将ConfigMap部署到AKS集群。

  1. 在Spring Boot Deployment中挂载
  • 作为环境变量挂载(Spring Boot会自动将MY_APP_KEY映射为my.app.key):
spec:
  containers:
    - name: spring-boot-app
      image: your-image:tag
      envFrom:
        - configMapRef:
            name: app-config
  • 作为配置文件挂载到Spring Boot自动读取目录:
spec:
  containers:
    - name: spring-boot-app
      image: your-image:tag
      volumeMounts:
        - name: app-config-volume
          mountPath: /workspace/config  # 根据你的镜像实际路径调整
  volumes:
    - name: app-config-volume
      configMap:
        name: app-config-props

方案二:导出为.env文件注入环境变量

如果你的Spring Boot应用允许添加轻量依赖,可以用spring-boot-starter-dotenv读取.env文件,直接将Azure App Config的配置导出为.env文件后挂载或打包到镜像中。

步骤:

  1. 导出.env文件(同方案一第一步)
  2. 可选:在Dockerfile中添加打包命令:
COPY app-config.env /workspace/.env

或者通过ConfigMap以环境变量方式挂载(同方案一的环境变量挂载逻辑)。

方案三:用External Secrets Operator自动同步(适合动态更新配置)

如果配置需要频繁变更,不想手动导出更新,推荐用K8s的External Secrets Operator(ESO)自动同步Azure App Configuration的配置到AKS的ConfigMap/Secret中。

  1. 安装ESO到AKS集群
    执行helm命令完成安装:
helm repo add external-secrets https://charts.external-secrets.io
helm install external-secrets external-secrets/external-secrets --namespace external-secrets --create-namespace
  1. 创建Azure服务主体并授权
    创建一个拥有Azure App Configuration读取权限的服务主体,获取其client ID、client secret和tenant ID,然后在AKS中创建Secret存储这些凭据:
kubectl create secret generic azure-appconfig-creds --from-literal=clientid=<client-id> --from-literal=clientsecret=<client-secret> --from-literal=tenantid=<tenant-id>
  1. 创建SecretStore和ExternalSecret资源
    创建SecretStore关联Azure服务主体:
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
  name: azure-appconfig-store
spec:
  provider:
    azure:
      authType: ServicePrincipal
      tenantId: <tenant-id>
      clientId: <client-id>
      clientSecret:
        name: azure-appconfig-creds
        key: clientsecret
      environment: AzurePublicCloud

创建ExternalSecret同步App Config配置到ConfigMap:

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: app-config-sync
spec:
  secretStoreRef:
    name: azure-appconfig-store
    kind: SecretStore
  target:
    name: app-config-synced
    creationPolicy: Owner
  data:
  - secretKey: MY_APP_SETTING
    remoteRef:
      key: <App Config中的键名>
  # 批量同步指定前缀的所有键
  dataFrom:
  - extract:
      keyPrefix: "config/"

部署后ESO会自动同步配置,后续按方案一的挂载方式接入Spring Boot应用即可。

注意事项

  • 敏感配置(如密码、密钥)不要用ConfigMap,改用K8s Secret,方案一和三均支持导出到Secret。
  • Spring Boot读取环境变量时,会自动将下划线分隔的变量名转换为点分隔的配置项(如MY_DB_URL对应my.db.url)。
  • 如果用ConfigMap挂载配置文件,需确保Spring Boot的spring.config.additional-location包含挂载路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:05:39