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

在 Azure Spring Apps 中配置托管的 Spring Cloud Config Server

注意

Azure Spring Apps 是 Azure Spring Cloud 服务的新名称。 虽然该服务有新名称,但一些地方仍会使用旧名称,我们仍在更新屏幕截图、视频和图形等资产。

本文适用于:✔️ Java ✔️ C#

本文适用于: ✔️标准消耗和专用(预览版)✔️基本/标准 ❌ 企业

本文介绍如何在 Azure Spring Apps 服务中配置托管的 Spring Cloud Config Server。

Spring Cloud Config Server 为分布式系统中的外部化配置提供了服务器和客户端支持。 Config Server 实例提供了一个中心位置来管理所有环境中应用程序的外部属性。 有关详细信息,请参阅 Spring Cloud Config 文档

注意

若要在标准消耗和专用计划中使用配置服务器,必须首先启用它。 有关详细信息,请参阅 Azure Spring Apps 中的“启用和禁用 Spring Cloud 配置服务器”。

先决条件

限制

在后端上使用配置服务器时存在一些限制。 以下属性将自动注入到应用程序环境,以访问“Config Server”和“服务发现”。 如果你同时从配置服务器文件配置了这些属性,可能会遇到冲突和意外的行为。

eureka.client.service-url.defaultZone
eureka.client.tls.keystore
eureka.instance.preferIpAddress
eureka.instance.instance-id
server.port
spring.cloud.config.tls.keystore
spring.config.import
spring.application.name
spring.jmx.enabled
management.endpoints.jmx.exposure.include

注意

请不要将这些属性放置在 Config Server 应用程序文件中。

创建配置服务器文件

Azure Spring Apps 支持使用 Azure DevOps Server、GitHub、GitLab 和 Bitbucket 来存储 Config Server 文件。 存储库准备就绪后,便可以创建配置文件并将其存储在库里。

一些可配置属性仅适用于某些类型。 以下部分介绍每种存储库类型的属性。

注意

如果你未指定,Config Server 会将 master(在 Git 上)作为默认标签。 但 GitHub 最近已将默认分支从 master 更改为 main。 为避免 Azure Spring Apps Config Server 失败,请务必在使用 GitHub 设置 Config Server 时注意默认标签,尤其是对于新创建的存储库。

公共存储库

使用公共存储库时,可配置属性的受限程度比专用存储库更高。

下表列出了可用于设置公共 Git 存储库的可配置属性。

注意

使用连字符 (-) 分隔单词是目前唯一受支持的命名约定。 例如,可使用“default-label”,但不能使用“defaultLabel” 。

properties 必选 Feature
uri 用作 Config Server 后端的 Git 存储库的 URI。 应以 http://https://git@ssh:// 开头。
default-label Git 存储库的默认标签。 应为存储库的分支名称、标记名称或提交 ID。
search-paths 用于搜索 Git 存储库子目录的字符串数组。

使用 SSH 身份验证的专用存储库

下表列出了用于设置使用 SSH 的专用 Git 存储库的可配置属性。

注意

使用连字符 (-) 分隔单词是目前唯一受支持的命名约定。 例如,可使用“default-label”,但不能使用“defaultLabel” 。

properties 必选 Feature
uri 用作 Config Server 后端的 Git 存储库的 URI。 应以 http://https://git@ssh:// 开头。
default-label Git 存储库的默认标签。 应为存储库的分支名称、标记名称或提交 ID。
search-paths 用于搜索 Git 存储库子目录的字符串数组。
private-key 用于访问 Git 存储库的 SSH 私钥。 URI 以 git@ssh:// 开头时需要。
host-key Git 存储库服务器的主机密钥。 不应包含 host-key-algorithm 所涵盖的算法前缀。
host-key-algorithm 主机密钥算法。 应为 ssh-dss、ssh-rsa、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384 或 ecdsa-sha2-nistp521。 仅当存在 host-key 时,才是必需的。
strict-host-key-checking 指示在使用专用 host-key 时 Config Server 实例是否无法启动。 应为 true(默认值)或 false 。

