Armored Trimaran — Secure Application Router¶
An intelligent fan-out architecture that distributes incoming requests to parallel downstream services simultaneously.
Tags: Armored Car | Single Cluster | HTTP1/REST | 4 Pods
Overview¶
The Armored Trimaran routes inbound requests from a Gateway/Initiator (http-gateway) through a Distributor/Router (http-fan-out) to two parallel Sink/Terminator pods (http-sink). The Distributor broadcasts each message to all downstream services at the same time — not sequentially.
EGRESS_PORT_MAP is auto-configured for two downstream pods. Armored Car mode (xtra7) provides per-request key rotation on every hop.
flowchart TD
A["Gateway / Initiator\n(http-gateway)"]
B["Distributor / Router\n(http-fan-out)"]
C["Sink / Terminator\n(http-sink)\nservice-a"]
D["Sink / Terminator\n(http-sink)\nservice-b"]
A -->|"WoSP xtra7"| B
B -->|"WoSP xtra7"| C
B -->|"WoSP xtra7"| D Use Cases¶
- Broadcasting a request to multiple backend services simultaneously
- Parallel processing dispatch where all services receive the same payload
- Notifying multiple consumers of an event at the same time
- A/B routing where both targets process the request independently
Bundle Contents¶
armored-trimaran/
├── gateway/ ← http-gateway (boundary)
├── router/ ← http-fan-out (internal)
├── service-a/ ← http-sink (boundary)
├── service-b/ ← http-sink (boundary)
├── deploy.sh
├── teardown.sh
├── pinhole-setup.sh
├── blueprint.yaml
├── README.md
└── EULA.md
Deploy¶
Prerequisites: Docker Desktop, k3d >= 5.0, kubectl, valid Hopr license
Verify¶
Expected output:
Confirm delivery at each service:
kubectl port-forward -n armored-trimaran-service-a-ns deployment/service-a 8000:8000
curl http://localhost:8000/output
# Expected: {"count": 5, "results": [...]}
Repeat for service-b. Both services should show the same count.
Customize¶
Hook functions for this blueprint:
on_trigger(payload, headers)— ingateway/app/app.py: authentication, routing decisionson_receive_fan_out(payload)— inrouter/app/app.py: transform payload before broadcaston_receive_terminator(payload)— inservice-a/app/app.pyandservice-b/app/app.py: per-service processing
Pricing¶
4 WoSP units (1 per pod). See Commercial Licensing.