Noções básicas de Segredos do Kubernetes

Concluído

Uma das maiores considerações ao trabalhar com aplicativos distribuídos é como gerenciar as informações confidenciais, como senhas, conexões e dados semelhantes. O Kubernetes permite que você proteja esses dados com um recurso chamado de Segredo.

Noções básicas de Segredos

No Kubernetes, os Segredos permitem que você armazene informações confidenciais de forma mais segura do que o formato de texto simples em pods e implantações. Os Segredos são projetados para armazenar senhas e outros dados confidenciais.

Os Segredos do Kubernetes codificam os dados em um formato base64. Embora o base64 não seja um algoritmo de criptografia, o Kubernetes pode ver que as informações estão codificadas e pode ocultar essas informações das saídas de comando, como kubectl describe. Esse processo não acontece com a configuração de texto simples. Segredos são sempre com escopo em um namespace para evitar a exposição adicional de dados confidenciais a outras cargas de trabalho no cluster.

Tipos de Segredos

Há diferentes tipos de Segredos. O tipo mais comum e padrão é Opaque, que contém dados arbitrários e definidos pelo usuário. Os outros tipos comuns incluem:

  • kubernetes.io/service-account-token: Define um token de conta de serviço, e é criado automaticamente quando uma nova Conta de Serviço é criada.
  • kubernetes.io/basic-auth: credenciais para autenticação básica.
  • kubernetes.io/tls: dados de servidor ou cliente TLS, usados para atender a conexões HTTPS de dentro de um recurso Ingress, por exemplo.

Dica

Para obter mais informações, consulte a Documentação oficial de Segredos do Kubernetes.

Criar e usar um Segredo

De acordo com a documentação oficial dos Segredos do Kubernetes, você pode usar um Segredo de três maneiras diferentes:

  • Montado como arquivos em um volume em contêineres dentro de um objeto Pod ou um Deployment.
  • Referenciado como uma variável de ambiente na especificação do Pod ou Deployment.
  • Usado pelo Kubelet na extração de imagens de Registros privados por meio da chave imagePullSecret na especificação do Pod.

Você pode criar Segredos como qualquer outro recurso do Kubernetes, usando um arquivo de manifesto YAML ou um comando kubectl. A especificação do Segredo é a seguinte:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
data:
  key_name: "key value in base64 format"

Para um Segredo com essa especificação, você precisa codificar os valores antes de criar o Segredo. Se você quiser criar um Segredo com o valor de texto simples e permitir que o Kubernetes codifique automaticamente, use stringData em vez de data:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
stringData:
  key_name: "key value in plain format"

O aplicativo recebe a cadeia de caracteres do Segredo decodificada como o valor passado para ele em vez da codificada.

Atualizações do Segredo

Todos os Segredos que são montados como volumes dentro de um pod são atualizados automaticamente quando o valor deles é alterado. Essa alteração pode não ocorrer imediatamente devido à configuração do Kubelet, mas ocorre automaticamente para que não haja necessidade de reiniciar o Pod.

Nos casos em que os Segredos estão vinculados a variáveis de ambiente, eles não são atualizados automaticamente, sendo necessário reiniciar o Pod para que as alterações entrem em vigor.

Verificar seu conhecimento

1.

Por que os Segredos do Kubernetes são mais seguros do que valores de texto sem formatação?

2.

Como você pode usar os Segredos em um aplicativo?

3.

Como o base64 é usado em segredos?