Saltar al contenido principal
Esta guía te acompaña durante la instalación y configuración de un entorno Midaz en Kubernetes usando Helm. Encontrarás instrucciones para configurar controladores Ingress, habilitar observabilidad y gestionar dependencias.
Esta guía cubre el chart de Helm de Midaz v5.x. Para actualizar desde versiones anteriores, consulta Actualización de Helm.

Desplegar Midaz con Helm


Requisitos previos

Antes de desplegar Midaz con Helm, asegúrate de tener:
  • Kubernetes (v1.30+) – Clúster en ejecución.
  • Helm 3+ – Instalado y disponible (helm version).
  • Acceso a un registro de contenedores con imágenes de Midaz.
  • Certificados DNS y TLS para ingress (o cert-manager instalado).
El código fuente de este chart de Helm está disponible en:La instalación predeterminada coincide con la proporcionada en la guía de instalación rápida de Midaz.
¿Quieres una comprensión más profunda de la arquitectura? Consulta el resumen de la arquitectura de Midaz.

Instalar Midaz a través del chart de Helm

Para instalar Midaz usando Helm, ejecuta el siguiente comando:
helm install midaz oci://registry-1.docker.io/lerianstudio/midaz-helm --version <version> -n midaz --create-namespace
Reemplaza <version> con la versión deseada del chart de Helm. Puedes verificar las versiones disponibles ejecutando:
helm search repo oci://registry-1.docker.io/lerianstudio/midaz-helm --versions
Esto crea un namespace llamado midaz (si no existe ya) y despliega el chart. Para confirmar que el despliegue se realizó correctamente, ejecuta:
helm list -n midaz
El chart de Helm está en nuestro repositorio de GitHub. Puedes hacer un fork, personalizar los valores o extenderlo según sea necesario.

Configurar ingress


Ingress te permite exponer servicios de Midaz fuera del clúster de Kubernetes, vinculándolos a dominios específicos y certificados TLS. Puedes habilitar ingress individualmente para cada servicio de Midaz. Para usar ingress, necesitarás un controlador ingress ejecutándose en tu clúster (por ejemplo, NGINX, AWS ALB o Traefik) y entradas DNS apuntando a él.
Puedes habilitar ingress por servicio en tu archivo values.yaml y configurar nombres de host, secretos TLS y cualquier anotación específica del controlador.
Las siguientes secciones proporcionan ejemplos de configuración para los controladores ingress más comunes.

Controlador ingress NGINX

Para usar el Controlador Ingress NGINX, configura el values.yaml de la siguiente manera:
ingress:
  enabled: true
  className: "nginx"
  # El campo `annotations` se usa para agregar metadatos personalizados al recurso Nginx.
  # Las anotaciones son pares clave-valor que se pueden usar para adjuntar metadatos arbitrarios no identificativos a objetos.
  # Estas anotaciones pueden ser utilizadas por varias herramientas y bibliotecas para aumentar el comportamiento del recurso Nginx.
  # Ver más https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md
  annotations: {}
  hosts:
    - host: midaz.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: midaz-tls  # Asegúrate de que este secreto exista o sea gestionado por cert-manager
      hosts:
        - midaz.example.com
Consulta la documentación oficial de ingress-nginx para una referencia completa sobre las anotaciones de Nginx.

AWS ALB (Application Load Balancer)

Para el Controlador Ingress AWS ALB, configura el values.yaml de la siguiente manera:
ingress:
  enabled: true
  className: "alb"
  annotations:
    alb.ingress.kubernetes.io/scheme: internal  # Usa "internet-facing" para ALB público
    alb.ingress.kubernetes.io/target-type: ip   # Usa "instance" si apuntas a instancias EC2
    alb.ingress.kubernetes.io/group.name: "midaz"  # Agrupa recursos ALB bajo este nombre
    alb.ingress.kubernetes.io/healthcheck-path: "/healthz"  # Ruta de verificación de salud
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'  # Escucha en HTTP y HTTPS
  hosts:
    - host: midaz.example.com
      paths:
        - path: /
          pathType: Prefix
  tls: []  # TLS es gestionado por el ALB usando certificados ACM

Controlador Ingress Traefik

Para Traefik, configura el values.yaml de la siguiente manera:
ingress:
  enabled: true
  className: "traefik"
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: "web, websecure"  # Puntos de entrada definidos en Traefik
    traefik.ingress.kubernetes.io/router.tls: "true"  # Habilita TLS para esta ruta
  hosts:
    - host: midaz.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: midaz-tls  # Asegúrate de que este secreto exista y contenga el certificado TLS
      hosts:
        - midaz.example.com

