Настройка управляемого Spring Cloud Config Server в Azure Spring Apps

Примечание.

Azure Spring Apps — это новое название службы Azure Spring Cloud. Старое название будет еще некоторое время встречаться в наших материалах, пока мы не обновим ресурсы, такие как снимки экрана, видео и схемы.

Эта статья применима к: ✔️ Java ✔️ C#

Эта статья относится к: ✔️ стандартное потребление и выделенная (предварительная версия) ✔️ Basic/Standard ❌ Enterprise

В этой статье показано, как настроить управляемый Spring Cloud Config Server в службе Azure Spring Apps.

Spring Cloud Config Server предоставляет поддержку на стороне сервера и клиента для внешней конфигурации в распределенной системе. Экземпляр Config Server обеспечивает централизованное управление внешними свойствами приложений во всех средах. Дополнительные сведения см. в документации по конфигурации Spring Cloud.

Примечание.

Чтобы использовать сервер конфигурации в стандартном плане потребления и выделенного плана, необходимо сначала включить его. Дополнительные сведения см. в статье "Включение и отключение сервера конфигурации Spring Cloud" в Azure Spring Apps.

Необходимые компоненты

Ограничение

При использовании сервера конфигурации с серверной частью Git существуют некоторые ограничения. Следующие свойства автоматически внедряются в среду приложения для доступа к серверу конфигурации и обнаружению служб. Настроив эти свойства из файлов сервера конфигурации, вы можете столкнуться с конфликтами и непредвиденным поведением.

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 для хранения файлов сервера конфигурации. Когда репозиторий готов, вы можете создать файлы конфигурации и сохранить их там.

Некоторые настраиваемые свойства доступны только для определенных типов. В следующих разделах описаны свойства для каждого типа репозитория.

Примечание.

Сервер конфигурации принимает master (на Git) метку по умолчанию, если не указать ее. Однако GitHub недавно изменил ветвь по умолчанию на mastermain. Чтобы избежать сбоя Azure Spring Apps Config Server, обратите особое внимание на метку по умолчанию при настройке Config Server с помощью GitHub, особенно для вновь созданных репозиториев.

Общедоступный репозиторий

При использовании общедоступный репозиторий настраиваемые свойства являются более ограниченными, чем с частным репозиторием.

В следующей таблице перечислены настраиваемые свойства, которые можно использовать для настройки общедоступного репозитория Git.

Примечание.

Использование дефиса (-) для разделения слов является единственным поддерживаемым в настоящее время соглашением об именовании. Например, вы можете использовать default-label, но не defaultLabel.

Свойство Обязательное поле Компонент
uri Да URI репозитория Git, который используется в качестве серверной части сервера конфигурации. Должно начинаться с http://, git@https://или ssh://.
default-label No Метка по умолчанию репозитория Git. Должно быть имя ветви, имя тега или ИД фиксации репозитория.
search-paths No Массив строк, используемых для поиска в подкаталогах репозитория Git.

Частный репозиторий с проверкой подлинности SSH

В следующей таблице перечислены настраиваемые свойства, которые можно использовать для настройки частного репозитория Git с помощью SSH.

Примечание.

Использование дефиса (-) для разделения слов является единственным поддерживаемым в настоящее время соглашением об именовании. Например, вы можете использовать default-label, но не defaultLabel.

Свойство Обязательное поле Компонент
uri Да URI репозитория Git, используемый в качестве серверной части сервера конфигурации. Должно начинаться с http://, git@https://или ssh://.
default-label No Метка по умолчанию репозитория Git. Должно быть имя ветви, имя тега или ИД фиксации репозитория.
search-paths No Массив строк, используемых для поиска в подкаталогах репозитория Git.
private-key No Закрытый ключ SSH для доступа к репозиторию Git. Обязательный при запуске git@ URI или ssh://.
host-key No Ключ узла сервера репозитория Git. Не следует включать префикс алгоритма, как описано host-key-algorithm.
host-key-algorithm No Алгоритм ключа узла. Должен быть ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 или ecdsa-sha2-nistp521. Требуется только в том случае, если host-key существует.
strict-host-key-checking No Указывает, не запускается ли экземпляр сервера конфигурации при использовании частного host-key. Должно быть true (значение по умолчанию) или false.

