Поделиться через


Настройка параметров для компонента Config Server for Spring в приложениях контейнеров Azure (предварительная версия)

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

Показать

Сведения о отдельном компоненте можно просмотреть по имени с помощью show команды.

Перед выполнением следующей команды замените заполнители, окруженные значениями <> .

az containerapp env java-component config-server-for-spring show \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --name <JAVA_COMPONENT_NAME>

List

Вы можете перечислить все зарегистрированные компоненты Java с помощью list команды.

Перед выполнением следующей команды замените заполнители, окруженные значениями <> .

az containerapp env java-component list \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP>

Bind

--bind Используйте параметр update команды, чтобы создать соединение между компонентом Config Server для Spring и приложением контейнера.

Перед выполнением следующей команды замените заполнители, окруженные значениями <> .

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --bind <JAVA_COMPONENT_NAME>

Unbind

Чтобы разорвать соединение между приложением-контейнером и компонентом Config Server for Spring, используйте --unbind параметр update команды.

Перед выполнением следующей команды замените заполнители, окруженные значениями <> .

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --unbind <JAVA_COMPONENT_NAME> \
  --resource-group <RESOURCE_GROUP>

Варианты конфигурации

Команда az containerapp update использует --configuration параметр для управления настройкой сервера конфигурации для Spring. Вы можете одновременно использовать несколько параметров, если они разделены пробелом. Дополнительные сведения см. в документации по серверу конфигурации Spring Cloud.

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

Конфигурации серверной части Git

Имя Описание
spring.cloud.config.server.git.uri
spring.cloud.config.server.git.repos.{repoName}.uri
URI удаленный репозиторий.
spring.cloud.config.server.git.username
spring.cloud.config.server.git.repos.{repoName}.username
Имя пользователя для проверки подлинности с помощью удаленный репозиторий.
spring.cloud.config.server.git.password
spring.cloud.config.server.git.repos.{repoName}.password
Пароль для проверки подлинности с помощью удаленный репозиторий.
spring.cloud.config.server.git.search-paths
spring.cloud.config.server.git.repos.{repoName}.search-paths
Пути поиска для использования в локальной рабочей копии. По умолчанию выполняется поиск только корневого каталога.
spring.cloud.config.server.git.force-pull
spring.cloud.config.server.git.repos.{repoName}.force-pull
Пометка, указывающая, что репозиторий должен принудительно вытягивать. Если значение true dis карта любые локальные изменения и принимается из удаленный репозиторий.
spring.cloud.config.server.git.default-label
spring.cloud.config.server.git.repos.{repoName}.default-label
Метка по умолчанию, используемая для Git, является основной. Если не задана метка spring.cloud.config.server.git.default-label и ветвь с именем main не существует, сервер конфигурации по умолчанию попытается проверка использовать ветвь с именем master. Если вы хотите отключить поведение резервной ветви, можно задать для spring.cloud.config.server.git.tryMasterBranch значение false.
spring.cloud.config.server.git.try-master-branch
spring.cloud.config.server.git.repos.{repoName}.try-master-branch
Сервер конфигурации по умолчанию попытается проверка использовать ветвь с именем master.
spring.cloud.config.server.git.skip-ssl-validation
spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation
Проверка SSL-сертификата сервера Git сервера конфигурации может быть отключена, установив для свойства git.skipSslValidation значение true.
spring.cloud.config.server.git.clone-on-start
spring.cloud.config.server.git.repos.{repoName}.clone-on-start
Флаг, указывающий, что репозиторий должен быть клонирован при запуске (не по запросу). Как правило, приводит к более медленному запуску, но более быстрому первому запросу.
spring.cloud.config.server.git.timeout
spring.cloud.config.server.git.repos.{repoName}.timeout
Время ожидания (в секундах) для получения подключения HTTP или SSH (если применимо). Значение по умолчанию — 5 секунд.
spring.cloud.config.server.git.refresh-rate
spring.cloud.config.server.git.repos.{repoName}.refresh-rate
Как часто сервер конфигурации извлекает обновленные данные конфигурации из серверной части Git.
spring.cloud.config.server.git.private-key
spring.cloud.config.server.git.repos.{repoName}.private-key
Допустимый закрытый ключ SSH. Необходимо задать, если параметр ignore-local-ssh-settings имеет значение true, а универсальный код ресурса (URI) Git — SSH-формат.
spring.cloud.config.server.git.host-key
spring.cloud.config.server.git.repos.{repoName}.host-key
Допустимый ключ узла SSH. Необходимо задать, если также задан алгоритм host-key-.
spring.cloud.config.server.git.host-key-algorithm
spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm
Один из ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 или ecdsa-sha2-nistp521. Необходимо задать, если также задан ключ узла.
spring.cloud.config.server.git.strict-host-key-checking
spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking
true или false. Если значение false, игнорируйте ошибки с ключом узла.
spring.cloud.config.server.git.repos.{repoName} URI удаленный репозиторий.
spring.cloud.config.server.git.repos.{repoName}.pattern Формат шаблона — это разделенный запятыми список имен {application}/{profile} с дикими карта. Если {application}/{profile} не соответствует ни одному из шаблонов, он использует URI по умолчанию, определенный в разделе.