Configurar observabilidad


Midaz usa Grafana Docker OpenTelemetry LGTM para recopilar y visualizar datos de telemetría como trazas y métricas. Puedes acceder al panel de Grafana usando una de dos opciones:

Opción 1: Acceso local

Para acceder al panel localmente, ejecuta:
kubectl port-forward svc/midaz-grafana 3000:3000 -n midaz
Luego usa http://localhost:3000 para abrir el panel.

Opción 2: Acceso mediante Ingress

Para exponer Grafana dentro de tu clúster o red privada a través de DNS, habilita y configura Ingress de esta manera:
grafana:
  enabled: true
  name: grafana
  ingress:
    enabled: true
    className: "nginx"
    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /
    hosts:
      - host: "midaz-otel.example.com"
        paths:
          - path: /
            pathType: Prefix
    tls: []

Deshabilitar observabilidad

Puedes deshabilitar completamente el stack de observabilidad configurando:
grafana:
  enabled: false

OpenTelemetry Collector (Lerian)

El OpenTelemetry Collector se usa para recopilar y exportar datos de telemetría de los componentes de Midaz. Por defecto, está deshabilitado. Para habilitarlo:
otel-collector-lerian:
  enabled: true

Configurar dependencias


El Chart de Helm de Midaz tiene las siguientes dependencias para la instalación predeterminada del proyecto. Todas las dependencias están habilitadas por defecto.
Los ejemplos a continuación muestran configuraciones tanto para el servicio Ledger (recomendado) como para los servicios Onboarding/Transaction (legacy). Elige la configuración que corresponda a tu despliegue.

Valkey

  • Versión: 2.4.7
  • Repositorio: Bitnami
  • Deshabilitar: valkey.enabled = false
Si tienes una instancia existente de Valkey o Redis, puedes deshabilitar esta dependencia y configurar los componentes de Midaz para usar tu instancia externa.
ledger:
  configmap:
    REDIS_HOST: {tu-host}:{tu-puerto-host}
  secrets:
    REDIS_PASSWORD: {tu-contraseña-host}

PostgreSQL

  • Versión: 16.3.0
  • Repositorio: Bitnami
  • Deshabilitar: postgresql.enabled = false
Si tienes una instancia existente de PostgreSQL, puedes deshabilitar esta dependencia y configurar los componentes de Midaz para usar tu PostgreSQL externo.
ledger:
  configmap:
    # Base de datos del módulo Onboarding
    DB_ONBOARDING_HOST: {tu-host}
    DB_ONBOARDING_USER: {tu-usuario-host}
    DB_ONBOARDING_PORT: {tu-puerto-host}
    DB_ONBOARDING_REPLICA_HOST: {tu-host-replicacion}
    DB_ONBOARDING_REPLICA_USER: {tu-usuario-host-replicacion}
    DB_ONBOARDING_REPLICA_PORT: {tu-puerto-host-replicacion}
    # Base de datos del módulo Transaction
    DB_TRANSACTION_HOST: {tu-host}
    DB_TRANSACTION_USER: {tu-usuario-host}
    DB_TRANSACTION_PORT: {tu-puerto-host}
    DB_TRANSACTION_REPLICA_HOST: {tu-host-replicacion}
    DB_TRANSACTION_REPLICA_USER: {tu-usuario-host-replicacion}
    DB_TRANSACTION_REPLICA_PORT: {tu-puerto-host-replicacion}
  secrets:
    DB_ONBOARDING_PASSWORD: {tu-contraseña-host}
    DB_ONBOARDING_REPLICA_PASSWORD: {tu-contraseña-host-replicacion}
    DB_TRANSACTION_PASSWORD: {tu-contraseña-host}
    DB_TRANSACTION_REPLICA_PASSWORD: {tu-contraseña-host-replicacion}

Job de Bootstrap para PostgreSQL Externo

Cuando usas un PostgreSQL externo (postgresql.enabled: false), este chart proporciona un Job de bootstrap único que:
  • Crea las bases de datos onboarding y transaction si no existen.
  • Crea el rol/usuario midaz si no existe y establece su contraseña.
  • Otorga privilegios de base de datos y permisos del esquema public para que midaz pueda crear tablas.
  • Espera conectividad con un timeout de 300s.
  • Es idempotente: si todo ya existe, imprime y sale.
