O desafio de clonar Secrets entre diferentes namespaces Kubernetes

Matheus Ramos
Semantix
Published in
4 min readDec 29, 2021

--

Um dos maiores desafios enquanto estamos lidando com um ambiente Kubernetes extenso e complexo é como lidamos com o gerenciamento e manuseio de Secrets.

As Secrets, em essência, são objetos Kubernetes que possuem uma pequena quantidade de dados sensíveis, como senhas, tokens, ou uma chave de segurança, que podem ser eventualmente usadas dentro de um Pod ou uma imagem de container.

Ou seja, dessa forma, utilizando secrets, não é necessário incluir dados sensíveis e confidenciais no código da sua aplicação.

Exatamente por secrets serem criadas independentemente dos Pods que as utilizam, há menos risco de seus dados serem expostos durante o processo de criação, visualização e edição dos Pods. Kubernetes, e as aplicações que rodam dentro de seu cluster, pode também tomar precauções adicionais com secrets, tal qual evitar escrever dados confidenciais em um armazenamento não-volátil.

Mas o que fazer quando precisamos transferir secrets e seus dados confidenciais entre diferentes namespaces sem perder a integridade desses dados, e o mais importante, mantendo a confiabilidade deles?

Neste artigo teremos o panorama de uma aplicação open-source que pode executar esta emaranhada tarefa.

Kubernetes Secret Cloner

O Kubernetes Secret-Cloner é uma aplicação open-source que permite que secrets sejam clonadas e personalizadas entre namespaces Kubernetes de forma e ágil e confiável, mantendo suas características originais e cedendo a oportunidade de acrescentar e incorporar labels adicionais.

Complementarmente, a aplicação é capaz de aferir se a secret já existe no namespace pretendido, e já havendo, ela tem seus metadados e labels atualizados.

Funcionamento

O Kubernetes Secret Cloner funciona com jobs unilaterais, ou seja, produzindo um único job por secret.

O fluxo ocorre a partir do ponto no qual a aplicação checa se a secret existe no namespace de origem, e a retorna se sim. Uma vez que a secret é retornada, se não houver uma secret de mesmo nome, ela é clonada no namespace pretendido. Se já houver uma secret de mesmo nome, ela é atualizada com os patchs e labels necessários.

Requerimentos

Para o funcionamento da aplicação, é necessário a instalação localmente das seguintes ferramentas localmente:

Go e Kubernetes

Utilização

Os passos a seguir ocorrem considerando que as configurações de autorização e contexto da conexão com o ambiente Kubernetes localmente já foram formadas.

O primeiro passo para a utilização da aplicação, é exportar como variáveis de ambiente as informações essenciais para funcionamento, no arquivo env em hook/files:

É necessário editar os valores das variáveis de acordo com as informações necessárias por você.

Cada uma destas variáveis de ambiente, possui uma importância no funcionamento da aplicação, e suas definições serão explicadas a seguir:

Variáveis da Secret

Variáveis do Namespace

Variáveis das Labels

Execução

Uma vez que o ambiente local foi configurado com as variáveis de ambiente previamente descritas no passo anterior, é agora o momento de executar a aplicação.

Dentro do repositório hook/src, execute o arquivo main.go.

Uma vez que o programa é executado, para acompanhar o sucesso da operação, acompanhamos as informações de log disponibilizadas na saída:

Conclusão

Neste artigo podemos conhecer e entender o funcionamento de uma aplicação open-source simples e eficiente na melindrosa tarefa de clonar — ou atualizar, se for este o contexto — uma secret, e todos seus dados sensíveis em um namespace diferente do de origem.

Se trata de um job que mantém o que é mais relevante em uma operação como essa: a atomicidade, integridade e consistência dos dados confidenciais manipulados nesta operação.

--

--

Matheus Ramos
Semantix
Writer for

Data Engineering | Dev-Ops | Golang and Python Developer