你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 Azure 容器应用中连接到托管 Config Server for Spring

Config Server for Spring 提供了集中位置来向多个应用程序提供配置数据。 本文介绍如何将 Azure 容器应用中托管的应用连接到 Java Config Server for Spring 实例。

Config Server for Spring Java 组件使用 GitHub 存储库作为配置设置的源。 配置值通过组件和容器应用之间的绑定提供给容器应用。 当配置服务器中的值发生更改时,它们会自动流向应用程序,而无需重新编译或重新部署应用程序。

在本教程中,学习:

  • 创建 Config Server for Spring Java 组件
  • 将 Config Server for Spring 绑定到容器应用
  • 在将配置服务器连接到应用程序前后观察配置值
  • 使用对称密钥加密和解密配置值

重要

本教程使用的服务可能会影响 Azure 帐单。 如果你决定按部就班,请确保删除本文中特别推荐的资源,以避免意外计费。

先决条件

若要完成此项目,需要满足以下条件:

要求 说明
Azure 帐户 需要一个有效的订阅。 如果没有帐户,可以免费创建一个帐户
Azure CLI 安装 Azure CLI

注意事项

在 Azure 容器应用中的 Config Server for Spring 中运行时,请注意以下详细信息:

说明
范围 Config Server for Spring 的运行环境与连接的容器应用相同。
缩放 为了保持单个事实来源,Config Server for Spring 不进行缩放。 缩放属性 minReplicasmaxReplicas 都设置为 1
资源 Config Server for Spring 的容器资源分配是固定的,CPU 核心数为 0.5,内存大小为 1Gi。
定价 Config Server for Spring 计费低于基于使用量的定价。 托管 Java 组件消耗的资源按活动/空闲费率计费。 可以删除不再使用的组件以停止计费。
Binding 容器应用通过绑定连接到 Config Server for Spring。 绑定将配置注入容器应用环境变量。 建立绑定后,容器应用可以从环境变量中读取配置值。

安装

在开始使用 Config Server for Spring 之前,首先需要创建所需的资源。

执行以下命令来创建资源组和容器应用环境。

  1. 创建变量来支持应用程序配置。 这些值是为了本课程的目的而向你提供的。

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export JAVA_COMPONENT_NAME=configserver
    export APP_NAME=my-config-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-config-client:latest"
    export URI="https://github.com/Azure-Samples/azure-spring-cloud-config-java-aca.git"
    
    变量 说明
    LOCATION 创建容器应用和 Java 组件的 Azure 区域位置。
    ENVIRONMENT 演示应用程序的 Azure 容器应用环境名称。
    RESOURCE_GROUP 演示应用程序的 Azure 资源组名称。
    JAVA_COMPONENT_NAME 为容器应用创建的 Java 组件的名称。 在本例中,你将创建 Config Server for Spring Java 组件。
    IMAGE 容器应用中使用的容器映像。
    URI 可以将 URI 替换为 git 存储库 URL(如果专用),请添加相关的身份验证配置,例如 spring.cloud.config.server.git.usernamespring.cloud.config.server.git.password
  2. 通过 Azure CLI 登录 Azure。

    az login
    
  3. 创建资源组。

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 创建容器应用环境。

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

此环境用于托管 Config Server for Spring Java 组件和容器应用。

创建 Config Server for Spring Java 组件

有了容器应用环境后,可创建容器应用并将其绑定到 Config Server for Spring Java 组件。 绑定容器应用时,配置值会自动从 Config Server 组件同步到应用程序。

  1. 创建 Config Server for Spring Java 组件

    az containerapp env java-component config-server-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --min-replicas 1 \
      --max-replicas 1 \
      --configuration spring.cloud.config.server.git.uri=$URI
    
  2. 更新 Config Server for Spring Java 组件

    az containerapp env java-component config-server-for-spring update \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --min-replicas 2 \
      --max-replicas 2 \
      --configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60
    

    在这里,你将告诉组件在何处查找通过 uri 属性保存配置信息的存储库。 refresh-rate 属性告知容器应用检查 git 存储库中的更改的频率。

将容器应用绑定到 Config Server for Spring Java 组件

  1. 创建使用配置数据的容器应用。

    az containerapp create \
      --name $APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT \
      --image $IMAGE \
      --min-replicas 1 \
      --max-replicas 1 \
      --ingress external \
      --target-port 8080 \
      --query properties.configuration.ingress.fqdn
    

    此命令返回使用配置数据的容器应用的 URL。 将 URL 复制到文本编辑器,以便在下一步中使用。

    如果在浏览器中访问应用,则返回的 connectTimeout 值是 0 的默认值。

  2. 绑定到 Config Server for Spring。

    创建容器应用和 Config Server 后,将它们与 update 命令一起绑定到容器应用。

    az containerapp update \
      --name $APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --bind $JAVA_COMPONENT_NAME
    

    --bind $JAVA_COMPONENT_NAME 参数在容器应用和配置组件之间创建链接。

容器应用和 Config Server 组件绑定在一起后,配置更改会自动同步到容器应用。

再次访问应用的 URL 时,connectTimeout 的值现在为 10000。 此值来自 $URI 变量中最初设置为配置组件源的 git 存储库。 具体而言,此值是从存储库的 application.yml 文件中的 connectionTimeout 属性中提取的

绑定请求将配置设置以环境变量的形式注入应用程序。 从配置服务器提取配置设置时,这些值现在可提供给应用程序代码使用。

在这种情况下,应用程序可使用以下环境变量:

SPRING_CLOUD_CONFIG_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CLOUD_CONFIG_COMPONENT_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CONFIG_IMPORT=optional:configserver:$SPRING_CLOUD_CONFIG_URI

如果要自定义自己的 SPRING_CONFIG_IMPORT,可以引用环境变量(例如 SPRING_CLOUD_CONFIG_COMPONENT_URI),然后可以通过命令行参数(例如 Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true)替代。

还可从应用程序中移除绑定。

(可选)从 Config Server for Spring Java 组件取消绑定容器应用

若要从容器应用中移除绑定,请使用 --unbind 选项。

az containerapp update \
  --name $APP_NAME \
  --unbind $JAVA_COMPONENT_NAME \
  --resource-group $RESOURCE_GROUP

再次访问应用的 URL 时,connectTimeout 的值变回 0

清理资源

本教程中创建的资源会影响 Azure 帐单。 如果不打算长期使用这些服务,请运行以下命令来删除本教程中创建的所有内容。

az group delete \
  --resource-group $RESOURCE_GROUP

后续步骤