feat(compute): negotiate gateway callback listeners - #2492
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
Label |
|
/ok-to-test 7e8b6d2 |
7e8b6d2 to
ec3d9eb
Compare
|
/ok-to-test ec3d9eb |
c2543d9 to
e817863
Compare
|
🌿 Preview your docs: https://nvidia-preview-pr-2492.docs.buildwithfern.com/openshell |
|
/ok-to-test e817863 |
|
/ok to test |
|
/ok-to-test c768219 |
|
/ok-to-test a5cef7d |
|
/ok-to-test ee88761 |
elezar
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: This maintainer-authored PR is project-valid and directly advances the listener-discovery work related to #2215.
Head SHA: ee8876193e2191b948b470abf592ce9d3b32357e
Review findings:
- Three warning-level findings were left inline: one docs accuracy issue, one gateway config reference-doc gap, and one operational logging gap.
Docs: Updated in part, but the published Podman and gateway configuration docs still need the inline corrections before gator can move this to pipeline watch.
Next state: gator:in-review
| # you don't use Podman or want loopback-only access (e.g. behind a reverse | ||
| # proxy). mTLS is enabled by default and protects all connections. | ||
| bind_address = "0.0.0.0:17670" | ||
| # Keep the primary listener on the built-in 127.0.0.1:17670 default. The |
There was a problem hiding this comment.
gator-agent
Warning: This changes the RPM config default by removing the bind_address = "0.0.0.0:17670" override, but docs/reference/gateway-config.mdx was not updated. Please add a short note that RPM/Podman leaves bind_address unset, uses the built-in 127.0.0.1:17670 primary listener, and relies on restricted driver-negotiated callback listeners.
| let local_addr = listener.local_addr().unwrap_or(address); | ||
| .map_err(|e| Error::transport(format!("failed to bind to {}: {e}", spec.address)))?; | ||
| let local_addr = listener.local_addr().unwrap_or(spec.address); | ||
| info!(address = %local_addr, "Server listening"); |
There was a problem hiding this comment.
gator-agent
Warning: The troubleshooting skill now tells operators to inspect the listener-purpose startup log, but this startup log still emits only address. Please include purpose = ?spec.purpose here so unexpected callback binds show the driver and reason in gateway logs.
ee88761 to
18044d2
Compare
|
/ok-to-test 18044d2 |
elezar
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: This maintainer-authored PR is project-valid and directly advances the listener-discovery work related to #2215.
Head SHA: 18044d2ddaaab25063fa2f2be7adcbd65c03ec4a
Review findings:
- Two warning-level findings are left inline: the Podman callback discovery docs still describe only
pasta, and the startup listener log still omits listener purpose/provenance. - General warning:
docs/reference/gateway-config.mdxis not in the current diff, but it still needs a note that RPM/Podman leavesbind_addressunset, uses the built-in127.0.0.1:17670primary listener, and relies on restricted driver-negotiated callback listeners.
Docs: Updated in part, but the published compute-driver and gateway configuration docs still need the corrections above before gator can move this to pipeline watch.
Next state: gator:in-review
elezar
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: This maintainer-authored PR is project-valid and directly advances the listener-discovery work related to #2215.
Head SHA: 1394c1e0d54a0c546e889ccaf9ba9ad55533871f
Review findings:
- One warning-level finding was left inline: Podman bridge gateway inspection is now mandatory during startup even for callback topologies that do not need the bridge address.
Docs: Fern docs and companion troubleshooting guidance were updated for the primary listener default and callback-only listener behavior.
Tests: I did not run local tests. Current GitHub checks are still pending, including OpenShell / E2E and some package build jobs.
Next state: gator:in-review
| .network_gateway_ip(&config.network_name) | ||
| .await | ||
| .unwrap_or(None); | ||
| let network_gateway_ip = client.network_gateway_ip(&config.network_name).await?; |
There was a problem hiding this comment.
gator-agent
Warning: network_gateway_ip() is now mandatory during every Podman driver startup, before the driver knows whether the callback endpoint actually needs the Podman bridge address. This regresses explicitly remote grpc_endpoint configurations, and also rootless pasta without host_gateway_ip, where listener discovery uses the host default-route source instead of the Podman bridge gateway. Keep this inspection best-effort at construction time and fail later only when gateway_listener_requirements() needs the exact bridge address. For example, restore a guarded fallback here:
let network_gateway_ip = match client.network_gateway_ip(&config.network_name).await {
Ok(gateway_ip) => gateway_ip,
Err(err) => {
warn!(
network = %config.network_name,
error = %err,
"Podman bridge gateway inspection failed; exact local callback listeners may be unavailable"
);
None
}
};1394c1e to
3dedd40
Compare
elezar
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: This maintainer-authored PR is project-valid and directly advances the listener-discovery work related to #2215.
Head SHA: 3dedd40ec1ddd7dc4935a8673d7f21df017f68cc
Review findings:
- No blocking findings remain from the independent code-only review for this head. The previous docs, gateway-config, listener provenance, and Podman bridge-inspection findings appear resolved.
Docs: Fern docs, RPM/operator docs, and troubleshooting guidance were updated for the primary listener default and callback-only listener behavior.
Tests: I did not run local tests. GitHub Branch Checks currently include a macOS Rust toolchain setup failure while installing Clippy, and test:e2e pipeline jobs are still pending.
Next state: gator:watch-pipeline
26dd8a8 to
a8b41f9
Compare
3dedd40 to
bcef4ca
Compare
elezar
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: This maintainer-authored PR is project-valid and directly advances the listener-discovery work related to #2215.
Head SHA: bcef4ca7e352589d2db5d2eb0df9c447c1907ef5
Review findings:
- One warning-level finding is left inline: Podman driver startup still makes bridge gateway inspection mandatory even when the selected callback topology does not need that bridge address.
Docs: Fern docs, RPM/operator docs, and companion troubleshooting guidance were updated for the primary listener default and callback-only listener behavior.
Tests: I did not run local tests. Current GitHub checks are still pending, including OpenShell / Branch Checks and OpenShell / E2E.
Next state: gator:in-review
| .network_gateway_ip(&config.network_name) | ||
| .await | ||
| .unwrap_or(None); | ||
| let network_gateway_ip = client.network_gateway_ip(&config.network_name).await?; |
There was a problem hiding this comment.
gator-agent
Warning: network_gateway_ip() is still mandatory during Podman driver construction even when the selected callback topology does not need the bridge gateway address, such as an explicitly remote grpc_endpoint, macOS loopback forwarding, or rootless pasta without host_gateway_ip. Startup should fail when a required local callback listener cannot be discovered, not when unused bridge inspection fails. Move auto-detected grpc_endpoint setup before gateway-IP inspection and only call network_gateway_ip() for Linux local-alias cases that will use an exact bridge bind, such as rootful Podman with empty host_gateway_ip.
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
bcef4ca to
352683d
Compare
Summary
Add a shared, gateway-owned contract for built-in compute drivers to report the
additional listeners required by their sandbox callback topology. Migrate
Docker and Podman to that contract so the primary gateway listener can remain
on its loopback default.
This PR is the production-scoped listener-discovery portion of #2215. It keeps
the initial authorization ceiling limited to the built-in Docker and Podman
topologies. Negotiated listeners expose only the generated sandbox-callable
gRPC surface; the operator-configured primary listener retains the full
multiplexed API.
Per-sandbox callback URI delivery, portable credential delivery, rootless
slirp4netnscallback support, and operator-configurable orinterceptor-extensible listener capabilities remain follow-up work.
Related Issue
Related to #2215
Depends on #2542
Changes
ComputeDriver.GetGatewayListenerRequirementswith exact-address andsemantic default-route/IPv4-loopback selectors.
UNIMPLEMENTEDfrom older external drivers as no additional listenerrequirements for protocol compatibility.
the gateway before persisted sandboxes resume.
request extensions, while keeping driver/reason provenance in listener
binding diagnostics.
before normal authentication and routing.
HTTP routes on callback listeners while leaving primary routing unchanged.
pastadefault-route interfaces, Podman Machine IPv4 loopback, and explicit Linux
host_gateway_ip.slirp4netns, unknown, or unreported. An explicitly remotegrpc_endpointremains supported for those environments.
Ubuntu 24.04/Podman 4 rootless E2E case until
slirp4netnssupport is added.and fail startup when a required local callback listener cannot be safely
discovered.
the gateway primary listener, while permitting arbitrary remote ports.
wildcard socket IPv6-only when necessary.
configurations, and the local rootless-Podman development launcher.
cluster diagnostics.
Testing
cargo test -p openshell-driver-podman(142 tests)mise run testmise run pre-commitmise run docsfailures, remote callbacks, IPv4 loopback selection, split-dual-stack
binding, callback-only routing, and unchanged primary-listener behavior
Docker and live Podman E2E were not run locally.
Checklist