Introducció

En Kubernetes, els Secrets són objectes que permeten emmagatzemar i gestionar informació sensible, com ara contrasenyes, tokens OAuth, i claus SSH. Utilitzar Secrets és una pràctica recomanada per evitar incloure informació sensible directament en els manifests de les aplicacions o en les imatges de contenidors.

Conceptes Clau

  • Secret: Un objecte de Kubernetes que conté una petita quantitat de dades sensibles com contrasenyes, tokens o claus.
  • Base64: Els Secrets s'emmagatzemen en format Base64 per a la seva codificació.
  • Tipus de Secrets: Kubernetes suporta diversos tipus de Secrets, com ara Opaque, kubernetes.io/service-account-token, kubernetes.io/dockercfg, etc.

Creació de Secrets

  1. Creació de Secrets des de fitxers

Pots crear un Secret a partir d'un fitxer que contingui les dades sensibles.

kubectl create secret generic my-secret --from-file=path/to/secret/file

  1. Creació de Secrets des de literals

També pots crear Secrets directament des de la línia de comandes utilitzant literals.

kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=secret

  1. Creació de Secrets amb un manifest YAML

Pots definir un Secret en un fitxer YAML i aplicar-lo al clúster.

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=  # admin en Base64
  password: c2VjcmV0  # secret en Base64

Aplica el manifest al clúster:

kubectl apply -f my-secret.yaml

Accés als Secrets

  1. Utilització de Secrets com a Variables d'Entorn

Pots utilitzar Secrets com a variables d'entorn en els teus Pods.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
    env:
    - name: USERNAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: username
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: password

  1. Utilització de Secrets com a Volums

Pots muntar Secrets com a volums en els teus Pods.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secret
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-secret

Exercicis Pràctics

Exercici 1: Creació i Utilització de Secrets

  1. Crea un Secret anomenat db-secret amb les següents dades:

    • username: dbuser
    • password: dbpassword
  2. Defineix un Pod que utilitzi aquestes dades com a variables d'entorn.

Solució

  1. Creació del Secret:
kubectl create secret generic db-secret --from-literal=username=dbuser --from-literal=password=dbpassword
  1. Definició del Pod:
apiVersion: v1
kind: Pod
metadata:
  name: db-pod
spec:
  containers:
  - name: db-container
    image: my-db-image
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: db-secret
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-secret
          key: password

Aplica el manifest del Pod:

kubectl apply -f db-pod.yaml

Exercici 2: Muntar un Secret com a Volum

  1. Crea un Secret anomenat app-secret amb les següents dades:

    • config: appconfig
  2. Defineix un Pod que munti aquest Secret en el directori /etc/app-secret.

Solució

  1. Creació del Secret:
kubectl create secret generic app-secret --from-literal=config=appconfig
  1. Definició del Pod:
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: my-app-image
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/app-secret
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: app-secret

Aplica el manifest del Pod:

kubectl apply -f app-pod.yaml

Errors Comuns i Consells

  • Error de codificació Base64: Assegura't que les dades en els Secrets estiguin codificades en Base64. Pots utilitzar la comanda echo -n 'data' | base64 per codificar les dades.
  • Permisos insuficients: Verifica que el servei o el Pod tingui els permisos necessaris per accedir als Secrets.
  • Muntatge incorrecte: Assegura't que el camí de muntatge del volum és correcte i que el Pod té accés de lectura si és necessari.

Conclusió

Els Secrets són una eina poderosa en Kubernetes per gestionar informació sensible de manera segura. Hem après a crear Secrets, utilitzar-los com a variables d'entorn i muntar-los com a volums en els Pods. Aquests conceptes són fonamentals per mantenir la seguretat i la integritat de les aplicacions desplegades en Kubernetes.

Curs de Kubernetes

Mòdul 1: Introducció a Kubernetes

Mòdul 2: Components Bàsics de Kubernetes

Mòdul 3: Gestió de Configuració i Secrets

Mòdul 4: Xarxes en Kubernetes

Mòdul 5: Emmagatzematge en Kubernetes

Mòdul 6: Conceptes Avançats de Kubernetes

Mòdul 7: Monitorització i Registre

Mòdul 8: Seguretat en Kubernetes

Mòdul 9: Escalabilitat i Rendiment

Mòdul 10: Ecosistema i Eines de Kubernetes

Mòdul 11: Estudis de Cas i Aplicacions del Món Real

Mòdul 12: Preparació per a la Certificació de Kubernetes

© Copyright 2024. Tots els drets reservats