Saltar al contenido
NyverraNyverra
⌘K
InicioArtículosSitio institucional
🇪🇸
Nyverra

Canal editorial

Artículos sobre tecnología, operaciones y partners — infraestructura, monitorización y entornos críticos.

Redes sociales

Explorar

  • Inicio
  • Artículos
  • Categorías
  • Etiquetas
  • Autores
  • Sobre
  • Contacto
  • RSS
  • Sitio institucional

Nyverra

  • Nuestros servicios
  • Casos de éxito
  • Socios

Contacto

Correo[email protected]WhatsApp(62) 99309-1592Portal del clienteITSM · tickets y SLA

Rua RB 18, S/N — Casa 01, Sala 01 · Residencial Buriti · Senador Canedo – GO, Brasil · CEP 75260-459

Horario: lun–vie, 08–18 h

© 2026 Nyverra. Todos los derechos reservados.

CNPJ: 61.571.209/0001-08 · Registro estatal: 20.291.265-5 · D-U-N-S®: 57-323-5796

blog.nyverra.com.br

Términos de usoPrivacidadCookies
Volver arriba

Las aplicaciones necesitan guardar archivos: adjuntos, imágenes, backups, evidencias. El block storage (PVC) no es ideal para eso; el object storage sí lo es.

MinIO ofrece una API compatible con S3 dentro del clúster. Es ligero, corre en Kubernetes y escala con erasure coding.

Sello del curso: probado en Kubernetes 1.35 con MinIO Operator y Tenant de 4 servidores.

Object storage en 30 segundos

  • Bucket: contenedor de objetos.
  • Objeto: archivo + metadatos, accedido por clave.
  • S3 API: HTTP con firma (SigV4).
  • Presigned URL: URL temporal para subir/descargar sin credencial.

A diferencia de un PVC, no lo montas; la aplicación habla HTTP con el bucket. Esto facilita múltiples pods y acceso externo.

El Tenant MinIO

El operador crea un Tenant con N servidores. Cada servidor tiene su PVC; el conjunto forma un pool con erasure coding.

apiVersion: minio.min.io/v2
kind: Tenant
metadata:
  name: portal-minio
  namespace: portal
spec:
  features:
    bucketDNS: false
  requestAutoCert: false
  configuration:
    name: minio-tenant-config
  pools:
    - name: pool-0
      servers: 4
      volumesPerServer: 1
      volumeClaimTemplate:
        metadata:
          name: data
        spec:
          accessModes: ["ReadWriteOnce"]
          storageClassName: portal-nfs
          resources:
            requests:
              storage: 10Gi

Con 4 servidores, MinIO usa erasure coding: tolera la pérdida de servidores/discos sin perder datos, siempre que haya quórum (mitad + 1).

Servicios típicos:

  • minio-s3 (API S3, puerto 9000).
  • minio (consola/API, según el manifiesto).
  • portal-minio-hl (headless).

Credenciales: root no es para la aplicación

El operador crea un secret de root (minio-tenant-creds) con accesskey/secretkey. No uses root en la aplicación.

Crea usuarios/service accounts con policy mínima:

mc alias set local http://minio-s3:9000 "$ROOT_USER" "$ROOT_PASS"
mc admin user add local portal-backend '<secret-forte>'
mc admin policy attach local readwrite --user portal-backend

O service account (credencial vinculada a un usuario):

mc admin user svcacct add local portal-backend

Para producción, crea una policy restringida a los buckets necesarios (ej.: portal-storage, whatsapp-backup) en lugar de readwrite global.

El caso INF-SEC-01

Nuestra app usaba minioadmin como access/secret. La imagen nueva tenía un guard que rechaza credenciales default en producción. El deploy falló — y el guard tenía razón.

Lección: la aplicación nunca debe usar la credencial root de MinIO, y las credenciales default deben rotarse antes del deploy.

Buckets, versionado y lifecycle

mc mb local/portal-storage
mc version enable local/portal-storage
mc ilm add local/portal-storage --expiry-days 90
  • Versionado: protege contra sobrescritura/borrado accidental.
  • Lifecycle: mueve/expira objetos antiguos.
  • Object lock/WORM: retención legal (compliance), cuando sea necesario.

Cada bucket tiene política. No hagas todo público; prefiere presigned URLs.

Acceso externo