Configura en values.yaml:
postgresql:
  enabled: false  # deshabilita PostgreSQL incluido para usar uno externo

global:
  externalPostgresDefinitions:
    enabled: true
    connection:
      host: "tu-host-postgres"
      port: "5432"
    postgresAdminLogin:
      # Opción A: Usar un Secret existente (recomendado)
      # Claves requeridas: DB_USER_ADMIN, DB_ADMIN_PASSWORD
      useExistingSecret:
        name: "my-postgres-admin-secret"
      # Opción B: Credenciales en línea (no recomendado en producción)
      # username: "postgres"
      # password: "s3cret"
    midazCredentials:
      # Opción A: Usar un Secret existente (recomendado)
      # Clave requerida: DB_PASSWORD_MIDAZ
      useExistingSecret:
        name: "my-midaz-credentials-secret"
      # Opción B: Contraseña en línea (no recomendado en producción)
      # password: "midaz-password"
Todos los secrets deben estar en el mismo namespace que el release. El Job tiene un TTL de 300 segundos después de completarse.

MongoDB

  • Versión: 15.4.5
  • Repositorio: Bitnami
  • Deshabilitar: mongodb.enabled = false
Si tienes una instancia existente de MongoDB, puedes deshabilitar esta dependencia y configurar los componentes de Midaz para usar tu MongoDB externo.
ledger:
  configmap:
    # Módulo Onboarding
    MONGO_ONBOARDING_HOST: {tu-host}
    MONGO_ONBOARDING_NAME: {tu-nombre-host}
    MONGO_ONBOARDING_USER: {tu-usuario-host}
    MONGO_ONBOARDING_PORT: {tu-puerto-host}
    # Módulo Transaction
    MONGO_TRANSACTION_HOST: {tu-host}
    MONGO_TRANSACTION_NAME: {tu-nombre-host}
    MONGO_TRANSACTION_USER: {tu-usuario-host}
    MONGO_TRANSACTION_PORT: {tu-puerto-host}
  secrets:
    MONGO_ONBOARDING_PASSWORD: {tu-contraseña-host}
    MONGO_TRANSACTION_PASSWORD: {tu-contraseña-host}

RabbitMQ

  • Versión: 16.0.0
  • Repositorio: Groundhog2k
  • Deshabilitar: rabbitmq.enabled = false
Si estás usando una instancia externa de RabbitMQ, necesitas cargar el archivo requerido load_definitions.json. Sin estas colas, intercambios y enlaces en su lugar, Midaz no funcionará como se espera. Puedes cargar las definiciones de una de dos maneras: Automáticamente Habilita el job de bootstrap en tu values.yaml para aplicar automáticamente las definiciones de RabbitMQ a tu instancia externa:
global:
  externalRabbitmqDefinitions:
    enabled: true
Manualmente Si prefieres aplicar las definiciones tú mismo, usa la API HTTP de RabbitMQ:
curl -u {usuario}:{contraseña} -X POST -H "Content-Type: application/json" \
  -d @load_definitions.json http://{host}:{puerto}/api/definitions
El archivo load_definitions.json se encuentra en: charts/midaz/files/rabbitmq/load_definitions.json.

Job de Bootstrap para RabbitMQ Externo

Para simplificar la configuración de RabbitMQ externo, este chart proporciona un Job único que:
  • Aplica el archivo de definiciones estándar mediante la API HTTP.
  • Crea/actualiza los usuarios transaction y consumer con contraseñas personalizadas.
  • Espera conectividad AMQP con un timeout de 300s.
  • Es idempotente: si los usuarios ya existen, omite y sale.
Configura en values.yaml:
rabbitmq:
  enabled: false  # deshabilita RabbitMQ incluido para usar uno externo

global:
  externalRabbitmqDefinitions:
    enabled: true
    connection:
      protocol: "http"          # http o https
      host: "tu-host-rabbitmq"
      port: "15672"             # Puerto de gestión HTTP
      portAmqp: "5672"          # Puerto AMQP (para verificación de conectividad)
    rabbitmqAdminLogin:
      # Opción A: Usar un Secret existente (recomendado)
      # Claves requeridas: RABBITMQ_ADMIN_USER, RABBITMQ_ADMIN_PASS
      useExistingSecret:
        name: "my-rabbitmq-admin-secret"
      # Opción B: Credenciales en línea (no recomendado en producción)
      # username: "admin"
      # password: "s3cret"
    appCredentials:
      # Opción A: Usar un Secret existente (recomendado)
      # Claves requeridas: RABBITMQ_DEFAULT_PASS, RABBITMQ_CONSUMER_PASS
      useExistingSecret:
        name: "my-rabbitmq-app-credentials"
      # Opción B: Contraseñas en línea (no recomendado en producción)
      # transactionPassword: "transaction-pass"
      # consumerPassword: "consumer-pass"