Частный репозиторий с обычной проверкой подлинности

В следующей таблице перечислены настраиваемые свойства, которые можно использовать для настройки частного репозитория Git с базовой проверкой подлинности.

Примечание.

Использование дефиса (-) для разделения слов является единственным поддерживаемым в настоящее время соглашением об именовании. Например, используйте default-label, а не defaultLabel.

Свойство Обязательное поле Компонент
uri Да URI репозитория Git, который используется в качестве серверной части сервера конфигурации. Должно начинаться с http://, git@https://или ssh://.
default-label No Метка по умолчанию репозитория Git. Должно быть имя ветви, имя тега или идентификатор фиксации репозитория.
search-paths No Массив строк, используемых для поиска в подкаталогах репозитория Git.
username No Имя пользователя, используемое для доступа к серверу репозитория Git. Требуется, если сервер репозитория Git поддерживает обычную проверку подлинности HTTP.
password No Пароль или личный маркер доступа, используемый для доступа к серверу репозитория Git. Требуется, если сервер репозитория Git поддерживает обычную проверку подлинности HTTP.

Примечание.

Многие серверы репозитория Git поддерживают использование маркеров, а не паролей для базовой проверки подлинности HTTP. Некоторые репозитории позволяют сохранять токены в течение неограниченного времени. Однако на некоторых серверах репозитория Git, включая Azure DevOps Server, срок действия токенов может заканчиваться через несколько часов. Репозитории, на которые истекает срока действия токенов, не должны использовать проверку подлинности на основе токенов в Azure Spring Apps. Если вы используете такой маркер, не забудьте обновить его до истечения срока действия.

GitHub удалил поддержку проверки подлинности паролей, поэтому вместо проверки подлинности паролей для GitHub необходимо использовать личный маркер доступа. Дополнительные сведения см. в разделе "Требования к проверке подлинности маркера" для операций Git.

Другие репозитории Git

В следующей таблице перечислены настраиваемые свойства, которые можно использовать для настройки репозиториев Git с помощью шаблона.

Примечание.

Использование дефиса (-) для разделения слов является единственным поддерживаемым в настоящее время соглашением об именовании. Например, используйте default-label, а не defaultLabel.

Свойство Обязательное поле Компонент
repos No Схема, состоящая из параметров репозитория Git с заданным именем.
repos."uri" Да для repos URI репозитория Git, который используется в качестве серверной части сервера конфигурации. Должно начинаться с http://, git@https://или ssh://.
repos."name" Да для repos Имя для идентификации репозитория; например, team-A или team-B. Требуется только в том случае, если repos существует.
repos."pattern" No Массив строк, используемый для сопоставления имени приложения. Для каждого шаблона используйте формат {application}/{profile} с дикими карта.
repos."default-label" No Метка по умолчанию репозитория Git. Должно быть имя ветви, имя тега или фиксация ввода-вывода репозитория.
repos."search-paths" No Массив строк, используемых для поиска в подкаталогах репозитория Git.
repos."username" No Имя пользователя, используемое для доступа к серверу репозитория Git. Требуется, если сервер репозитория Git поддерживает обычную проверку подлинности HTTP.
repos."password" No Пароль или личный маркер доступа, используемый для доступа к серверу репозитория Git. Требуется, если сервер репозитория Git поддерживает обычную проверку подлинности HTTP.
repos."private-key" No Закрытый ключ SSH для доступа к репозиторию Git. Обязательный код ресурса (URI) при начале git@ или ssh://.
repos."host-key" No Ключ узла сервера репозитория Git. Не следует включать префикс алгоритма, как описано host-key-algorithm.
repos."host-key-algorithm" No Алгоритм ключа узла. Должен быть ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 или ecdsa-sha2-nistp521. Требуется только в том случае, если host-key существует.
repos."strict-host-key-checking" No Указывает, не запускается ли экземпляр сервера конфигурации при использовании частного host-key. Должно быть true (значение по умолчанию) или false.

В следующей таблице показаны некоторые примеры шаблонов для настройки службы с дополнительным репозиторием. Дополнительные сведения см. в разделе "Дополнительные репозитории" и разделе "Сопоставление шаблонов" и "Несколько репозиториев" документации Spring.