Opciones:

  • Ingress con path /minio → Service de MinIO.
  • Subdominio dedicado minio.exemplo.com.
  • Acceso interno solo (la aplicación habla http://minio-s3:9000).

Cuidado con la presigned URL: usa el endpoint configurado. Si el endpoint interno es minio-s3, la URL no funciona en el navegador. Configura la URL pública (MINIO_PUBLIC_URL) correctamente.

Laboratorio

  1. Comprueba el Tenant:
kubectl -n portal get tenant.minio.min.io
kubectl -n portal get pods -l v1.min.io/tenant=portal-minio
kubectl -n portal get pvc | grep minio
  1. Usa mc desde dentro de un pod MinIO:
kubectl -n portal exec portal-minio-pool-0-0 -c minio -- sh
mc --config-dir /tmp/.mc alias set local http://127.0.0.1:9000 "$ROOT_USER" "$ROOT_PASS"
mc --config-dir /tmp/.mc ls local
  1. Crea un bucket y un usuario de aplicación con policy mínima.

  2. Haz subir/descargar:

echo hello > /tmp/hello.txt
mc --config-dir /tmp/.mc cp /tmp/hello.txt local/portal-storage/
mc --config-dir /tmp/.mc cat local/portal-storage/hello.txt
  1. Genera una presigned URL y pruébala en el navegador.

Errores comunes

Síntoma Causa
Tenant no queda Ready PVC, recurso, imagen o config
ImagePullBackOff la imagen no está en el nodo/registry
App recibe 403 policy/usuario incorrecto
Presigned URL no abre endpoint público incorrecto
Console 404 en el Ingress path rewrite incorrecto
Rendimiento malo NFS lento o pocos discos

Checklist

  • [ ] Tenant con 4 servidores y PVCs Bound.
  • [ ] Root creds fuera de la aplicación.
  • [ ] Service account/policy mínima por app.
  • [ ] Versionado/lifecycle definidos.
  • [ ] Endpoint público y presigned URLs probados.
  • [ ] Backup de los buckets (Velero o mc mirror).
  • [ ] Rotación de credenciales documentada.

Glosario

  • Tenant: recurso del MinIO Operator.
  • erasure coding: redundancia por fragmentación.
  • bucket: contenedor de objetos.
  • presigned URL: URL firmada temporal.
  • service account: credencial vinculada a un usuario MinIO.
  • lifecycle: reglas de expiración/migración.

Siguiente

Ahora que tenemos base de datos y object storage, vamos a las colas y caché: RabbitMQ y Redis con quórum, sentinel y PDB.

Siguiente: Curso Kubernetes 17 — RabbitMQ y Redis: quórum, sentinel y PDB

Compartir

Seguir leyendo

Lea también

  • Manual LSI / Broadcom MegaRAID — MegaCli y StorCLI
    Armazenamento

    Manual LSI / Broadcom MegaRAID — MegaCli y StorCLI

    Con esta guía, su equipo gana autonomía para diagnosticar rebuilds, resolver foreign configurations, gestionar BBU y CacheCade — con escenarios reales de producción documentados.

    31 de outubro de 202620 min de leitura
  • Nginx Cheatsheet

    Nginx Cheatsheet

    Guía de bolsillo con ejemplos listos para configurar Nginx en producción: desde instalación y virtual hosts hasta ajuste de rendimiento y resolución de problemas.

    31 de outubro de 202612 min de leitura
  • Curso Kubernetes 27 — SLO/SLI, on-call y postmortem sin culpa
    Kubernetes

    Curso Kubernetes 27 — SLO/SLI, on-call y postmortem sin culpa

    Qué prometer, cómo medir y qué hacer cuando el error se dispara: SLI, SLO, presupuesto de error, alertas que despiertan a alguien y postmortem sin caza de brujas.

    31 de outubro de 20265 min de leitura

Comentarios

Aún sin comentarios

Sea el primero en compartir su opinión sobre este artículo.

Deje un comentario

Newsletter

Reciba nuevos artículos

Suscríbase para recibir publicaciones del blog Nyverra en su correo. Enviaremos un enlace de confirmación.

​
  1. Inicio
  2. Kubernetes
  3. Curso Kubernetes 16 — MinIO: erasure coding, buckets y credenciales
Kubernetes
#Kubernetes#Curso Kubernetes#K8S

Curso Kubernetes 16 — MinIO: erasure coding, buckets y credenciales

Wedson LopesWedson Lopes
31 de outubro de 20264 min de leitura