docs: fix architecture-overview.md dependency graph rendering

Switch to LR layout, restore all 12 observability-reporting edges
(cut them by mistake, they belong in a dependency graph), drop the
repeated 'reports to' label text that was breaking legibility and
let line style (solid=dependency, dotted=async reporting) carry that
distinction instead. Also shortened edge labels on the trust-boundary
diagram to avoid the same clipping issue.
This commit is contained in:
thesabear committed 2026-08-22 12:40:50 +03:00
1 parent febbf2e44c
commit 5a96e92dc6
1 file changed
+26 -24
+26 -24
View File
@@ -6,8 +6,8 @@
## Dependency graph ## Dependency graph
```mermaid ```mermaid
flowchart TD flowchart LR
Internet(["Internet"]) --> Edge["Edge Firewall<br/>NAT · public reverse proxy · NTP · DHCP"] Internet(["Internet"]) --> Edge["Edge Firewall"]
Edge --> LAN["LAN"] Edge --> LAN["LAN"]
LAN --> DNS["Internal DNS"] LAN --> DNS["Internal DNS"]
@@ -15,44 +15,46 @@ flowchart TD
DNS --> Vault DNS --> Vault
Vault --> Apps["App Host<br/>~40 stacks"] Vault --> Apps["App Host<br/>~40 stacks"]
Vault --> Automation["Automation Host"]
LAN --> FileServer["File Server"] LAN --> FileServer["File Server"]
DNS --> FileServer DNS --> FileServer
Vault --> Automation["Automation Host"]
LAN --> Automation LAN --> Automation
Apps --> InternalProxy["Internal reverse-proxy zone"] Apps --> InternalProxy["Internal Proxy Zone"]
Apps --> SSO["SSO"] Apps --> SSO["SSO"]
Automation --> GitHost["Git Hosting"]
Automation --> Gitea["Git hosting<br/>internal + public mirror"] Vault --> EdgeProxy["User-Facing Proxy<br/>mTLS"]
Vault --> EdgeProxy["User-facing reverse proxy<br/>mTLS"]
DNS --> EdgeProxy DNS --> EdgeProxy
Apps -.proxied by.-> EdgeProxy Apps -.proxied.-> EdgeProxy
SSO -.auth gate via.-> EdgeProxy SSO -.auth.-> EdgeProxy
Apps -.reports to.-> Monitoring["Monitoring"] Apps -.-> Monitoring["Monitoring"]
Automation -.reports to.-> Monitoring Automation -.-> Monitoring
FileServer -.reports to.-> Monitoring FileServer -.-> Monitoring
EdgeProxy -.reports to.-> Monitoring Vault -.-> Monitoring
Vault -.reports to.-> Monitoring DNS -.-> Monitoring
DNS -.reports to.-> Monitoring EdgeProxy -.-> Monitoring
Apps -.reports to.-> Wazuh["Security Monitoring"] Apps -.-> SecMon["Security Monitoring"]
Automation -.reports to.-> Wazuh Automation -.-> SecMon
FileServer -.reports to.-> Wazuh FileServer -.-> SecMon
EdgeProxy -.reports to.-> Wazuh Vault -.-> SecMon
Vault -.reports to.-> Wazuh DNS -.-> SecMon
DNS -.reports to.-> Wazuh EdgeProxy -.-> SecMon
``` ```
> [!TIP]
> Solid arrows are real dependencies — the target has to be reachable and healthy for the source to function. Dotted arrows into Monitoring and Security Monitoring are the one exception: every host reports telemetry to both, but per the Observability Independence Law below, that reporting is asynchronous and non-blocking — nothing here actually depends on Monitoring or Security Monitoring being up. The line style carries that distinction instead of repeating "reports to" twelve times. Full detail on what's actually collected: [`docs/observability.md`](observability.md) and [`docs/security-monitoring.md`](security-monitoring.md).
## Four trust boundaries, not two ## Four trust boundaries, not two
```mermaid ```mermaid
flowchart LR flowchart LR
WAN["WAN"] -->|public application boundary| EdgeFW["Edge Firewall / public proxy"] WAN["WAN"] -->|public| EdgeFW["Edge Firewall<br/>public proxy"]
Browser["LAN browsers"] -->|mTLS + SSO| UserProxy["User-facing proxy"] Browser["LAN browsers"] -->|mTLS + SSO| UserProxy["User-facing proxy"]
Service["App-to-app"] -->|IP-allowlist + SSO| InternalProxy["Internal proxy"] Service["App-to-app"] -->|allowlist + SSO| InternalProxy["Internal proxy"]
Infra["LAN infra-to-infra"] -->|explicit per-flow rules| HostFW["Host firewall rules"] Infra["LAN infra-to-infra"] -->|per-flow rule| HostFW["Host firewall"]
``` ```
Backend services trust proxy headers, not raw client IP, on every path. Backend services trust proxy headers, not raw client IP, on every path.