Todos los secrets deben estar en el mismo namespace que el release. El Job tiene un TTL de 300 segundos después de completarse. Usuarios creados: midaz (admin), transaction, consumer.

RabbitMQ sobre TLS/SSL

Si tu servidor RabbitMQ requiere TLS/SSL, actualiza las variables de entorno del cliente para usar protocolos seguros:
ledger:
  configmap:
    RABBITMQ_URI: "amqps"      # era "amqp"
    RABBITMQ_PROTOCOL: "https" # era "http"

Usar tu propio RabbitMQ

Si ya tienes una instancia de RabbitMQ ejecutándose, puedes deshabilitar la dependencia integrada y apuntar los componentes de Midaz a tu configuración externa.
ledger:
  configmap:
    RABBITMQ_HOST: {tu-host}
    RABBITMQ_DEFAULT_USER: {tu-usuario-host}
    RABBITMQ_PORT_HOST: {tu-puerto-host}
    RABBITMQ_PORT_AMQP: {tu-puerto-amqp-host}
  secrets:
    RABBITMQ_DEFAULT_PASS: {tu-contraseña-host}
    RABBITMQ_CONSUMER_PASS: {tu-contraseña-consumer-rabbitmq}

Componentes de Midaz


El chart de Helm de Midaz despliega servicios principales que manejan operaciones de ledger, gestión de cuentas y procesamiento de transacciones.
Recomendado para nuevas instalaciones: Usa el servicio unificado Ledger. Los servicios separados de Onboarding y Transaction aún están soportados pero se convertirán en legacy en una futura versión.

Ledger (recomendado)

El servicio ledger es un servicio unificado que combina la funcionalidad de los módulos onboarding y transaction en un solo despliegue. Este servicio es recomendado para nuevas instalaciones y será obligatorio en futuras versiones.
Cuando ledger.enabled está configurado como true, los servicios onboarding y transaction se deshabilitan automáticamente (a menos que migration.allowAllServices esté configurado como true para propósitos de prueba).
Habilitar el servicio Ledger:
ledger:
  enabled: true

onboarding:
  enabled: false

transaction:
  enabled: false