Шаблоны Description
test-config-server-app-0/* Универсальный код ресурса (URI) шаблона и репозитория соответствует приложению test-config-server-app-0 Spring boot с любым профилем.
test-config-server-app-1/dev URI шаблона и репозитория соответствуют приложению Spring boot с test-config-server-app-1 профилем разработки.
test-config-server-app-2/prod URI шаблона и репозитория соответствуют приложению Spring boot с test-config-server-app-2 профилем prod.

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

Подключение репозитория сервера конфигурации к Azure Spring Apps

Теперь, когда файлы конфигурации сохраняются в репозитории, выполните следующие действия, чтобы подключить Azure Spring Apps к репозиторию.

  1. Войдите на портал Azure.

  2. Перейдите на страницу Обзор Azure Spring Apps.

  3. В области навигации слева щелкните Сервер конфигурации.

  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 Basic, а затем введите имя пользователя и пароль или токен, чтобы предоставить доступ к 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 и введите закрытый ключ. При необходимости укажите ключ узла и алгоритм ключа узла. Включите открытый ключ в репозиторий сервера конфигурации. Щелкните ОК и Применить, чтобы завершить настройку экземпляра сервера конфигурации.

    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 операцию. Сервер конфигурации должен сообщать об успешном выполнении через 1–2 минуты. Сведения из файла YAML отображаются в портал Azure. Нажмите кнопку Применить, чтобы завершить импорт.

Использование Azure Repos для конфигурации Azure Spring Apps

Azure Spring Apps может получить доступ к общедоступным репозиториям Git, защищенным с помощью SSH или обычной проверки подлинности HTTP. Обычная проверка подлинности HTTP — это самый простой из вариантов создания репозиториев и управления ими с помощью Azure Repos.

Получение URL-адреса репозитория и учетных данных

Чтобы получить URL-адрес репозитория и учетные данные, выполните следующие действия.

  1. На портале Azure Repos проекта нажмите кнопку Клонировать:

  2. Скопируйте URL-адрес клона из текстового поля. Этот URL-адрес обычно находится в следующей форме:

    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. В левой области страницы службы в Параметры выберите вкладку "Сервер конфигурации". Настройте созданный репозиторий следующим образом:

    • Добавьте URI репозитория, сохраненный в предыдущем разделе.
    • Выберите параметр в разделе "Проверка подлинности", чтобы открыть панель "Изменить проверку подлинности".
    • Для типа проверки подлинности выберите HTTP Basic.
    • Для имени пользователя укажите имя пользователя, сохраненное в предыдущем разделе.
    • В поле "Пароль" укажите пароль, сохраненный в предыдущем разделе.
    • Нажмите кнопку "ОК", а затем дождитесь завершения операции.

    Screenshot of repository configuration settings.

Удалите свою конфигурацию

Выберите "Сброс" на вкладке "Сервер конфигурации", чтобы удалить существующие параметры. Удалите параметры сервера конфигурации, если вы хотите подключить экземпляр сервера конфигурации к другому источнику, например при переходе с GitHub на сервер Azure DevOps Server.

Обновление Config Server

При изменении свойств службы, используемые этими свойствами, должны быть уведомлены перед внесением изменений. Решение по умолчанию для Сервера конфигурации Spring Cloud позволяет вручную активировать событие обновления, которое может оказаться невозможным при наличии большого количества экземпляров приложения. Дополнительные сведения см. в разделе "Централизованная конфигурация"

Вместо этого можно автоматически обновить значения из сервера конфигурации, предоставив клиенту конфигурации опрос изменений на основе внутреннего обновления. Выполните следующие действия для автоматического обновления значений с сервера конфигурации.

  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. Включите autorefresh и задайте соответствующий интервал обновления в файле application.yml . В следующем примере клиент опрашивает изменения конфигурации каждые 60 секунд, что является минимальным значением, которое можно задать для интервала обновления.

    По умолчанию параметр autorefresh имеет значение 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. Дополнительные сведения об управлении приложением см. в статье Масштабирование приложения в Azure Spring Apps.