Files
loadbalancer/README.md
T
2026-06-30 10:16:03 +02:00

81 lines
2.0 KiB
Markdown

# Traefik TCP Load Balancer
Docker Compose deployment for Traefik used as a TCP load balancer with TLS passthrough.
## What it does
- publishes `443/tcp` on the Docker host;
- publishes `80/tcp` on the Docker host for HTTP-01 certificate challenges;
- forwards TCP TLS traffic to backend IP addresses and ports;
- leaves SSL certificates and private keys on the backends;
- stores Traefik configuration in the host `./config` directory;
- uses the Traefik file provider, without mounting the Docker socket.
## Configuration
Edit SNI routes and backend targets in `config/dynamic/tcp-services.yml`:
```yaml
tcp:
routers:
lab-younerd:
rule: "HostSNI(`lab.younerd.org`)"
service: lab-younerd
tls:
passthrough: true
services:
lab-younerd:
loadBalancer:
servers:
- address: "host.docker.internal:8443"
```
`HostSNI(...)` matches the hostname sent by the client during the TLS handshake. This deployment uses host networking so Traefik can reach services bound to the Docker host loopback address, such as `127.0.0.1:8443`.
HTTP-01 certificate challenges use normal HTTP routing on port `80`, not SNI. The included example forwards:
```text
lab.younerd.org -> 127.0.0.1:8080
azionelab.org -> 127.0.0.1:9080
www.azionelab.org -> 127.0.0.1:9080
```
Adjust `8080` and `9080` to the local ports where the backend HTTP service is listening. The full HTTP request is forwarded so the backend can handle redirects and ACME challenge paths.
## Run
Validate the Compose file:
```bash
docker compose config
```
Start Traefik:
```bash
docker compose up -d
```
View logs:
```bash
docker compose logs -f traefik
```
Stop the service:
```bash
docker compose down
```
## Documentation
- Architecture: `docs/architecture.md`
- Deployment: `docs/deployment.md`
- Operations: `docs/operations.md`
- Security: `docs/security.md`
- Testing: `docs/testing.md`
- Runbook: `docs/runbook.md`
- ADR: `docs/adr/0001-traefik-tcp-tls-passthrough.md`