使用基本身份验证的专用存储库

下表列出了用于设置使用基本身份验证的专用 Git 存储库的可配置属性。

注意

使用连字符 (-) 分隔单词是目前唯一受支持的命名约定。 例如,可使用“default-label”,但不能使用“defaultLabel” 。

properties 必选 Feature
uri 用作 Config Server 后端的 Git 存储库的 URI。 应以 http://https://git@ssh:// 开头。
default-label Git 存储库的默认标签。 应为存储库的分支名称、标记名称或提交 ID。
search-paths 用于搜索 Git 存储库子目录的字符串数组。
username 用于访问 Git 存储库服务器的用户名。 Git 存储库服务器支持 HTTP 基本身份验证时需要。
password 用于访问 Git 存储库服务器的密码或个人访问令牌。 Git 存储库服务器支持 HTTP 基本身份验证时需要。

注意

许多 Git 存储库服务器都支持对 HTTP 基本身份验证使用令牌,而不支持使用密码。 某些存储库允许令牌无限期保留。 但是,某些 Git 存储库服务器(包括 Azure DevOps Server)会在数小时后强制令牌过期。 导致令牌过期的存储库不应将基于令牌的身份验证用于 Azure Spring Apps。 如果你使用此类令牌,请记得在令牌过期之前更新它。

GitHub 已删除对密码身份验证的支持,因此你需要使用个人访问令牌,而不是 GitHub 的密码身份验证。 有关详细信息,请参阅 Git 操作的令牌身份验证要求

其他 Git 存储库

下表列出了可用于设置具有模式的 Git 存储库的可配置属性。

注意

使用连字符 (-) 分隔单词是目前唯一受支持的命名约定。 例如,可使用“default-label”,但不能使用“defaultLabel” 。

properties 必选 Feature
repos 包含具有给定名称的 Git 存储库的设置的图。
repos."uri" repos 上选择“是” 用作 Config Server 后端的 Git 存储库的 URI。 应以 http://https://git@ssh:// 开头。
repos."name" repos 上选择“是” 用于标识存储库的名称;例如 team-A 或 team-B。 仅当存在 repos 时,才是必需的。
repos."pattern" 用于匹配应用程序名称的字符串数组。 对于每种模式,使用带有通配符的 {application}/{profile} 格式。
repos."default-label" Git 存储库的默认标签。 应为存储库的分支名称、标记名称或提交 IOD。
repos."search-paths" 用于搜索 Git 存储库子目录的字符串数组。
repos."username" 用于访问 Git 存储库服务器的用户名。 Git 存储库服务器支持 HTTP 基本身份验证时需要。
repos."password" 用于访问 Git 存储库服务器的密码或个人访问令牌。 Git 存储库服务器支持 HTTP 基本身份验证时需要。
repos."private-key" 用于访问 Git 存储库的 SSH 私钥。 URI 以 git@ssh:// 开头时需要。
repos."host-key" Git 存储库服务器的主机密钥。 不应包含 host-key-algorithm 所涵盖的算法前缀。
repos."host-key-algorithm" 主机密钥算法。 应为 ssh-dss、ssh-rsa、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384 或 ecdsa-sha2-nistp521。 仅当存在 host-key 时,才是必需的。
repos."strict-host-key-checking" 指示在使用专用 host-key 时 Config Server 实例是否无法启动。 应为 true(默认值)或 false 。

下表显示了一些使用可选额外存储库配置服务的模式示例。 有关详细信息,请参阅 Spring 文档的“额外存储库”部分和“模式匹配和多个存储库”部分

