Crear un ConfigMap o Secret genérico a partir de pares clave-valor de línea de comandos.
→Usa `kubectl create configmap <name> --from-literal=<key>=<value>` o `kubectl create secret generic <name> --from-literal=<key>=<value>`.
Por qué: `--from-literal` es para entrada directa de clave-valor. Usa el flag múltiples veces para múltiples claves. Esto es más rápido que crear un archivo YAML para casos simples.
Referencia↗
Inyectar todos los pares clave-valor de un ConfigMap o Secret como variables de entorno en un contenedor.
→En la especificación del contenedor, usa `envFrom` con `configMapRef` o `secretRef`. Ejemplo: `envFrom: [{configMapRef: {name: my-config}}]`.
Por qué: `envFrom` es una operación masiva que mapea todas las claves de la fuente a variables de entorno. Esto evita listar manualmente cada clave.
Referencia↗
Inyectar un valor único y específico de un ConfigMap o Secret como variable de entorno.
→Usa `env.valueFrom`. Ejemplo: `env: [{name: LOG_LEVEL, valueFrom: {configMapKeyRef: {name: my-config, key: log_level}}}]`.
Por qué: `valueFrom` proporciona inyección selectiva y permite mapear la clave de origen a un nombre de variable de entorno diferente.
Montar un ConfigMap o Secret como archivos en un Pod, permitiendo actualizaciones en vivo.
→Define un `volume` de tipo `configMap` o `secret`. Móntalo en el contenedor usando `volumeMounts`. Los archivos se nombrarán según las claves.
Por qué: Los archivos montados de ConfigMaps/Secrets se actualizan automáticamente cuando la fuente cambia. Las variables de entorno no lo hacen, requiriendo un reinicio del Pod.
Referencia↗
Aplicar las mejores prácticas de seguridad: evitar la ejecución como root, hacer el sistema de archivos raíz de solo lectura o especificar un ID de usuario.
→Usa `securityContext` a nivel de Pod o contenedor. Establece `runAsNonRoot: true`, `readOnlyRootFilesystem: true`, y/o `runAsUser: <UID>`.
Por qué: SecurityContext proporciona un control declarativo y granular sobre los privilegios del contenedor, esencial para fortalecer las aplicaciones y cumplir con las políticas de seguridad.
Referencia↗
Conceder a un Pod permisos mínimos para acceder a la API de Kubernetes.
→1. Crea un `ServiceAccount` personalizado. 2. Crea un `Role` con solo los permisos de API necesarios (por ejemplo, listar pods). 3. Crea un `RoleBinding` para vincular el ServiceAccount y el Role. 4. Asigna el ServiceAccount al Pod a través de `spec.serviceAccountName`.
Por qué: Sigue el principio de mínimo privilegio, minimizando la superficie de ataque si un Pod es comprometido.
Evitar el montaje automático de un token de ServiceAccount en un Pod que no necesita acceso a la API.
→Establece `automountServiceAccountToken: false` en la especificación del Pod o en el propio ServiceAccount.
Por qué: Reduce la superficie de ataque al no proporcionar credenciales de API a los contenedores que no las requieren.
Crear un Secret para su uso en la terminación TLS para un Ingress u otro servicio seguro.
→Usa `kubectl create secret tls <secret-name> --cert=<path/to/cert.pem> --key=<path/to/key.pem>`.
Por qué: Esto crea un Secret del tipo correcto `kubernetes.io/tls` con las claves de datos estándar `tls.crt` y `tls.key` esperadas por los controladores de Ingress.
Exponer metadatos del Pod (como nombre, namespace, etiquetas o IP del nodo) a un contenedor.
→Usa la Downward API para proyectar metadatos como variables de entorno o archivos en un volumen `downwardAPI`. Ejemplo: `valueFrom: {fieldRef: {fieldPath: metadata.name}}`.
Por qué: Permite que los contenedores sean conscientes de sí mismos sin necesidad de consultar la API de Kubernetes, simplificando la configuración y reduciendo los requisitos de RBAC.
Referencia↗
Establecer solicitudes y límites predeterminados de CPU/memoria para todos los Pods en un namespace.
→Crea un objeto `LimitRange` en el namespace. Define valores `default` y `defaultRequest` para los recursos.
Por qué: Asegura que todos los Pods tengan restricciones de recursos, mejorando la programación y la estabilidad, incluso si los desarrolladores olvidan especificarlas. Funciona en conjunto con ResourceQuota.
Limitar la cantidad total de recursos (CPU, memoria, recuento de objetos) que se pueden consumir en un namespace.
→Crea un objeto `ResourceQuota`. Define límites estrictos en `spec.hard`, por ejemplo, `requests.cpu: "4"`, `pods: "10"`.
Por qué: Evita que un namespace o equipo consuma todos los recursos del clúster, asegurando una asignación justa de recursos.