Partilhar via


Definir configurações para o componente Config Server for Spring nos Aplicativos de Contêiner do Azure (visualização)

O Config Server for Spring fornece um local centralizado para disponibilizar dados de configuração para vários aplicativos. Use as orientações a seguir para saber como configurar e gerenciar o componente Config Server for Spring.

Mostrar

Você pode exibir os detalhes de um componente individual pelo nome usando o show comando.

Antes de executar o comando a seguir, substitua os espaços reservados cercados por <> seus valores.

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

Listagem

Você pode listar todos os componentes Java registrados usando o list comando.

Antes de executar o comando a seguir, substitua os espaços reservados cercados por <> seus valores.

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

Vincular

Use o --bind parâmetro do update comando para criar uma conexão entre o componente Config Server for Spring e seu aplicativo contêiner.

Antes de executar o comando a seguir, substitua os espaços reservados cercados por <> seus valores.

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

Desvincular

Para interromper a conexão entre seu aplicativo de contêiner e o componente Config Server for Spring, use o --unbind update parâmetro do comando.

Antes de executar o comando a seguir, substitua os espaços reservados cercados por <> seus valores.

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

Opções de configuração

O az containerapp update comando usa o --configuration parâmetro para controlar como o Config Server for Spring é configurado. Você pode usar vários parâmetros ao mesmo tempo, desde que estejam separados por um espaço. Você pode encontrar mais detalhes nos documentos do Spring Cloud Config Server .

A tabela a seguir lista os diferentes valores de configuração disponíveis.

Configurações de back-end Git

Nome Descrição
spring.cloud.config.server.git.uri
spring.cloud.config.server.git.repos.{repoName}.uri
URI do repositório remoto.
spring.cloud.config.server.git.username
spring.cloud.config.server.git.repos.{repoName}.username
Nome de usuário para autenticação com repositório remoto.
spring.cloud.config.server.git.password
spring.cloud.config.server.git.repos.{repoName}.password
Senha para autenticação com repositório remoto.
spring.cloud.config.server.git.search-paths
spring.cloud.config.server.git.repos.{repoName}.search-paths
Caminhos de pesquisa para usar na cópia de trabalho local. Por padrão, pesquisa apenas a raiz.
spring.cloud.config.server.git.force-pull
spring.cloud.config.server.git.repos.{repoName}.force-pull
Sinalizador para indicar que o repositório deve forçar pull. Se verdadeiro, descarte todas as alterações locais e retire do repositório remoto.
spring.cloud.config.server.git.default-label
spring.cloud.config.server.git.repos.{repoName}.default-label
O rótulo padrão usado para o Git é principal. Se você não definir spring.cloud.config.server.git.default-label e uma ramificação chamada main não existir, o servidor de configuração também tentará, por padrão, fazer checkout de uma ramificação chamada master. Se quiser desativar o comportamento de ramificação de fallback, você pode definir spring.cloud.config.server.git.tryMasterBranch como false.
spring.cloud.config.server.git.try-master-branch
spring.cloud.config.server.git.repos.{repoName}.try-master-branch
Por padrão, o servidor de configuração tentará fazer checkout de uma ramificação chamada master.
spring.cloud.config.server.git.skip-ssl-validation
spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation
A validação do certificado SSL do servidor Git pelo servidor de configuração pode ser desabilitada definindo a propriedade git.skipSslValidation como true.
spring.cloud.config.server.git.clone-on-start
spring.cloud.config.server.git.repos.{repoName}.clone-on-start
Sinalizador para indicar que o repositório deve ser clonado na inicialização (não sob demanda). Geralmente leva a uma inicialização mais lenta, mas mais rápida primeira consulta.
spring.cloud.config.server.git.timeout
spring.cloud.config.server.git.repos.{repoName}.timeout
Tempo limite (em segundos) para obter conexão HTTP ou SSH (se aplicável). Padrão 5 segundos.
spring.cloud.config.server.git.refresh-rate
spring.cloud.config.server.git.repos.{repoName}.refresh-rate
Com que frequência o servidor de configuração buscará dados de configuração atualizados do seu back-end Git.
spring.cloud.config.server.git.private-key
spring.cloud.config.server.git.repos.{repoName}.private-key
Chave privada SSH válida. Deve ser definido se ignore-local-ssh-settings for true e o URI do Git for o formato SSH.
spring.cloud.config.server.git.host-key
spring.cloud.config.server.git.repos.{repoName}.host-key
Chave de host SSH válida. Deve ser definido se o algoritmo de chave do host também estiver definido.
spring.cloud.config.server.git.host-key-algorithm
spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm
Um dos ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 ou ecdsa-sha2-nistp521. Deve ser definido se a chave do host também estiver definida.
spring.cloud.config.server.git.strict-host-key-checking
spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking
true ou false. Se false, ignore os erros com a chave do host.
spring.cloud.config.server.git.repos.{repoName} URI do repositório remoto.
spring.cloud.config.server.git.repos.{repoName}.pattern O formato padrão é uma lista separada por vírgulas de nomes {application}/{profile} com curingas. Se {application}/{profile} não corresponder a nenhum dos padrões, ele usará o URI padrão definido em.