Cuando Ledger está habilitado, los ingresses de onboarding y transaction redirigirán automáticamente el tráfico al servicio ledger, manteniendo compatibilidad con configuraciones DNS existentes.
ParámetroDescripciónValor predeterminado
ledger.enabledHabilitar o deshabilitar el servicio ledger.false
ledger.nameNombre del servicio."ledger"
ledger.replicaCountNúmero de réplicas para el servicio ledger.1
ledger.image.repositoryRepositorio para la imagen del contenedor del servicio ledger."lerianstudio/midaz-ledger"
ledger.image.pullPolicyPolítica de extracción de imagen."IfNotPresent"
ledger.image.tagEtiqueta de imagen usada para el despliegue."" (por defecto Chart.AppVersion)
ledger.imagePullSecretsSecretos para extraer imágenes de un registro privado.[]
ledger.nameOverrideAnula el nombre predeterminado generado por Helm.""
ledger.fullnameOverrideAnula el nombre completo generado por Helm.""
ledger.podAnnotationsAnotaciones de pod para metadatos adicionales.{}
ledger.podSecurityContextContexto de seguridad aplicado a nivel de pod.{}
ledger.securityContext.*Define ajustes de contexto de seguridad para el contenedor.Ver values.yaml
ledger.pdb.enabledEspecifica si PodDisruptionBudget está habilitado.true
ledger.pdb.minAvailableNúmero mínimo de pods disponibles.1
ledger.pdb.maxUnavailableNúmero máximo de pods no disponibles.1
ledger.pdb.annotationsAnotaciones para el PodDisruptionBudget.{}
ledger.deploymentUpdate.*Estrategia de actualización del despliegue.Ver values.yaml
ledger.service.typeTipo de servicio de Kubernetes."ClusterIP"
ledger.service.portPuerto para la API HTTP.3000
ledger.service.annotationsAnotaciones para el servicio.{}
ledger.ingress.enabledEspecifica si Ingress está habilitado.false
ledger.ingress.classNameNombre de clase de Ingress.""
ledger.ingress.annotationsAnotaciones adicionales de ingress.{}
ledger.ingress.hostsHosts configurados para Ingress y rutas asociadas.[]
ledger.ingress.tlsConfiguraciones TLS para Ingress.[]
ledger.resources.*Solicitudes/límites de recursos de CPU/Memoria.Ver values.yaml
ledger.autoscaling.enabledEspecifica si el autoescalado está habilitado.true
ledger.autoscaling.minReplicasNúmero mínimo de réplicas para autoescalado.2
ledger.autoscaling.maxReplicasNúmero máximo de réplicas para autoescalado.5
ledger.autoscaling.targetCPUUtilizationPercentagePorcentaje objetivo de utilización de CPU para autoescalado.80
ledger.autoscaling.targetMemoryUtilizationPercentagePorcentaje objetivo de utilización de memoria para autoescalado.80
ledger.nodeSelectorSelectores de nodo para programación de pods.{}
ledger.tolerationsTolerancias para programación de pods.{}
ledger.affinityReglas de afinidad para programación de pods.{}
ledger.configmap.*Variables de entorno para el servicio.Ver values.yaml
ledger.secrets.*Secretos para el servicio.Ver values.yaml
ledger.useExistingSecretUsar un secreto existente en lugar de crear uno nuevo.false
ledger.existingSecretNameEl nombre del secreto existente a usar.""
ledger.extraEnvVarsUna lista de variables de entorno adicionales.[]
ledger.serviceAccount.createEspecifica si se debe crear la cuenta de servicio.true
ledger.serviceAccount.annotationsAnotaciones para la cuenta de servicio.{}
ledger.serviceAccount.nameNombre de cuenta de servicio. Si no se define, se generará automáticamente.""

Crear secreto de Ledger manualmente

Si deseas usar un Secret de Kubernetes existente para el servicio ledger, puedes crearlo manualmente:
kubectl create secret generic midaz-ledger \
  --from-literal=DB_ONBOARDING_PASSWORD='<tu-contraseña-db-onboarding>' \
  --from-literal=DB_ONBOARDING_REPLICA_PASSWORD='<tu-contraseña-db-onboarding-replica>' \
  --from-literal=MONGO_ONBOARDING_PASSWORD='<tu-contraseña-mongo-onboarding>' \
  --from-literal=DB_TRANSACTION_PASSWORD='<tu-contraseña-db-transaction>' \
  --from-literal=DB_TRANSACTION_REPLICA_PASSWORD='<tu-contraseña-db-transaction-replica>' \
  --from-literal=MONGO_TRANSACTION_PASSWORD='<tu-contraseña-mongo-transaction>' \
  --from-literal=REDIS_PASSWORD='<tu-contraseña-redis>' \
  --from-literal=RABBITMQ_DEFAULT_PASS='<tu-contraseña-rabbitmq>' \
  --from-literal=RABBITMQ_CONSUMER_PASS='<tu-contraseña-consumer-rabbitmq>' \
  -n midaz
El servicio Ledger usa credenciales de base de datos específicas por módulo (onboarding y transaction) ya que combina ambos módulos.
Luego configura el servicio Ledger para usar este secreto existente:
ledger:
  enabled: true
  useExistingSecret: true
  existingSecretName: "midaz-ledger"

Onboarding (legacy)

