O Kubernetes se tornou uma ferramenta fundamental para a orquestração de contêineres em ambientes modernos de desenvolvimento.
Um dos recursos mais importantes dentro do Kubernetes é o Secrets, que permite o armazenamento seguro de informações sensíveis como credenciais de acesso, certificados e chaves de API.
No entanto, acessar e manipular esses dados diretamente pelo Kubernetes pode ser um desafio, especialmente quando se trata de automatização e integração com aplicações Go.
Neste post, exploraremos como utilizar o client-go para acessar e gerenciar Secrets diretamente a partir de um CLI escrito em Go.
O que é o recurso Secrets?
Secrets são recursos do Kubernetes usados para armazenar e gerenciar informações sensíveis, como senhas, tokens de autenticação e certificados. Diferente de ConfigMaps, os Secrets são tratados de maneira mais segura, sendo armazenados em formato base64 e criptografados no etcd (banco de dados do Kubernetes).
Tipos de Secrets
Existem vários tipos de Secrets no Kubernetes:
- Opaque: O tipo mais comum, usado para armazenar qualquer dado arbitrário.
- Service account token: Criado automaticamente pelo Kubernetes para autenticar Pods em APIs.
- Docker config: Usado para armazenar credenciais de login em registries Docker.
- Basic Authentication: Usado para armazenar credenciais para basic authentication.
- SSH: Usado para armazenar dados utilizados em autenticação SSH.
- TLS: Usado para armazenar certificados TLS.
- Bootstrap token: Armazena tokens utilizados durante o bootstrap dos nodes.
Por que usar Secrets?
Utilizar Secrets oferece diversas vantagens:
- Segurança: Dados confidenciais são criptografados em trânsito e em repouso.
- Separação de responsabilidades: Mantém informações sensíveis fora da aplicação.
- Escalabilidade: Permite gerenciar segredos de forma centralizada e escalável.
Como os Secrets são armazenados?
Os Secrets são armazenados no etcd, o banco de dados distribuído do Kubernetes. Embora sejam armazenados em formato base64, isso não significa que estejam criptografados. Para maior segurança, recomenda-se habilitar a criptografia de Secrets no etcd.
No entanto, como esse tipo de configuração não tem relação direta com a finalidade desse post, não entraremos em mais detalhes.
Acessando Secrets com Go
Agora, vamos implementar um CLI em Go que utiliza o client-go para acessar, descriptografar, editar e atualizar Secrets no Kubernetes.
Pré-requisitos
- Go instalado.
- Kubernetes configurado com kubectl funcionando.
client-goadicionado ao seu projeto Go.
Implementação
💡Não se preocupe com os imports durante a explicação. Para deixar os trechos de código mais limpos, ao final, mostro como o arquivo deve ficar, incluindo os imports.
Para começar, vamos carregar o arquivo de configurações do Kubernetes. Caso você tenha alterado o caminho padrão do arquivo de configuração do Kubernetes, altere o segundo parâmetro da função BuildConfigFromFlags.
config, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedHomeFile)
if err != nil {
panic(err.Error())
}

Para acessar o restante desse conteúdo, você deve ser um assinante do blog.
Se você ainda não é um assinante, clique aqui para conhecer nossos planos.
Conclusão
Com o client-go, você pode integrar a manipulação de vários recursos diretamente em suas aplicações Go, criando ferramentas poderosas de automação e gerenciamento.
Gostou do conteúdo?
- ✅ Inscreva-se na nossa newsletter para receber mais dicas práticas sobre Go, Kubernetes e desenvolvimento de software diretamente no seu e-mail!
- 🚀 Torne-se um assinante pago do blog e tenha acesso a conteúdos exclusivos, como tutoriais avançados, estudos de caso e muito mais!
Faça parte da comunidade!
Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.
Livros Recomendados
Abaixo listei alguns dos melhores livros que já li sobre GO.