Como integrar uma aplicação com Kubernetes

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-go adicionado 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.

* indicates required

Deixe uma resposta