Configurações comuns

  • Registro em log de configurações relacionadas

    • logging.level.*
    • logging.group.*
    • Quaisquer outras configurações em logging.* namespace devem ser proibidas, por exemplo, escrever arquivos de log usando logging.file deve ser proibido.
  • spring.cloud.config.server.overrides

    • Mapa extra para uma fonte de propriedade a ser enviado a todos os clientes incondicionalmente.
  • spring.cloud.config.override-none

    • Você pode alterar a prioridade de todas as substituições no cliente para ser mais parecida com valores padrão, permitindo que os aplicativos forneçam seus próprios valores em variáveis de ambiente ou propriedades do sistema, definindo o sinalizador spring.cloud.config.override-none=true (o padrão é false) no repositório remoto.
  • spring.cloud.config.allow-override

    • Se você habilitar o bootstrap config first, poderá permitir que os aplicativos cliente substituam a configuração do servidor de configuração colocando duas propriedades dentro da configuração de aplicativos provenientes do servidor de configuração.
  • spring.cloud.config.server.health.

    • Você pode configurar o Indicador de integridade para verificar mais aplicativos, juntamente com perfis personalizados e rótulos personalizados
  • spring.cloud.config.server.accept-empty

    • Você pode definir spring.cloud.config.server.accept-empty como para false que o servidor retorne um status HTTP 404 , se o aplicativo não for encontrado. Por padrão, esse sinalizador é definido como true.
  • Encriptação e desencriptação (simétrica)

    • encrypt.key
      • É conveniente usar uma chave simétrica, uma vez que é um único valor de propriedade para configurar.
    • spring.cloud.config.server.encrypt.enabled
      • Pode definir isto como false, para desativar a desencriptação do lado do servidor.

Atualizar

Os serviços que consomem propriedades precisam saber sobre a mudança antes que ela aconteça. O método de notificação padrão para o Config Server for Spring envolve acionar manualmente o evento refresh, como refresh by call https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh, que pode não ser viável se houver muitas instâncias de aplicativo.

Em vez disso, você pode atualizar automaticamente os valores do Config Server permitindo que o cliente de configuração pesquise alterações com base em uma atualização interna. Use as etapas a seguir para atualizar automaticamente os valores do Config Server.

  1. Registre uma tarefa agendada para atualizar o contexto em um determinado intervalo, conforme mostrado no exemplo a seguir.

    @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. Habilite autorefresh e defina o intervalo de atualização apropriado no arquivo application.yml . No exemplo a seguir, o cliente sonda uma alteração de configuração a cada 60 segundos, que é o valor mínimo que você pode definir para um intervalo de atualização.

    Por padrão, autorefresh é definido como false, e refresh-interval é definido como 60 segundos.

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. Adicione @RefreshScope o seu código. No exemplo a seguir, a variável connectTimeout é atualizada automaticamente a cada 60 segundos.

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

Encriptação e desencriptação com uma chave simétrica

Desencriptação do lado do servidor

Por padrão, a criptografia do lado do servidor está habilitada. Use os seguintes passos para ativar a desencriptação na sua aplicação.

  1. Adicione a propriedade criptografada em seu arquivo .properties em seu repositório git.

    Por exemplo, seu arquivo deve ser semelhante ao seguinte exemplo:

    message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
    
  2. Atualize o componente Config Server for Spring Java para usar o repositório git que tem a propriedade criptografada e defina a chave de criptografia.

    Antes de executar o comando a seguir, substitua os espaços reservados cercados por <> seus valores.

    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
    

Desencriptação do lado do cliente

Pode usar a desencriptação de propriedades do lado do cliente seguindo os passos:

  1. Adicione a propriedade criptografada em seu *.properties* arquivo em seu repositório git.

  2. Atualize o componente Config Server for Spring Java para usar o repositório git que tem a propriedade criptografada e desative a descriptografia do lado do servidor.

    Antes de executar o comando a seguir, substitua os espaços reservados cercados por <> seus valores.

    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. No seu aplicativo cliente, adicione a chave ENCRYPT_KEY=randomKey de desencriptação como uma variável de ambiente.

    Como alternativa, se você incluir spring-cloud-starter-bootstrap no classpath, ou definir spring.cloud.bootstrap.enabled=true como uma propriedade do sistema, defina encrypt.key em bootstrap.properties.

    Antes de executar o comando a seguir, substitua os espaços reservados cercados por <> seus valores.

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

Próximos passos