Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions charts/substrate/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ See `values.yaml` for the full set; the important keys:
| `atelet.imageCredentialProviderBinDir` | `""` | Host path to the kubelet credential provider binaries; both paths are mounted read-only |
| `credentialProvider.enabled` | `true` | Deploy the Kubernetes Secret provider and route `k8s.io` credential URIs to it. With no provider, every credential injection fails closed |
| `credentialProvider.namespacePolicies` | `[]` | Default-deny atespace-to-namespace grants; the chart includes get-only Secret RBAC for the provider |
| `gvisorReleaseLocation` | `gs://gvisor/releases/release` | Where the default gVisor SandboxConfig fetches the release tarballs it pins, as `<location>/<release>/<arch>/gvisor.tar.zstd`. Point it at a mirror (`gs://` or `s3://`) that serves the same files; each asset's `sha256` is still checked |
| `ateApi.actorJWTIssuer` | `https://<idp-service>.<namespace>.svc` | Issuer placed in actor JWTs; set a stable URL reachable by relying parties |
| `objectStorePlugin.extraEnv` | `[]` | Object storage credentials/settings shared by both object-store plugins |
| `objectStorePlugin.control.resources` / `objectStorePlugin.node.resources` | see `values.yaml` | Resources for the API and node object-store sidecars |
Expand Down
10 changes: 6 additions & 4 deletions charts/substrate/templates/sandboxconfig-gvisor.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ limitations under the License.
# it) matching the worker node's architecture and extracts it locally. To pin a
# different release, add a version below and point defaultVersion at it, or
# create another SandboxConfig and reference it from the WorkerPool.
# gvisorReleaseLocation in values.yaml sets where the tarballs are fetched
# from, for example a mirror.
#
# A bump adds a version and points defaultVersion at it. Keep the
# previous version unless it has a known vulnerability: an actor restores its
Expand All @@ -46,21 +48,21 @@ spec:
assets:
amd64:
gvisor:
url: "gs://gvisor/releases/release/20261026.0/x86_64/gvisor.tar.zstd"
url: {{ printf "%s/20261026.0/x86_64/gvisor.tar.zstd" (.Values.gvisorReleaseLocation | trimSuffix "/") | quote }}
sha256: "708afc62f2ee82d19930c703e85f9dab4f27a78c0aec40c0f55eb1040107f1a7"
arm64:
gvisor:
url: "gs://gvisor/releases/release/20261026.0/aarch64/gvisor.tar.zstd"
url: {{ printf "%s/20261026.0/aarch64/gvisor.tar.zstd" (.Values.gvisorReleaseLocation | trimSuffix "/") | quote }}
sha256: "6257e49955f13e6caceb2c4181c5dc5406c460e805940c944e67ad65553f5b02"
# gVisor release 20261102.0.
- name: v7
state: Enabled
assets:
amd64:
gvisor:
url: "gs://gvisor/releases/release/20261102.0/x86_64/gvisor.tar.zstd"
url: {{ printf "%s/20261102.0/x86_64/gvisor.tar.zstd" (.Values.gvisorReleaseLocation | trimSuffix "/") | quote }}
sha256: "a1439ffbba7d212e0fde32ea79fa9bb51cbc4c5f6c16af1f047260290b861d42"
arm64:
gvisor:
url: "gs://gvisor/releases/release/20261102.0/aarch64/gvisor.tar.zstd"
url: {{ printf "%s/20261102.0/aarch64/gvisor.tar.zstd" (.Values.gvisorReleaseLocation | trimSuffix "/") | quote }}
sha256: "f702ae92ad7a0c4134be34ca23f52966dbb696db0c0f5b8ec439210ab2cd7c6a"
37 changes: 37 additions & 0 deletions charts/substrate/tests/sandboxconfig_gvisor_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Copyright 2026 The Agent Substrate Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

suite: gVisor sandbox config
templates:
- sandboxconfig-gvisor.yaml
tests:
- it: fetches the gVisor releases from Google Cloud Storage by default
asserts:
- equal:
path: spec.versions[1].assets.amd64.gvisor.url
value: gs://gvisor/releases/release/20261102.0/x86_64/gvisor.tar.zstd

- it: fetches the gVisor releases from gvisorReleaseLocation, keeping each pinned sha256
set:
gvisorReleaseLocation: s3://mirror/gvisor/releases/release/
asserts:
- equal:
path: spec.versions[0].assets.arm64.gvisor.url
value: s3://mirror/gvisor/releases/release/20261026.0/aarch64/gvisor.tar.zstd
- equal:
path: spec.versions[1].assets.amd64.gvisor.url
value: s3://mirror/gvisor/releases/release/20261102.0/x86_64/gvisor.tar.zstd
- equal:
path: spec.versions[1].assets.amd64.gvisor.sha256
value: a1439ffbba7d212e0fde32ea79fa9bb51cbc4c5f6c16af1f047260290b861d42
7 changes: 7 additions & 0 deletions charts/substrate/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,13 @@ credentialProvider:
cpu: 500m
memory: 256Mi

# Where the default gVisor SandboxConfig (gvisor-default) fetches the gVisor
# release tarballs it pins: each asset is
# <gvisorReleaseLocation>/<release>/<arch>/gvisor.tar.zstd. A mirror serves the
# same files under the same paths, at a location the object-store plugin opens
# (gs:// or s3://); atelet still checks each asset's sha256.
gvisorReleaseLocation: gs://gvisor/releases/release

# Name of a ConfigMap in the release namespace that supplies per-environment
# overrides for ate-api-server (ATE_API_POSTGRES_READ_WRITE_CONNECTION_STRING, ...).
# Mounted via envFrom with optional=true. Created by the chart from these values.
Expand Down