Compreender os Segredos do Kubernetes

Concluído

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

Compreender os Segredos

No Kubernetes, os Segredos permitem armazenar 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 seus dados em um formato base64. Embora base64 não seja um algoritmo de criptografia, o Kubernetes pode ver que as informações são codificadas e pode ocultar essas informações de saídas de comando, como kubectl describe. Esse processo não acontece com a configuração de texto sem formatação. Os segredos são sempre direcionados para um único namespace para evitar a exposição adicional de dados confidenciais a outras cargas de trabalho no cluster.

Tipos de Segredos

Existem diferentes tipos de Segredos. O tipo mais comum e padrão é Opaque, que contém dados arbitrários 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 do cliente ou servidor TLS, usados para servir conexões HTTPS de dentro de um recurso de ingresso, por exemplo.

Gorjeta

Para obter mais informações, consulte a documentação oficial do Kubernetes Secrets.

Criar e usar um segredo

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

  • Montados como ficheiros num volume em contentores num Pod ou numa Implementação.
  • Referenciados como uma variável de ambiente na especificação do Pod ou de Implementação.
  • Utilizados pelo Kubelet ao solicitar imagens de registos privados através 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 kubectl comando. 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 esta especificação, você precisa codificar os valores antes de criar o Segredo. Se você quiser criar um Segredo com o valor de texto sem formatação e permitir que o Kubernetes o codifice 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 secreta decodificada como o valor passado para ele em vez do codificado.

Atualizações de Segredos

Todos os Segredos que são montados como volumes dentro de um pod são atualizados automaticamente assim que seu valor muda. Essa alteração pode não ocorrer imediatamente devido à configuração do Kubelet, mas acontece automaticamente, portanto, não há 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, tornando necessário reiniciar o Pod para que as alterações entrem em vigor.

Verifique o seu conhecimento

1.

Porque é que os Segredos do Kubernetes são mais seguros do que valores de texto simples?

2.

Como pode utilizar os Segredos numa aplicação?

3.

Como é que a codificação Base64 é utilizada em segredos?