Configuração e Gestão Secreta com Modelo do Cônsul em Kubernetes

Onur Yilmaz

Follow

Mar 23, 2020 – 6 min leia-se

Como a equipe de plataforma da Trendyol Tech, um dos nossos objetivos era tornar a configuração de aplicações e o gerenciamento secreto dinâmico, confiável, seguro e abstraído de aplicações. Há muito tempo que usamos Kubernetes ConfigMaps e Secrets e eles não satisfazem completamente os nossos requisitos. Por exemplo; quando alteramos uma configuração num ConfigMap, precisamos de reiniciar os nossos pods de aplicação para que esta alteração tenha efeito. Às vezes leva vários minutos para que a alteração seja refletida em todas as instâncias da aplicação. Outro problema é que os segredos de Kubernetes não são suficientemente seguros. Precisamos que os nossos segredos sejam seguros e auditáveis.

Os nossos principais requisitos foram;

  • Devemos ser capazes de alterar as configurações das aplicações de forma dinâmica sem reiniciar os processos da aplicação. Quando alteramos uma configuração, ela deve afetar todas as instâncias da aplicação instantaneamente.
  • Nossos segredos da aplicação devem ser seguros e auditáveis. Também queremos fornecer controle de acesso baseado em funções aos segredos.
  • Temos de abstrair o gerenciamento de configuração das aplicações. Em outras palavras, as aplicações não devem saber onde e como segredos e configurações são mantidos e fornecidos para eles.
  • Nosso sistema de gerenciamento de configurações e segredos deve ser altamente disponível e escalável.

Após algumas pesquisas, chegamos a 2 aplicações; envconsul e consul-template.

Já sabíamos que o Vault é a ferramenta padrão da indústria para o armazenamento de segredos. Ele satisfaz todas as nossas exigências e tem características como segredos dinâmicos, que podem ser úteis para nós no futuro. Você também pode usar o Consul como backend de armazenamento para Vault.

Consul é uma ferramenta distribuída, altamente disponível e escalável para descoberta e configuração de serviços. No nosso caso, usaremos apenas o recurso de armazenamento de valores chave do Consul para manter configurações não secretas.

Podemos usar envconsul ou consul-template principalmente para o terceiro requisito: abstrair o gerenciamento de configurações das aplicações.

Envconsul fornece uma maneira de iniciar um subprocesso com variáveis de ambiente populadas de Consul e Vault.

Consul-template popula valores de Consul e Vault no sistema de arquivos e mantém os valores sincronizados enquanto trabalha no modo daemon.

Uma regra de aplicação de doze fatores é, armazenar configurações no ambiente. Mas o problema com o Envconsul (ou variáveis de ambiente) é que você não pode alterar as variáveis de ambiente de um processo sem reiniciá-lo. Isto vai contra o nosso primeiro requisito. Queremos ser capazes de alterar as configurações sem reiniciar os processos da aplicação. Por isso decidimos ir com o consul-template.

Arquitetura básica do processo de aplicação e daemon do consul-template rodando juntos

No consul-template, você pode usar um arquivo template para renderizar os arquivos de configuração. Isto nos dá uma grande flexibilidade. Aqui está um exemplo de arquivo de modelo;

Consul-template lê este modelo, substitui placeholders por valores do Consul se você usar a palavra-chave “key” e do Vault se você usar a palavra-chave “with secret”. Você pode saber mais sobre a linguagem dos gabaritos aqui. O ficheiro de saída renderizado ficaria assim;

server:
port: "8080"
toggles:
fooEnabled: true
database:
username: "username"
password: "password"

Deixe uma resposta

O seu endereço de email não será publicado.