模式 说明
test-config-server-app-0/* 模式和存储库 URI 会匹配名为 test-config-server-app-0(无论具有什么配置文件)的 Spring Boot 应用程序。
test-config-server-app-1/dev 模式和存储库 URI 会匹配名为 test-config-server-app-1(具有开发配置文件)的 Spring Boot 应用程序。
test-config-server-app-2/prod 模式和存储库 URI 会匹配名为 test-config-server-app-2(具有 prod 配置文件)的 Spring Boot 应用程序。

Screenshot of Azure portal showing the Config Server page with the Patterns column of the Additional repositories table highlighted.

将 Config Server 存储库附加到 Azure Spring Apps

将配置文件保存到存储库中后,请使用以下步骤将 Azure Spring Apps 连接到该存储库。

  1. 登录 Azure 门户

  2. 转到 Azure Spring Apps 的“概述”页。

  3. 在左侧导航窗格中选择“Config Server”。

  4. 在“默认存储库”部分,将“URI”设置为 https://github.com/Azure-Samples/piggymetrics-config

  5. 选择“验证”。

    Screenshot of Azure portal showing the Config Server page.

  6. 完成验证后,选择“应用”以保存更改。

    Screenshot of Azure portal showing Config Server page with Apply button highlighted.

更新配置可能需要几分钟。 配置完成后,会收到通知。

将存储库信息直接输入到 Azure 门户

可以输入默认存储库的存储库信息,也可以输入额外存储库的存储库信息。

默认存储库

使用本部分中的步骤输入公共或专用存储库的存储库信息。

  • 公共存储库:在“默认存储库”部分的“Uri”框中粘贴存储库 URI 。 为“标签”设置输入“配置”。 确保“身份验证”设置为“公共”,然后选择“应用”。

  • 专用存储库:Azure Spring Apps 支持基本的基于密码/令牌的身份验证和 SSH。

    • 基本身份验证:在“默认存储库”部分的“URI”框中,粘贴存储库 URI,然后选择“身份验证”下的设置,打开“编辑身份验证”窗格。 在“身份验证类型”下拉列表中,选择“HTTP 基本”,然后输入你的用户名和密码/令牌以授权访问 Azure Spring Apps。 选择“确定”,然后选择“应用”完成配置服务器实例的设置 。

    Screenshot of the Default repository section showing authentication settings for Basic authentication.

    注意

    许多 Git 存储库服务器都支持对 HTTP 基本身份验证使用令牌,而不支持使用密码。 某些存储库允许令牌无限期保留。 但是,某些 Git 存储库服务器(包括 Azure DevOps Server)会在数小时后强制令牌过期。 导致令牌过期的存储库不应将基于令牌的身份验证用于 Azure Spring Apps。 如果你使用此类令牌,请记得在令牌过期之前更新它。

    GitHub 已删除对密码身份验证的支持,因此你需要使用个人访问令牌,而不是 GitHub 的密码身份验证。 有关详细信息,请参阅 Git 操作的令牌身份验证要求

    • SSH:在“默认存储库”部分的“URI”框中,粘贴存储库 URI,然后选择“身份验证”下的设置,打开“编辑身份验证”窗格。 在“编辑身份验证”窗格中的“身份验证类型”下拉列表中,选择“SSH”,然后输入私钥。 (可选)指定主机密钥和主机密钥算法。 在 Config Server 存储库中包含公钥。 选择“确定”,然后选择“应用”完成配置服务器实例的设置 。

    Screenshot of the Default repository section showing authentication settings for SSH authentication.

额外存储库

如果要使用可选的“额外存储库”来配置服务,请像为默认存储库所做的那样指定“URI”和“身份验证”设置。 请确保为模式包含“名称”设置,然后选择“应用”以将其附加到实例。

将存储库信息输入 YAML 文件

如果已使用存储库设置编写了 YAML 文件,则可以将该文件直接从本地计算机导入到 Azure Spring Apps。 以下示例显示使用基本身份验证的专用存储库的简单 YAML 文件。

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/azure-spring-apps-samples-pr/config-server-repository.git
          username: <username>
          password: <password/token>

单击“导入设置”按钮,然后从项目目录中选择 YAML 文件。 选择“导入” 。

Screenshot of the Config Server Import settings pane.

“通知”将显示 async 操作。 Config Server 应在 1-2 分钟后报告成功。 YAML 文件中的信息显示在 Azure 门户中。 选择“应用”以完成导入。

将 Azure Repos 用于 Azure Spring Apps 配置

Azure Spring Apps 可以访问公开、由 SSH 保护或使用 HTTP 基本身份验证保护的 Git 存储库。 HTTP 基本身份验证是使用 Azure Repos 创建和管理存储库最简单的选项。

获取存储库 URL 和凭据

使用以下步骤获取存储库 URL 和凭据。

  1. 在项目的 Azure Repos 门户中,选择“克隆”按钮:

  2. 从文本框中复制克隆 URL。 此 URI 通常采用以下格式:

    https://<organization name>@dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    删除 https:// 后和 dev.azure.com 之前的所有内容,包括 @ 符号。 生成的 URL 应采用以下格式:

    https://dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    保存此 URL 以便在下一部分中使用。

  3. 选择“生成 Git 凭据”以显示用户名和密码,应保存该用户名和密码,以供下一部分使用。

配置 Azure Spring Apps 以访问 Git 存储库

  1. 登录 Azure 门户

  2. 转到 Azure Spring Apps 的“概述”页。

  3. 选择要配置的服务。

  4. 在服务页的左侧窗格中的“设置”下,选择“Config Server”选项卡。配置创建的存储库,如下所示:

    • 添加在上一部分保存的存储库 URI。
    • 选择“身份验证”下的设置,打开“编辑身份验证”窗格。
    • 对于“身份验证类型”,请选择“HTTP 基本”。
    • 对于“用户名”,请指定在上一部分中保存的用户名。
    • 对于“密码”,请指定在上一部分中保存的密码。
    • 选择“确定”,然后等待操作完成。

    Screenshot of repository configuration settings.

删除配置

在“Config Server”选项卡上选择“重置”以擦除现有设置。 如果你希望将 Config Server 实例连接到另一个源(例如,从 GitHub 移到 Azure DevOps Server 时),请删除 Config Server 设置。

Config Server 刷新

更改属性时,必须通知使用这些属性的服务,然后才能进行更改。 Spring Cloud Config Server 的默认解决方案是手动触发刷新事件。如果有许多应用实例,这可能不可行。 有关详细信息,请参阅集中式配置

可以改为让配置客户端根据刷新间隔来轮询更改,从而自动刷新 Config Server 中的值。 使用以下步骤自动刷新 Config Server 中的值。

  1. 注册计划任务以按给定的间隔刷新上下文,如以下示例所示。

    @ConditionalOnBean({RefreshEndpoint.class})
    @Configuration
    @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class})
    @EnableScheduling
    public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer {
        @Value("${spring.cloud.config.refresh-interval:60}")
        private long refreshInterval;
        @Value("${spring.cloud.config.auto-refresh:false}")
        private boolean autoRefresh;
        private RefreshEndpoint refreshEndpoint;
        public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) {
            this.refreshEndpoint = refreshEndpoint;
        }
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            if (autoRefresh) {
                // set minimal refresh interval to 5 seconds
                refreshInterval = Math.max(refreshInterval, 5);
                scheduledTaskRegistrar.addFixedRateTask(() -> refreshEndpoint.refresh(), refreshInterval * 1000);
            }
        }
    }
    
  2. 在 application.yml 文件中启用自动刷新并设置适当的刷新间隔。 在以下示例中,客户端每隔 60 秒钟轮询一次配置更改,这是可为刷新间隔设置的最小值。

    在默认情况下,自动刷新设置为“false”,刷新时间间隔设置为“60 秒”。

    spring:
        cloud:
             config:
              auto-refresh: true
              refresh-interval: 60
    management:
        endpoints:
             web:
              exposure:
                include:
                  - refresh
    
  3. 在代码中添加 @RefreshScope。 在以下示例中,变量 connectTimeout 每隔 60 秒钟自动刷新一次。

    @RestController
    @RefreshScope
    public class HelloController {
        @Value("${timeout:4000}")
        private String connectTimeout;
    }
    

有关详细信息,请参阅 config-client-polling 示例。

后续步骤

本文介绍了如何启用和配置 Spring Cloud Config Server 实例。 若要详细了解如何管理应用程序,请参阅在 Azure Spring Apps 中缩放应用程序