What to build
Lifecycle controls for preview ports (builds on #486): explicit teardown, custom expiry, and revocation on session GC. From KIP-12 (Part A).
API contract (from KIP-12):
rpc UnexposePort(UnexposePortRequest) returns (UnexposePortResponse);
message UnexposePortRequest { string session_id = 1; int32 port = 2; }
message UnexposePortResponse { bool ok = 1; }
CLI: unexpose <sid> <port>. expose --ttl <seconds> overrides the default (session TTL). Session GC revokes outstanding preview tokens/routes for the destroyed session.
Acceptance criteria
Blocked by
What to build
Lifecycle controls for preview ports (builds on #486): explicit teardown, custom expiry, and revocation on session GC. From KIP-12 (Part A).
API contract (from KIP-12):
CLI:
unexpose <sid> <port>.expose --ttl <seconds>overrides the default (session TTL). Session GC revokes outstanding preview tokens/routes for the destroyed session.Acceptance criteria
unexpose <sid> 8080removes the Service + Ingress immediately; the URL then 403sexpose --ttl 60→ URL returns 403 after 60s (expiry enforced at verify)exposeof the same (sid, port) reuses the route and issues a fresh tokenBlocked by