El servicio Onboarding aún está soportado pero se convertirá en legacy en una futura versión. Recomendamos usar el servicio unificado Ledger para nuevas instalaciones.
ParámetroDescripciónValor predeterminado
onboarding.nameNombre del servicio."onboarding"
onboarding.replicaCountNúmero de réplicas para el servicio onboarding.2
onboarding.image.repositoryRepositorio para la imagen del contenedor del servicio onboarding."lerianstudio/midaz-onboarding"
onboarding.image.pullPolicyPolítica de extracción de imagen."IfNotPresent"
onboarding.image.tagEtiqueta de imagen usada para el despliegue."3.3.4"
onboarding.imagePullSecretsSecretos para extraer imágenes de un registro privado.[]
onboarding.nameOverrideAnula el nombre predeterminado generado por Helm.""
onboarding.fullnameOverrideAnula el nombre completo generado por Helm.""
onboarding.podAnnotationsAnotaciones de pod para metadatos adicionales.{}
onboarding.podSecurityContextContexto de seguridad aplicado a nivel de pod.{}
onboarding.securityContext.*Define ajustes de contexto de seguridad para el contenedor.Ver values.yaml
onboarding.pdb.enabledEspecifica si PodDisruptionBudget está habilitado.true
onboarding.pdb.minAvailableNúmero mínimo de pods disponibles.1
onboarding.pdb.maxUnavailableNúmero máximo de pods no disponibles.1
onboarding.pdb.annotationsAnotaciones para el PodDisruptionBudget.{}
onboarding.deploymentUpdate.*Estrategia de actualización del despliegue.Ver values.yaml
onboarding.service.typeTipo de servicio de Kubernetes."ClusterIP"
onboarding.service.portPuerto para la API HTTP.3000
onboarding.service.annotationsAnotaciones para el servicio.{}
onboarding.ingress.enabledEspecifica si Ingress está habilitado.false
onboarding.ingress.classNameNombre de clase de Ingress.""
onboarding.ingress.annotationsAnotaciones adicionales de ingress.{}
onboarding.ingress.hostsHosts configurados para Ingress y rutas asociadas.""
onboarding.ingress.tlsConfiguraciones TLS para Ingress.[]
onboarding.resources.*Solicitudes/límites de recursos de CPU/Memoria.Ver values.yaml
onboarding.autoscaling.enabledEspecifica si el autoescalado está habilitado.true
onboarding.autoscaling.minReplicasNúmero mínimo de réplicas para autoescalado.2
onboarding.autoscaling.maxReplicasNúmero máximo de réplicas para autoescalado.5
onboarding.autoscaling.targetCPUUtilizationPercentagePorcentaje objetivo de utilización de CPU para autoescalado.80
onboarding.autoscaling.targetMemoryUtilizationPercentagePorcentaje objetivo de utilización de memoria para autoescalado.80
onboarding.nodeSelectorSelectores de nodo para programación de pods.{}
onboarding.tolerationsTolerancias para programación de pods.{}
onboarding.affinityReglas de afinidad para programación de pods.{}
onboarding.configmap.*Variables de entorno para el servicio.Ver values.yaml
onboarding.secrets.*Secretos para el servicio.Ver values.yaml
onboarding.useExistingSecretUsar un secreto existente en lugar de crear uno nuevo.false
onboarding.existingSecretNameEl nombre del secreto existente a usar.""
onboarding.extraEnvVarsUna lista de variables de entorno adicionales.[]
onboarding.serviceAccount.createEspecifica si se debe crear la cuenta de servicio.true
onboarding.serviceAccount.annotationsAnotaciones para la cuenta de servicio.{}
onboarding.serviceAccount.nameNombre de cuenta de servicio. Si no se define, se generará automáticamente.""

Crear secreto de Onboarding manualmente

Si deseas usar un Secret de Kubernetes existente para el servicio onboarding:
kubectl create secret generic midaz-onboarding \
  --from-literal=MONGO_PASSWORD='<tu-contraseña-mongo>' \
  --from-literal=DB_PASSWORD='<tu-contraseña-db>' \
  --from-literal=DB_REPLICA_PASSWORD='<tu-contraseña-db-replica>' \
  --from-literal=RABBITMQ_DEFAULT_PASS='<tu-contraseña-rabbitmq>' \
  --from-literal=REDIS_PASSWORD='<tu-contraseña-redis>' \
  -n midaz
Luego configura el servicio onboarding para usar este secreto existente:
onboarding:
  useExistingSecret: true
  existingSecretName: "midaz-onboarding"

Transaction (legacy)

