Secrets

O que são Secrets?

Secrets são objetos do Kubernetes que armazenam dados sensíveis, como senhas, tokens, chaves SSH, etc. Eles são armazenados no cluster Kubernetes e podem ser acessados pelos pods. Eles são armazenados em base64, mas não são criptografados.

Tipos de Secrets

  • Opaque: armazena dados codificados em base64. É o tipo padrão de secret.
  • Docker Registry (dockercfg): armazena credenciais para acessar um registro de imagens Docker.
  • Dockerconfigjson: armazena credenciais para acessar um registro de imagens Docker. É uma versão mais atualizada do dockercfg.
  • BasicAuth: armazena credenciais de autenticação básica.
  • SSHAuth: armazena chaves SSH.
  • TLS: armazena certificados TLS.
  • Bootstrap Token: armazena tokens de inicialização de cluster.

Criando um Secret do tipo Opaque

apiVersion: v1
kind: Secret
metadata:
  name: giropops-secret
type: Opaque
data:
  username: bnVkZXJ2YWw=
  password: Z2lyb3BvcHM=
kubectl apply -f secret.yaml

Utilizando um Secret como variável de ambiente

apiVersion: v1
kind: Pod
metadata:
  name: giropops-pod
spec:
  containers:
    - name: giropops-container
      image: nginx
      env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: giropops-secret
              key: username
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: giropops-secret
              key: password
kubectl apply -f pod.yaml

Criando um Secret do tipo Docker Registry (dockercfg)

Faça o login no Docker Hub:

docker login

Pegue o conteúdo do arquivo ~/.docker/config.json em base64:

cat ~/.docker/config.json | base64

Crie o arquivo secret.yaml:

apiVersion: v1
kind: Secret
metadata:
  name: dockerhub-secret
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: |
    {CONTEÚDO DO ARQUIVO ~/.docker/config.json EM BASE64}    
kubectl apply -f secret.yaml

Utilizando um Secret do tipo Docker Registry (dockercfg) como variável de ambiente

apiVersion: v1
kind: Pod
metadata:
  name: giropops-pod
spec:
  containers:
    - name: giropops-container
      image: {DOCKERHUB_USERNAME}/{IMAGE_NAME}
  imagePullSecrets:
  - name: dockerhub-secret
kubectl apply -f pod.yaml

Criando um Secret do tipo TLS

Crie um certificado e uma chave privada:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout chave-privada.key -out certificado.crt

Pegue o conteúdo dos arquivos certificado.crt e chave-privada.key em base64:

cat certificado.crt | base64
cat chave-privada.key | base64

Crie o arquivo secret.yaml:

apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
type: kubernetes.io/tls
data:
  tls.crt: |
    {CONTEÚDO DO ARQUIVO certificado.crt EM BASE64}    
  tls.key: |
    {CONTEÚDO DO ARQUIVO chave-privada.key EM BASE64}    
kubectl apply -f secret.yaml

O Secret também pode ser criado com o comando kubectl:

kubectl create secret tls meu-servico-web-tls-secret --cert=certificado.crt --key=chave-privada.key