Repository navigation
feat: FUSE-mount pod volumes instead of one-time copying - #6
Merged
Merged
Conversation
Replace the one-shot CopyFiles RPC with a read-only FUSE mount backed by a new BridgeFileSystemService over the existing proxy gRPC connection. Each VolumeMount on the source container is exposed at the same absolute path inside the devcontainer, so rotated tokens, updated ConfigMaps, and projected volumes (IRSA / workload identity) reflect the live pod state instead of a stale snapshot taken at intercept startup. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
vercel-eddie
added a commit
that referenced
this pull request
May 19, 2026
go-fuse (added by FUSE-mount feature in #6) only compiles on unix; the windows builder fails with undefined symbols. Drop the windows entry from both edge and tagged release matrices. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
CopyFilesRPC with a read-only FUSE mount backed by a newBridgeFileSystemServiceon the existing proxy gRPC connection.VolumeMounton the source container is exposed at the same absolute path inside the devcontainer, so rotated tokens, updated ConfigMaps, and projected volumes (IRSA / workload identity) reflect the live pod state instead of a stale snapshot.copyFiles→mountPaths; create now addsSYS_ADMIN,--device /dev/fuse, andapparmor:unconfinedonly when the source has VolumeMounts.Design
proto/bridge/v1/filesystem.proto):BridgeFileSystemServicewithStat,ReadDir,ReadFile(offset/size chunked at 1 MiB),ReadLink. Stateless — every RPC takes an absolute path.pkg/fsmount/server.go): registered on the same gRPC port as the proxy. Authorizes every path against the configured--mount-rootsallowlist; returnsPermissionDeniedfor anything outside.pkg/fsmount/client.go): go-fuse v2 nodes that proxy each VFS op to a gRPC call. 5 s attribute/entry cache,FOPEN_KEEP_CACHE. Writes returnEROFS.injectProxyImagederives--mount-rootsfrom the source container'sVolumeMounts;GetMetadataadvertises them;bridge interceptcallsfsmount.Mountper path once the gRPC connection is up. Mount failures are non-fatal — network interception still works without/dev/fuse.CopyFilesRPC,copyFilesFromProxyin intercept, the now-unusedvolumeMountPathshelper inbundle.go.Test plan
go test ./...— all packages greenfsmount.Server: allowlist auth,Stat/ReadDir/ReadFile/ReadLink, error mappinginjectProxyImage: emits--mount-rootswhen source has VolumeMounts, omits it otherwiselinux-tagged integration test that runs the gRPC server in-process and verifies the FUSE round trip (auto-skips when/dev/fuseis unavailable)bridge create -c userserviceand confirm/var/run/secrets/...and other source mounts are live inside the devcontainerNotes
maininpkg/k8s/resources/transforms_test.go(staleResourceslice /Transformmethod API).pkg/mutagenis still in the tree but was already unreferenced — left alone to keep this PR focused.🤖 Generated with Claude Code