El servicio Transaction aún está soportado pero se convertirá en legacy en una futura versión. Recomendamos usar el servicio unificado Ledger para nuevas instalaciones.
ParámetroDescripciónValor predeterminado
transaction.nameNombre del servicio."transaction"
transaction.replicaCountNúmero de réplicas para el servicio transaction.1
transaction.image.repositoryRepositorio para la imagen del contenedor del servicio transaction."lerianstudio/midaz-transaction"
transaction.image.pullPolicyPolítica de extracción de imagen."IfNotPresent"
transaction.image.tagEtiqueta de imagen usada para el despliegue."3.3.4"
transaction.imagePullSecretsSecretos para extraer imágenes de un registro privado.[]
transaction.nameOverrideAnula el nombre predeterminado generado por Helm.""
transaction.fullnameOverrideAnula el nombre completo generado por Helm.""
transaction.podAnnotationsAnotaciones de pod para metadatos adicionales.{}
transaction.podSecurityContextContexto de seguridad para el pod.{}
transaction.securityContext.*Define ajustes de contexto de seguridad para el contenedor.Ver values.yaml
transaction.pdb.enabledHabilitar o deshabilitar PodDisruptionBudget.true
transaction.pdb.minAvailableNúmero mínimo de pods disponibles.2
transaction.pdb.maxUnavailableNúmero máximo de pods no disponibles.1
transaction.pdb.annotationsAnotaciones para el PodDisruptionBudget.{}
transaction.deploymentUpdate.*Estrategia de actualización del despliegue.Ver values.yaml
transaction.service.typeTipo de servicio de Kubernetes."ClusterIP"
transaction.service.portPuerto para la API HTTP.3001
transaction.service.annotationsAnotaciones para el servicio.{}
transaction.ingress.enabledHabilitar o deshabilitar ingress.false
transaction.ingress.classNameNombre de clase de Ingress.""
transaction.ingress.annotationsAnotaciones adicionales de ingress.{}
transaction.ingress.hostsHosts configurados para ingress y rutas asociadas.[]
transaction.ingress.tlsConfiguración TLS para ingress.[]
transaction.resources.*Solicitudes/límites de recursos de CPU/Memoria.Ver values.yaml
transaction.autoscaling.enabledHabilitar o deshabilitar autoescalado horizontal de pods.true
transaction.autoscaling.minReplicasNúmero mínimo de réplicas para autoescalado.1
transaction.autoscaling.maxReplicasNúmero máximo de réplicas para autoescalado.5
transaction.autoscaling.targetCPUUtilizationPercentagePorcentaje objetivo de utilización de CPU para autoescalado.80
transaction.autoscaling.targetMemoryUtilizationPercentagePorcentaje objetivo de utilización de memoria para autoescalado.80
transaction.nodeSelectorSelector de nodo para programar pods en nodos específicos.{}
transaction.tolerationsTolerancias para programación en nodos con taints.{}
transaction.affinityReglas de afinidad para programación de pods.{}
transaction.configmap.*Variables de entorno para el servicio.Ver values.yaml
transaction.secrets.*Secretos para el servicio.Ver values.yaml
transaction.useExistingSecretUsar un secreto existente en lugar de crear uno nuevo.false
transaction.existingSecretNameEl nombre del secreto existente a usar.""
transaction.extraEnvVarsUna lista de variables de entorno adicionales.[]
transaction.serviceAccount.createEspecifica si se debe crear una ServiceAccount.true
transaction.serviceAccount.annotationsAnotaciones para la ServiceAccount.{}
transaction.serviceAccount.nameNombre de la cuenta de servicio.""

Crear secreto de Transaction manualmente

Si deseas usar un Secret de Kubernetes existente para el servicio transaction:
kubectl create secret generic midaz-transaction \
  --from-literal=MONGO_PASSWORD='<tu-contraseña-mongo>' \
  --from-literal=DB_PASSWORD='<tu-contraseña-db>' \
  --from-literal=DB_REPLICA_PASSWORD='<tu-contraseña-db-replica>' \
  --from-literal=RABBITMQ_DEFAULT_PASS='<tu-contraseña-rabbitmq>' \
  --from-literal=RABBITMQ_CONSUMER_PASS='<tu-contraseña-consumer-rabbitmq>' \
  --from-literal=REDIS_PASSWORD='<tu-contraseña-redis>' \
  -n midaz
El servicio transaction requiere una clave de secreto adicional RABBITMQ_CONSUMER_PASS comparado con onboarding.
Luego configura el servicio transaction para usar este secreto existente:
transaction:
  useExistingSecret: true
  existingSecretName: "midaz-transaction"

CRM (Customer Relationship Management)

El servicio crm proporciona APIs para gestionar datos de holders y sus relaciones con las cuentas del ledger. Anteriormente disponible como un chart separado (plugin-crm) desplegado en el namespace midaz-plugins, el CRM ahora está integrado en el chart principal de Helm de Midaz y se despliega en el namespace midaz.
Si actualmente estás usando plugin-crm en el namespace midaz-plugins, recomendamos migrar a este nuevo workload de CRM integrado. Consulta la guía de Actualización de Helm para los pasos de migración.
Para más detalles sobre la funcionalidad de CRM, consulta la Documentación de CRM.
Habilitar el servicio CRM:
crm:
  enabled: true
  configmap:
    MONGO_HOST: "midaz-mongodb"  # Usa tu host de MongoDB
    MONGO_NAME: "crm"
    MONGO_USER: "midaz"
  secrets:
    MONGO_PASSWORD: "lerian"