Распространенные способы конфигурирования

  • Конфигурации, связанные с ведением журнала

    • logging.level.*
    • logging.group.*
    • Любые другие конфигурации в пространстве имен log.* должны быть запрещены, например написание файлов журналов с помощью logging.file запрета.
  • spring.cloud.config.server.overrides

    • Дополнительная карта для источника свойств, отправляемого всем клиентам безоговорочно.
  • spring.cloud.config.override-none

    • Приоритет всех переопределения в клиенте можно изменить так, как значения по умолчанию, позволяя приложениям предоставлять собственные значения в переменных среды или системных свойствах, задав в удаленный репозиторий флаг spring.cloud.config.override-none=true (значение по умолчанию — false).
  • spring.cloud.config.allow-override

    • Если включить первую начальную загрузку конфигурации, можно разрешить клиентским приложениям переопределить конфигурацию с сервера конфигурации конфигурации, разместив два свойства в конфигурации приложений, поступающих с сервера конфигурации конфигурации.
  • spring.cloud.config.server.health.

    • Индикатор работоспособности можно настроить для проверка больше приложений, а также пользовательских профилей и пользовательских меток
  • spring.cloud.config.server.accept-empty

    • Вы можете задать spring.cloud.config.server.accept-empty значение false , чтобы сервер вернул состояние HTTP 404 , если приложение не найдено. По умолчанию этот флаг имеет значение true.
  • Шифрование и расшифровка (симметричная)

    • encrypt.key
      • Симметричный ключ удобно использовать, так как это одно значение свойства для настройки.
    • spring.cloud.config.server.encrypt.enabled
      • Этот параметр можно задать для falseотключения расшифровки на стороне сервера.

Refresh

Службы, использующие свойства, должны знать об изменении, прежде чем это произойдет. Метод уведомлений по умолчанию для Config Server для Spring включает вручную активацию события обновления, например обновление по вызову https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh, что может оказаться невозможным, если существует множество экземпляров приложения.

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

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

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

    По умолчанию autorefresh задано значение falserefresh-interval имеет значение 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;
    }
    

Шифрование и расшифровка с помощью симметричного ключа

Расшифровка на стороне сервера

По умолчанию шифрование на стороне сервера включено. Чтобы включить расшифровку в приложении, выполните следующие действия.

  1. Добавьте зашифрованное свойство в файл свойств .properties в репозитории Git.

    Например, файл должен выглядеть следующим образом:

    message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
    
  2. Обновите компонент Config Server for Spring Java, чтобы использовать репозиторий Git, имеющий зашифрованное свойство и задал ключ шифрования.

    Перед выполнением следующей команды замените заполнители, окруженные значениями <> .

    az containerapp env java-component config-server-for-spring update \
      --environment <ENVIRONMENT_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --name <JAVA_COMPONENT_NAME> \
      --configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
    

Расшифровка на стороне клиента

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

  1. Добавьте зашифрованное свойство в файл в *.properties* репозитории Git.

  2. Обновите компонент Config Server для Spring Java, чтобы использовать репозиторий Git, имеющий зашифрованное свойство и отключить расшифровку на стороне сервера.

    Перед выполнением следующей команды замените заполнители, окруженные значениями <> .

    az containerapp env java-component config-server-for-spring update \
      --environment <ENVIRONMENT_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --name <JAVA_COMPONENT_NAME> \
      --configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=false
    
  3. В клиентском приложении добавьте ключ ENCRYPT_KEY=randomKey расшифровки в качестве переменной среды.

    Кроме того, если вы включаете spring-cloud-starter-bootstrap в системное classpathсвойство или задаете spring.cloud.bootstrap.enabled=true encrypt.key bootstrap.propertiesв качестве системного свойства.

    Перед выполнением следующей команды замените заполнители, окруженные значениями <> .

    az containerapp update \
      --name <APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
         --set-env-vars "ENCRYPT_KEY=randomKey"
    
    encrypt:
      key: somerandomkey
    

Следующие шаги