# jesuavalc/proyecto-miniidm architecture

> Architecture diagram of the GitHub repository jesuavalc/proyecto-miniidm, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jesuavalc/proyecto-miniidm
- Repository: https://github.com/jesuavalc/proyecto-miniidm

## Overview

MiniIDM is a Docker-based identity and high-availability lab: LDAP directory service, Kerberos authentication, TLS-protected web access, LDAPS load balancing, and metrics monitoring. A user reaches the web service over TLS and authenticates with Kerberos; LDAP and KDC replicas support service continuity. Separate experiment scripts measure replication, TLS overhead, load-balancer throughput, KDC failover, node recovery, and network partition behavior. The graph preserves README-documented integrations; source excerpts were limited to exporters, so most infrastructure links are supported by the README rather than inspected runtime code.

Main entry points: [`idm1/scripts/init-ldap.sh`](https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm1/scripts/init-ldap.sh) (LDAP Master), [`idm2/scripts/init-ldap-replica.sh`](https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm2/scripts/init-ldap-replica.sh) (LDAP Replica), [`experimentos/scripts`](https://github.com/jesuavalc/proyecto-miniidm/tree/main/experimentos/scripts) (HA Experiments), [`monitoring/prometheus/prometheus.yml`](https://github.com/jesuavalc/proyecto-miniidm/blob/main/monitoring/prometheus/prometheus.yml) (Prometheus)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity Services"]
  node_idm1ldap[("LDAP Master<br/>[init-ldap.sh]")]
  node_idm1kdc["Primary KDC<br/>[init-kerberos.sh]"]
  node_idm2ldap[("LDAP Replica")]
  node_idm2kdc["Secondary KDC"]
end

subgraph group_access["Access and Trust"]
  node_web["TLS SPNEGO Web"]
  node_ca["Certificate Authority"]
  node_lb1["Load Balancer 1<br/>[haproxy.cfg]"]
  node_lb2["Load Balancer 2<br/>[haproxy.cfg]"]
end

subgraph group_observability["Monitoring"]
  node_ldapexport["LDAP Exporters<br/>[exporter.py]"]
  node_krbexport1["KDC Metrics Exporter 1"]
  node_krbexport2["KDC Metrics Exporter 2"]
  node_cadvisor["Container Metrics"]
  node_prometheus[("Prometheus<br/>[prometheus.yml]")]
  node_grafana["Grafana<br/>[datasource.yml]"]
end

subgraph group_experiments["Experiments"]
  node_client["Experiment Client<br/>[krb5.conf]"]
  node_experiments["HA Experiments"]
end

node_user(("Web User"))

node_user -->|"requests service"| node_web
node_web -->|"Kerberos auth"| node_idm1kdc
node_web -->|"Kerberos failover"| node_idm2kdc
node_ca -->|"signs certificates"| node_idm1ldap
node_ca -->|"signs certificates"| node_idm2ldap
node_ca -->|"signs certificates"| node_web
node_idm1ldap -->|"replicates directory"| node_idm2ldap
node_idm1kdc -->|"propagates database"| node_idm2kdc
node_lb1 -->|"balances LDAPS"| node_idm1ldap
node_lb1 -->|"balances LDAPS"| node_idm2ldap
node_lb2 -->|"balances LDAPS"| node_idm1ldap
node_lb2 -->|"balances LDAPS"| node_idm2ldap
node_client -->|"runs measurements"| node_experiments
node_experiments -->|"measures recovery"| node_idm1ldap
node_experiments -->|"measures replication"| node_idm2ldap
node_experiments -->|"measures failover"| node_idm1kdc
node_experiments -->|"measures throughput"| node_lb1
node_ldapexport -->|"scrapes metrics"| node_idm1ldap
node_ldapexport -.->|"scrapes metrics"| node_idm2ldap
node_krbexport1 -.->|"reads KDC log"| node_idm1kdc
node_krbexport2 -.->|"reads KDC log"| node_idm2kdc
node_prometheus -->|"scrapes metrics"| node_ldapexport
node_prometheus -->|"scrapes metrics"| node_krbexport1
node_prometheus -->|"scrapes metrics"| node_krbexport2
node_prometheus -->|"scrapes metrics"| node_cadvisor
node_grafana -->|"queries metrics"| node_prometheus

click node_web "https://github.com/jesuavalc/proyecto-miniidm/tree/main/web1"
click node_ca "https://github.com/jesuavalc/proyecto-miniidm/tree/main/ca/scripts"
click node_idm1ldap "https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm1/scripts/init-ldap.sh"
click node_idm1kdc "https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm1/scripts/init-kerberos.sh"
click node_idm2ldap "https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm2/scripts/init-ldap-replica.sh"
click node_idm2kdc "https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm2/scripts/init-kerberos-replica.sh"
click node_lb1 "https://github.com/jesuavalc/proyecto-miniidm/blob/main/lb1/config/haproxy.cfg"
click node_lb2 "https://github.com/jesuavalc/proyecto-miniidm/blob/main/lb2/config/haproxy.cfg"
click node_client "https://github.com/jesuavalc/proyecto-miniidm/blob/main/client/config/krb5.conf"
click node_ldapexport "https://github.com/jesuavalc/proyecto-miniidm/blob/main/ldap-exporter/exporter.py"
click node_krbexport1 "https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm1/scripts/kerberos_exporter.py"
click node_krbexport2 "https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm2/scripts/kerberos_exporter.py"
click node_prometheus "https://github.com/jesuavalc/proyecto-miniidm/blob/main/monitoring/prometheus/prometheus.yml"
click node_grafana "https://github.com/jesuavalc/proyecto-miniidm/blob/main/monitoring/grafana/provisioning/datasources/datasource.yml"
click node_experiments "https://github.com/jesuavalc/proyecto-miniidm/tree/main/experimentos/scripts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_idm1ldap,node_idm1kdc,node_idm2ldap,node_idm2kdc,node_user toneBlue
class node_web,node_ca,node_lb1,node_lb2 toneAmber
class node_ldapexport,node_krbexport1,node_krbexport2,node_cadvisor,node_prometheus,node_grafana toneMint
class node_client,node_experiments toneRose
```

## Components

### Identity Services

- [LDAP Master](https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm1/scripts/init-ldap.sh): `idm1/scripts/init-ldap.sh`
- [Primary KDC](https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm1/scripts/init-kerberos.sh): `idm1/scripts/init-kerberos.sh`
- [LDAP Replica](https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm2/scripts/init-ldap-replica.sh): `idm2/scripts/init-ldap-replica.sh`
- [Secondary KDC](https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm2/scripts/init-kerberos-replica.sh): `idm2/scripts/init-kerberos-replica.sh`

### Access and Trust

- [TLS SPNEGO Web](https://github.com/jesuavalc/proyecto-miniidm/tree/main/web1): `web1`
- [Certificate Authority](https://github.com/jesuavalc/proyecto-miniidm/tree/main/ca/scripts): `ca/scripts`
- [Load Balancer 1](https://github.com/jesuavalc/proyecto-miniidm/blob/main/lb1/config/haproxy.cfg): `lb1/config/haproxy.cfg`
- [Load Balancer 2](https://github.com/jesuavalc/proyecto-miniidm/blob/main/lb2/config/haproxy.cfg): `lb2/config/haproxy.cfg`

### Monitoring

- [LDAP Exporters](https://github.com/jesuavalc/proyecto-miniidm/blob/main/ldap-exporter/exporter.py): `ldap-exporter/exporter.py`
- [KDC Metrics Exporter 1](https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm1/scripts/kerberos_exporter.py): `idm1/scripts/kerberos_exporter.py`
- [KDC Metrics Exporter 2](https://github.com/jesuavalc/proyecto-miniidm/blob/main/idm2/scripts/kerberos_exporter.py): `idm2/scripts/kerberos_exporter.py`
- **Container Metrics**
- [Prometheus](https://github.com/jesuavalc/proyecto-miniidm/blob/main/monitoring/prometheus/prometheus.yml): `monitoring/prometheus/prometheus.yml`
- [Grafana](https://github.com/jesuavalc/proyecto-miniidm/blob/main/monitoring/grafana/provisioning/datasources/datasource.yml): `monitoring/grafana/provisioning/datasources/datasource.yml`

### Experiments

- [Experiment Client](https://github.com/jesuavalc/proyecto-miniidm/blob/main/client/config/krb5.conf): `client/config/krb5.conf`
- [HA Experiments](https://github.com/jesuavalc/proyecto-miniidm/tree/main/experimentos/scripts): `experimentos/scripts`

### Other components

- **Web User**

## Connections

- Web User → TLS SPNEGO Web: requests service (evidence: `README.md`)
- TLS SPNEGO Web → Primary KDC: Kerberos auth (evidence: `README.md`)
- TLS SPNEGO Web → Secondary KDC: Kerberos failover (evidence: `README.md`)
- Certificate Authority → LDAP Master: signs certificates (evidence: `README.md`)
- Certificate Authority → LDAP Replica: signs certificates (evidence: `README.md`)
- Certificate Authority → TLS SPNEGO Web: signs certificates (evidence: `README.md`)
- LDAP Master → LDAP Replica: replicates directory (evidence: `README.md`)
- Primary KDC → Secondary KDC: propagates database (evidence: `README.md`)
- Load Balancer 1 → LDAP Master: balances LDAPS (evidence: `README.md`)
- Load Balancer 1 → LDAP Replica: balances LDAPS (evidence: `README.md`)
- Load Balancer 2 → LDAP Master: balances LDAPS (evidence: `README.md`)
- Load Balancer 2 → LDAP Replica: balances LDAPS (evidence: `README.md`)
- Experiment Client → HA Experiments: runs measurements (evidence: `README.md`)
- HA Experiments → LDAP Master: measures recovery (evidence: `README.md`)
- HA Experiments → LDAP Replica: measures replication (evidence: `README.md`)
- HA Experiments → Primary KDC: measures failover (evidence: `README.md`)
- HA Experiments → Load Balancer 1: measures throughput (evidence: `README.md`)
- LDAP Exporters → LDAP Master: scrapes metrics (evidence: `ldap-exporter/exporter.py`)
- LDAP Exporters → LDAP Replica: scrapes metrics
- KDC Metrics Exporter 1 → Primary KDC: reads KDC log
- KDC Metrics Exporter 2 → Secondary KDC: reads KDC log
- Prometheus → LDAP Exporters: scrapes metrics (evidence: `README.md`)
- Prometheus → KDC Metrics Exporter 1: scrapes metrics (evidence: `README.md`)
- Prometheus → KDC Metrics Exporter 2: scrapes metrics (evidence: `README.md`)
- Prometheus → Container Metrics: scrapes metrics (evidence: `README.md`)
- Grafana → Prometheus: queries metrics (evidence: `README.md`)
