Labs ICT
Pro Login

Secrets

Managing sensitive data like passwords and API keys

Secrets — Managing Sensitive Data

A Secret stores sensitive data like passwords, tokens, and API keys. Secrets are similar to ConfigMaps but are designed for confidential information.

Important: Secrets are only base64-encoded by default, not encrypted. For true encryption, enable encryption at rest or use a secrets management tool.

Creating Secrets


# From literal values
kubectl create secret generic my-secret \
  --from-literal=username=admin \
  --from-literal=password=s3cr3t

# From a file
kubectl create secret tls my-tls \
  --cert=tls.crt \
  --key=tls.key

# YAML definition (values must be base64-encoded)
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=      # echo -n 'admin' | base64
  password:czNjcjN0       # echo -n 's3cr3t' | base64

Using Secrets


apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app
      image: my-app
      env:
        - name: DB_USERNAME
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: username
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password
      volumeMounts:
        - name: secret-volume
          mountPath: /etc/secrets
          readOnly: true
  volumes:
    - name: secret-volume
      secret:
        secretName: my-secret

As environment variables — Individual keys are injected as env vars.

As files — Each key becomes a file in the mounted directory.

Secret Types


  Type                          │ Use Case
  ──────────────────────────────┼──────────────────────────
  Opaque                        │ Generic key-value pairs
  kubernetes.io/tls              │ TLS certificates
  kubernetes.io/dockerconfigjson │ Docker registry auth
  kubernetes.io/basic-auth      │ Basic auth credentials
  kubernetes.io/ssh-auth        │ SSH private keys

Securing Secrets

Enable encryption at rest — Configure Kubernetes to encrypt Secrets in etcd.

Use external secret stores — Tools like HashiCorp Vault, AWS Secrets Manager, or Azure Key Vault integrate with Kubernetes.

Limit access with RBAC — Restrict who can read Secrets in your cluster.

Rotate regularly — Update Secrets periodically and use automated rotation tools.