Skip to content

Sealed Secrets

Luiz Eduardo edited this page Dec 23, 2025 · 10 revisions

Index

Pré-configuração do Ambiente (IAC)

Antes de executar os passos anteriores, é necessário configurar o acesso ao Google Cloud e Kubernetes.

1. Instalar o Google Cloud CLI

Siga a documentação oficial
ou execute:

curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
tar -xf google-cloud-cli-linux-x86_64.tar.gz
./google-cloud-sdk/install.sh

Após a instalação, abra um novo terminal.


2. Autenticação e configuração

No WSL, o navegador pode não abrir automaticamente. Copie e cole o link exibido no terminal em seu navegador para concluir a autenticação.

gcloud auth login
gcloud config set project basedosdados-dev

3. Instalar e validar dependências

gcloud components install kubectl
kubectl version --client

Plugin GKE

Verifique o plugin do GKE:

gke-gcloud-auth-plugin --version

Se o comando não existir:

gcloud components install gke-gcloud-auth-plugin
gke-gcloud-auth-plugin --version

4. Conectar ao cluster

gcloud container clusters get-credentials basedosdados-dev-gke --location=us-central1-c
kubectl get namespaces

Se listar os namespaces corretamente, a configuração está concluída.

Atualização e Criação de Secrets

Via kubectl

Para mudar ou criar uma secret no Agente do Kubernetes é preciso seguir os seguintes passos:

1. Encode da nova Secret em Base64

Antes de criar ou atualizar uma Secret, é necessário converter o valor em Base64.

  • Utilize a ferramenta Base64Encode.org.
  • Insira o valor puro (texto original) e copie o valor convertido.

Exemplo:

Valor original: shablauzin
Valor codificado (base64): c2hhYmxhdXppbg==

2. Criação do arquivo secret-0X.yaml

Crie um novo arquivo temporário com as Secrets codificadas.

  • Localize a pasta do ambiente onde deseja modificar a Secret.
    Exemplo: k8s/website/django/development

  • Se o arquivo existente for secret-01_sealed.yaml, nomeie o novo arquivo como secret-01.yaml.

Template de exemplo:

apiVersion: v1
kind: Secret
metadata:
  name: gcp-credentials
  namespace: prefect-agent-basedosdados-perguntas
data:
  MOVIE_A: S1VOR19GVV9NQU5HQQ==
  MOVIE_B: REVTSVJDQUJMRV9NRQ==

🔹 Atenção:

  • O campo metadata.name e metadata.namespace devem ser os mesmos do arquivo que será substituído (secret-0X_sealed.yaml).
  • Em data, inclua as variáveis e valores codificados em Base64.

3. Gerar o arquivo selado com kubeseal

  1. Instale o kubeseal
  2. No terminal, vá até o diretório onde o arquivo secret_0X.yaml foi criado:
    cd k8s/website/django/development
  3. Execute o comando:
    kubeseal --format yaml < secret-01.yaml > new-sealed-secrets.yaml

Aguarde até o terminal finalizar a execução.
O arquivo new-sealed-secrets.yaml será criado com os valores protegidos (Base64 + Kubeseal).


4. Substituição e versionamento

  1. Copie o conteúdo do arquivo new-sealed-secrets.yaml.
  2. Crie um novo arquivo selado incrementando o número da versão anterior.
    Exemplo:
    secret-01_sealed.yamlsecret-02_sealed.yaml
  3. Mantenha todas as variáveis antigas, adicionando apenas as novas ou atualizadas.

5. Validação da Secret

Antes de aplicar, valide o novo arquivo:

cat secret-02_sealed.yaml | kubeseal --validate
  • Sem erros: prossiga.
  • Erro encontrado: revise os passos 2 a 4 e gere novamente a Secret.

6. Aplicação no Kubernetes e validação via GCP

Para aplicar as mudanças:

kubectl apply -f secret-02_sealed.yaml

A saída deve indicar que o recurso foi configurado com sucesso.

Validação no GCP

  1. Acesse:
    GCP Console → Kubernetes → Secrets & ConfigMaps
  2. Abra a Secret do ambiente atualizado.
  3. Clique em GET YAML no Cloud Shell.
  4. Copie o valor da variável e valide o Base64 com:
    echo <secret_value> | base64 -d
  5. Compare com o valor original.
    • Se estiver correto, a atualização foi bem-sucedida.
    • Caso contrário, repita o passo 6 e reinicie o pod para recarregar as variáveis.

7. Pull Request

Após validar, crie um Pull Request para a branch main, incluindo apenas o arquivo atualizado:

secret-02_sealed.yaml

Mantenha o repositório sempre atualizado — isso garante o histórico de alterações e facilita auditorias futuras.