Skip to content

Commit 59e0d1c

Browse files
committed
Improve sidecar gateway error diagnostics
1 parent 729e43f commit 59e0d1c

19 files changed

Lines changed: 28 additions & 4588 deletions

Cargo.lock

Lines changed: 13 additions & 1129 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,3 @@
11
[workspace]
2-
members = [".", "sidecar"]
3-
4-
[package]
5-
name = "agent_gateway"
6-
version = "0.1.0"
7-
edition = "2024"
8-
9-
[dependencies]
10-
tokio = { version = "1", features = ["io-util", "macros", "net", "rt-multi-thread", "signal", "time"] }
11-
rustls = { version = "0.23", default-features = false, features = ["aws-lc-rs", "std", "tls12"] }
12-
tokio-rustls = { version = "0.26", default-features = false, features = ["aws-lc-rs", "tls12"] }
13-
rustls-pemfile = "2"
14-
rustls-pki-types = "1"
15-
x509-parser = { version = "0.18", default-features = false }
16-
hyper = { version = "1", features = ["server", "http2"] }
17-
hyper-util = { version = "0.1", features = ["tokio", "server-auto"] }
18-
http = "1"
19-
http-body-util = "0.1"
20-
bytes = "1"
21-
serde = { version = "1", features = ["derive"] }
22-
toml = "1"
23-
async-trait = "0.1"
24-
clap = { version = "4", features = ["derive"] }
25-
tracing = "0.1"
26-
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
27-
tracing-opentelemetry = "0.32"
28-
opentelemetry = "0.31"
29-
opentelemetry_sdk = { version = "0.31", default-features = false, features = ["rt-tokio", "trace"] }
30-
opentelemetry-otlp = { version = "0.31", default-features = false, features = ["grpc-tonic", "trace"] }
31-
anyhow = "1"
32-
sqlx = { version = "0.8.6", default-features = false, features = ["runtime-tokio-rustls", "postgres", "chrono", "derive"] }
33-
chrono = "0.4.44"
34-
p256 = { version = "0.13.2", features = ["ecdsa", "pkcs8"] }
35-
36-
[dev-dependencies]
37-
rcgen = { version = "0.14", features = ["x509-parser"] }
38-
tokio-test = "0.4"
39-
hyper = { version = "1", features = ["client"] }
40-
sqlx = { version = "0.8.6", default-features = false, features = ["migrate", "macros"] }
2+
members = ["sidecar"]
3+
resolver = "3"

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
# agent_gateway
1+
# agent_gateway demo
22

3-
An mTLS HTTP/2 CONNECT proxy that authorizes connections based on custom X.509 certificate extensions.
3+
Demo and support tooling for an mTLS HTTP/2 CONNECT proxy that authorizes connections based on custom X.509 certificate extensions.
44

55
The proxy accepts incoming mTLS connections, extracts a custom extension value from the client certificate, and checks a PostgreSQL-backed signed permission registry to decide whether the client may connect to the requested destination. If allowed, it opens a raw TCP connection to the destination and tunnels data bidirectionally. The client is responsible for establishing its own TLS session to the destination through the tunnel.
66

77
## Building
88

99
```
10-
cargo build --release
10+
cargo build -p agent_gateway_sidecar
1111
```
1212

1313
The sidecar uses a simulated TPM identity. Install the native TPM stack before
@@ -20,12 +20,13 @@ sudo apt-get install libtss2-dev swtpm tpm2-tools pkg-config
2020
## Quick start
2121

2222
```bash
23+
export AGENT_GATEWAY_DEMO_GATEWAY_IMAGE=ghcr.io/sl5taskforce/agent-gateway:main
2324
./demo/setup.sh
2425
```
2526

2627
The setup script generates demo TLS material, creates `config.toml` when needed,
2728
starts Postgres and static HTTPS mock services with Podman Compose or Docker Compose, applies the
28-
database migration, builds and starts the gateway, enrolls a demo principal,
29+
database migration, starts the configured gateway image, enrolls a demo principal,
2930
grants access to `docstore` and `messaging`, creates a demo agent handle, and
3031
verifies that Claude Code can fetch `https://docstore/health` through the
3132
gateway.

demo/gateway.Dockerfile

Lines changed: 0 additions & 12 deletions
This file was deleted.

demo/setup.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ GATEWAY="${AGENT_GATEWAY_DEMO_GATEWAY:-127.0.0.1:8443}"
2020
GATEWAY_CA="${AGENT_GATEWAY_DEMO_GATEWAY_CA:-$REPO_ROOT/certs/server-ca.pem}"
2121
MOCK_CA="${AGENT_GATEWAY_DEMO_MOCK_CA:-$REPO_ROOT/certs/mock-ca.pem}"
2222
SIDECAR_BIN="$REPO_ROOT/target/debug/agent_gateway_sidecar"
23+
GATEWAY_IMAGE="${AGENT_GATEWAY_DEMO_GATEWAY_IMAGE:-ghcr.io/sl5taskforce/agent-gateway:main}"
2324
VERIFY_TIMEOUT_SECONDS="${AGENT_GATEWAY_DEMO_VERIFY_TIMEOUT_SECONDS:-120}"
2425

2526
export COMPOSE_PROJECT_NAME
27+
export AGENT_GATEWAY_DEMO_GATEWAY_IMAGE="$GATEWAY_IMAGE"
2628

2729
require_cmd() {
2830
command -v "$1" >/dev/null 2>&1 || {
@@ -144,8 +146,7 @@ fi
144146
echo "==> Building local sidecar"
145147
cargo build -p agent_gateway_sidecar
146148

147-
echo "==> Building gateway image"
148-
compose build gateway
149+
echo "==> Using gateway image $GATEWAY_IMAGE"
149150

150151
echo "==> Starting Postgres and mock HTTPS services"
151152
compose up -d --force-recreate postgres mock-services

docker-compose.demo.yml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,17 @@ services:
2828
- messaging
2929

3030
gateway:
31-
build:
32-
context: .
33-
dockerfile: demo/gateway.Dockerfile
34-
image: agent-gateway-demo-gateway
31+
image: ${AGENT_GATEWAY_DEMO_GATEWAY_IMAGE:-ghcr.io/sl5taskforce/agent-gateway:main}
3532
working_dir: /workspaces/agent_gateway
3633
command: --config config.toml
3734
environment:
3835
AGENT_GATEWAY_DATABASE_URL: postgres://agent_gateway_admin:agent_gateway_dev@postgres:5432/agent_gateway
3936
ports:
4037
- "8443:8443"
4138
volumes:
42-
- .:/workspaces/agent_gateway
39+
- ./config.toml:/workspaces/agent_gateway/config.toml:ro
40+
- ./certs/server.pem:/workspaces/agent_gateway/certs/server.pem:ro
41+
- ./certs/server-key.pem:/workspaces/agent_gateway/certs/server-key.pem:ro
4342
depends_on:
4443
- postgres
4544
- mock-services

docker-compose.postgres.yml

Lines changed: 0 additions & 19 deletions
This file was deleted.

sidecar/src/bridge.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ async fn handle(
288288
dest_authority = %authority,
289289
gateway_endpoint = %connector.gateway_endpoint(),
290290
error = %e,
291+
error_chain = %format_args!("{e:#}"),
291292
"gateway connect failed"
292293
);
293294
return response(StatusCode::BAD_GATEWAY, "gateway unreachable");

src/config.rs

Lines changed: 0 additions & 147 deletions
This file was deleted.

src/lib.rs

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)