Repository navigation
Conversation
`Control.MintActorCertificate` has no consumers: the feature that needed it was scoped out of GA. This removes the public RPC, its request/response types, signing code, validation, authorization rule, and docs, so a future consumer can define the API it needs. Actor JWT minting and the worker certificates used by atunnel remain in place. The internal `atelet.WorkerSupport.MintActorCertificate` is still used and forwards to `WorkerService.MintWorkerActorCertificate`. Fixes agent-substrate#3425 Breaking change: calls to the removed public RPC return `UNIMPLEMENTED`. Code referencing its generated client method or message types must remove those references before upgrading. <details> <summary>Certificate path retained for atunnel</summary> ```mermaid flowchart LR atunnel["atunnel"] -->|MintActorCertificate| atelet["atelet.WorkerSupport"] atelet -->|MintWorkerActorCertificate| worker["ateapi.WorkerService"] worker -->|Sign worker-for-actor certificate| ca["Actor identity CA pool"] ``` </details> AI use: Prepared with Codex. - [x] Focused tests pass (see validation above) - [x] Docs updated --------- Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Why is this needed? (Or link the issue. Open one first for features, API, install or CI changes.) Fixes agent-substrate#3272 Since 1.37, kubelet wedges a device plugin resource if a second Register for the same socket arrives while it is still closing the first stream. The failed connect deregisters both clients by socket path: https://github.com/kubernetes/kubernetes/blob/v1.37.0/pkg/kubelet/cm/devicemanager/plugin/v1beta1/handler.go#L82-L86 So when the first stream ends, kubelet never calls PluginDisconnected, and every later Register fails with "device plugin already connected" until kubelet restarts: https://github.com/kubernetes/kubernetes/blob/v1.37.0/pkg/kubelet/cm/devicemanager/plugin/v1beta1/handler.go#L137-L140 atelet keeps one fsnotify watcher across registration retries, so a kubelet.sock Create that was queued while it retried made it stop and re-register right after registering. It now ignores the Create if kubelet.sock is still the socket it registered with. A node that is already wedged still needs a kubelet restart. <!-- e.g. "AI-assisted, I reviewed and tested it." No AI co-author trailers. --> AI use: I used Claude to trace this through the kubelet source and draft the fix, and reviewed it. <!-- Breaking change? Describe what users must do on upgrade and ask for the `breaking-change` label. --> - [x] Tests pass - [x] Docs updated --------- Signed-off-by: Benjamin Elder <bentheelder@google.com>
…ecurity overview (agent-substrate#3440) The zero-trust tagline said "no unauthorized way out of the sandbox" on the home page and "no way out of the sandbox" in the security overview, and the home page's sandboxing card was labelled "No way out". This changes all three to "no escape", which is a shorter and catchier way to say "no unauthorized" and makes the home page and security overview match. AI use: AI-assisted, I reviewed and tested it. - [x] Tests pass - [x] Docs updated Signed-off-by: Greg Castle <gcastle@google.com>
… ko release image with backoff (agent-substrate#3459) Cherry-pick of agent-substrate#3446 onto `release-1.0`, with no changes (`git cherry-pick -x` of both commits). Needed for the 1.0 release: the v1.0.0-rc.1 release run (https://github.com/agent-substrate/substrate/actions/runs/40925903340) failed in **Publish images** with `DENIED: permission_denied`. ghcr.io can briefly deny pushes to a package it has just created, and this is the first release that creates them. `ate-setup publish release-images` now builds each ko image in its own `ko build`. If an image fails, it logs the error and retries that image, for up to 3 attempts, waiting 10s then 20s (`retry.OnError` with a `wait.Backoff`). AI use: AI-assisted. - [x] Tests pass --------- Signed-off-by: Anna Pendleton <13793293+annapendleton@users.noreply.github.com> Co-authored-by: Anna Pendleton <13793293+annapendleton@users.noreply.github.com>
… image's USER and WORKDIR, with layer file owners kept (agent-substrate#3473) Cherry-pick of agent-substrate#2392 onto `release-1.0` (`git cherry-pick -x` of the squash commit), it applied cleanly with no changes. Containers run as the image's `USER` and start in its `WORKDIR`, and atelet keeps the file owners recorded in image layers. Fixes agent-substrate#2036 for 1.0. AI use: AI-assisted. Clean pick. This carries the same breaking changes as agent-substrate#2392: - After an upgrade or rollback, atelet refuses the existing image cache. Delete `/var/lib/ate/image-cache` on each node once no actor runs on it, as atelet's error says. After an upgrade, a node reboot also works. - A custom atelet securityContext needs `CHOWN`, `DAC_OVERRIDE`, `FOWNER` and `FSETID`. - Images with a `USER` stop running as root, and images with a `WORKDIR` stop starting in `/`. A non-root `USER` has no effective capabilities, so `securityContext.capabilities.add` no longer helps it. - gVisor snapshots of such images don't restore, because `runsc restore` checks each container's user and working directory. Recreate those templates. MicroVM snapshots resume as they were. - Files an earlier run wrote as root into a durable dir stay root-owned. - [x] Tests pass - [x] Docs updated Signed-off-by: Anish Ramasekar <anish.ramasekar@gmail.com> Signed-off-by: Davanum Srinivas <davanum@gmail.com> Signed-off-by: Benjamin Elder <bentheelder@google.com> Co-authored-by: Anish Ramasekar <anish.ramasekar@gmail.com> Co-authored-by: Davanum Srinivas <davanum@gmail.com>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
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.
Bring fork main up to upstream
release-1.0at0c662eba7191f5bc4357d5bbd1bde44dd4ec6861, preserving our patches, so we can cut the fork's release branch from main.Merge the current fork main (
a08c5da504f34d631d7cbdfe4860c4f26ee9183e) with the release tip. The release branched from upstream main at427f2fba76df963d106856e3276ea6aeaa2880e1and includes the approved ko-retry and image USER/WORKDIR backports. No upstream-main-exclusive commit is reachable from this candidate. Release-only files match upstream release exactly, and all 118 fork-modified paths are retained.Resolve the removed actor-certificate constructor argument while keeping the fork's workflow deadline. Add CHOWN, FOWNER, and FSETID to Helm's atelet capabilities to support the release's image-ownership backport, with a chart regression test. Other fork patches remain intact, including AgentGateway, Helm configuration, credentials, and runtime test adjustments.
Before upgrading, stop actors on each node and remove its old image cache (default
/var/lib/ate/image-cache). This release requires layout v3 and refuses v2. There are no database migrations or CRD changes in this merge relative to the fork's current main.Validated
7237ac3f0305ad908c7e2d0de1bd8ee2c9e779e1: the cutoff audit, fresh agent review, Helm lint, 41 chart tests, manifest and CRD parity, migration immutability, and all repository verifiers passed. Verifiers ran across separate attempts after temporary storage filled. All 260 Go packages returned results under the race detector: 198 passed, 61 had no tests, and imagecache had one unprivileged-group assertion failure reproduced three times on unmodified upstream release. Privileged imagecache, tar, and OCI tests passed three shuffled race runs. Runtime E2E and remote CI remain pending.Merge with a merge commit to preserve both histories, then cut
release-1.0from the resulting main commit. The newer upstream-main sync waits until after that release cut.AI use: Codex prepared and audited the merge, resolved integration changes, ran validation, and reviewed the candidate.