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:
1 file changed
+26
-24
@@ -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.
|
||||||
|
|||||||
Reference in new issue
Block a user