Skip to content

Replace actor eth0 move with veth networking - #110

Merged
Bowei Du (bowei) merged 9 commits into
agent-substrate:mainfrom
kagent-dev:transparent-egress-veth-networking
Jun 11, 2026
Merged

Bowei Du (bowei) merged 9 commits into
agent-substrate:mainfrom
kagent-dev:transparent-egress-veth-networking

Conversation

@EItanya

@EItanya Eitan Yarmush (EItanya) commented May 28, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #122

Summary

This replaces the ateom-gvisor networking path that moved the worker pod's Kubernetes-provided eth0 into the actor/gVisor network namespace.

Instead, the worker pod keeps its real eth0, and ateom-gvisor creates a point-to-point veth pair between the worker pod namespace and the actor namespace. The actor-side peer is renamed to eth0, receives the actor-side address, and uses the worker-side veth as its default gateway.

The PR also adds temporary nftables compatibility rules so existing inbound and outbound behavior continues to work while preserving the worker pod's own network connectivity.

Why

Moving the pod's real eth0 makes the worker pod lose normal Kubernetes network connectivity while an actor is active. That blocks pod-local networking components, including the planned transparent egress capture and AgentGateway integration, because those components remain in the worker pod namespace while actor traffic leaves through an interface that was moved elsewhere.

Keeping eth0 in the worker pod namespace gives Substrate a stable worker-owned networking boundary for future transparent egress policy enforcement.

Validation

  • go test ./cmd/ateom-gvisor ./cmd/atelet ./internal/ateompath ./internal/controllers
  • go test ./cmd/ateom-gvisor ./internal/serverboot
  • NO_DEV_ENV=true BUCKET_NAME=ate-snapshots KO_DOCKER_REPO=localhost:5001 KUBECTL_CONTEXT=kind-kind ./hack/run-e2e.sh ./internal/e2e/suites/demo -run TestDemo3 -count=1

Checklist

  • Tests pass
  • Appropriate changes to documentation are included in the PR

Comment thread cmd/ateom-gvisor/main.go Resolved
Comment thread cmd/ateom-gvisor/main.go Resolved
Comment thread cmd/ateom-gvisor/main.go Resolved
Comment thread cmd/ateom-gvisor/main.go Resolved
Comment thread cmd/ateom-gvisor/main.go Resolved
Comment thread cmd/ateom-gvisor/main.go Resolved

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs a make update or the LICENSES script

thanks for working on this :-)

@EItanya

Copy link
Copy Markdown
Collaborator Author

Up to date with main and new vendoring strategy, please review again

Comment thread cmd/ateom-gvisor/main.go Resolved
Comment thread cmd/ateom-gvisor/main.go Resolved
@EItanya
Eitan Yarmush (EItanya) force-pushed the transparent-egress-veth-networking branch from 2e5e6c7 to 3f5cbae Compare June 5, 2026 15:54
Comment thread internal/serverboot/serverboot.go Resolved
@bowei

Copy link
Copy Markdown
Collaborator

Needs rebase...

@EItanya

Copy link
Copy Markdown
Collaborator Author

Needs rebase...

Why does it need rebase? I don't see any conflicts according to GitHub.

Comment thread cmd/ateom-gvisor/main.go Resolved
Comment thread cmd/ateom-gvisor/main.go Resolved
@bowei

Copy link
Copy Markdown
Collaborator

I know there are comments discussing the networking setup, but I think after fixing the remaining comments (mark them as resolved) and filing the follow up issues, we can get this one in. We should expect that things will change as we make progress on the project.

  What was happening:

  1. runsc checkpoint pause succeeded.
  2. After that, substrate tried to run runsc state and runsc delete for the app container.
  3. But after checkpointing the root sandbox container, the runsc control server was no longer usable,
     so those post-checkpoint commands failed with connection refused.

  4. That made CheckpointWorkload return an error even though the actual checkpoint had already
     succeeded.

  5. The ActorTemplate stayed stuck in WaitGoldenActor.

  The change removes the post-checkpoint state/delete calls from ateom-gvisor. After checkpoint
  succeeds, it only cleans up the actor network and returns success. This matches the existing contract
  in the code: atelet owns resetting the actor directories after checkpoint/upload, and it already
  calls resetActorDirs(...).

Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
@EItanya
Eitan Yarmush (EItanya) force-pushed the transparent-egress-veth-networking branch from e8b03ee to c25132e Compare June 10, 2026 16:01
@EItanya

Copy link
Copy Markdown
Collaborator Author

I know there are comments discussing the networking setup, but I think after fixing the remaining comments (mark them as resolved) and filing the follow up issues, we can get this one in. We should expect that things will change as we make progress on the project.

Fixed the last link local comment, should be ready to go

Comment thread internal/serverboot/serverboot.go Resolved
@bowei
Bowei Du (bowei) merged commit a3f4474 into agent-substrate:main Jun 11, 2026
8 checks passed
Carles-Figuerola pushed a commit to Carles-Figuerola/substrate that referenced this pull request Oct 30, 2026
…-main-20261030

Sync main with upstream development
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Replace actor eth0 move with worker-owned veth networking

5 participants