ParámetroDescripciónValor predeterminado
crm.enabledHabilitar o deshabilitar el servicio CRM.false
crm.nameNombre del servicio."crm"
crm.replicaCountNúmero de réplicas para el servicio CRM.1
crm.image.repositoryRepositorio para la imagen del contenedor del servicio CRM."ghcr.io/lerianstudio/midaz-crm"
crm.image.pullPolicyPolítica de extracción de imagen."Always"
crm.image.tagEtiqueta de imagen usada para el despliegue."3.5.0"
crm.imagePullSecretsSecretos para extraer imágenes de un registro privado.[]
crm.nameOverrideAnula el nombre predeterminado generado por Helm.""
crm.fullnameOverrideAnula el nombre completo generado por Helm.""
crm.podAnnotationsAnotaciones de pod para metadatos adicionales.{}
crm.podSecurityContextContexto de seguridad aplicado a nivel de pod.{}
crm.securityContext.*Define ajustes de contexto de seguridad para el contenedor.Ver values.yaml
crm.pdb.enabledEspecifica si PodDisruptionBudget está habilitado.true
crm.pdb.minAvailableNúmero mínimo de pods disponibles.1
crm.pdb.maxUnavailableNúmero máximo de pods no disponibles.1
crm.pdb.annotationsAnotaciones para el PodDisruptionBudget.{}
crm.deploymentUpdate.typeTipo de estrategia de despliegue."RollingUpdate"
crm.deploymentUpdate.maxSurgeNúmero máximo de pods que pueden crearse sobre el número deseado de pods.1
crm.deploymentUpdate.maxUnavailableNúmero máximo de pods que pueden estar no disponibles durante la actualización.1
crm.service.typeTipo de servicio de Kubernetes."ClusterIP"
crm.service.portPuerto del servicio.4003
crm.ingress.enabledEspecifica si Ingress está habilitado.false
crm.ingress.classNameNombre de clase de Ingress.""
crm.ingress.annotationsAnotaciones adicionales de ingress.{}
crm.ingress.hostsHosts configurados para Ingress y rutas asociadas.[]
crm.ingress.tlsConfiguraciones TLS para Ingress.[]
crm.resources.*Solicitudes/límites de recursos de CPU/Memoria.Ver values.yaml
crm.autoscaling.enabledEspecifica si el autoescalado está habilitado.true
crm.autoscaling.minReplicasNúmero mínimo de réplicas para autoescalado.1
crm.autoscaling.maxReplicasNúmero máximo de réplicas para autoescalado.3
crm.autoscaling.targetCPUUtilizationPercentagePorcentaje objetivo de utilización de CPU para autoescalado.80
crm.autoscaling.targetMemoryUtilizationPercentagePorcentaje objetivo de utilización de memoria para autoescalado.80
crm.nodeSelectorSelectores de nodo para programación de pods.{}
crm.tolerationsTolerancias para programación de pods.{}
crm.affinityReglas de afinidad para programación de pods.{}
crm.configmap.*Variables de entorno para el servicio.Ver values.yaml
crm.secrets.*Secretos para el servicio.Ver values.yaml
crm.useExistingSecretUsar un secreto existente en lugar de crear uno nuevo.false
crm.existingSecretNameEl nombre del secreto existente a usar.""
crm.extraEnvVarsUna lista de variables de entorno adicionales.{}

Crear secreto de CRM manualmente

Si deseas usar un Secret de Kubernetes existente para el servicio CRM:
kubectl create secret generic midaz-crm \
  --from-literal=LCRYPTO_HASH_SECRET_KEY='<tu-clave-secreta-hash>' \
  --from-literal=LCRYPTO_ENCRYPT_SECRET_KEY='<tu-clave-secreta-cifrado>' \
  --from-literal=MONGO_PASSWORD='<tu-contraseña-mongo>' \
  -n midaz
Luego configura el servicio CRM para usar este secreto existente:
crm:
  enabled: true
  useExistingSecret: true
  existingSecretName: "midaz-crm"