agent-platform release v1.1.27
Fixed
klausGateway.a2a: set additionalProperties: true in the values schema so the klaus-gateway
subchart’s own a2a keys (url, saToken, …) pass through validation. This was missed when
klausGateway.routing/lifecycle were widened, leaving the agentic-platform HelmRelease stuck
UpgradeFailed on management clusters whose rendered config supplies klausGateway.a2a.{url,saToken}.kagent.controllerRoute: add outer public HTTPRoute (kagent-controller-public) on the Envoy
Gateway so the kagent A2A endpoint is reachable at https://<hostname>/kagent/.... The inner
kagent-controller route (agentgateway data plane) was already present, but the missing outer
route caused Envoy to return 404 for all requests to the hostname before they reached the
agentgateway pod. Configurable via kagent.controllerRoute.parentRef (defaults to
giantswarm-default / envoy-gateway-system).AgentgatewayBackend/kagent: add spec.policies.auth.passthrough: {} so the validated muster JWT
is forwarded to kagent-controller. The agentgateway JWT filter strips the Authorization header
after validation; without passthrough the controller’s AUTH_MODE=trusted-proxy receives no
header and returns 401 for every authenticated request.helm.sh/chart label: truncating long dev-build versions at 63 characters could leave a trailing ., producing an invalid label value and failing the Helm install/upgrade. The chart helper now trims trailing . as well as -.templates/kagent/agents/remotemcpservers.yaml: headersFrom[].valueFrom used a secretKeyRef block, but the kagent v1alpha2 ValueSource schema is flat (type/name/key with type: Secret). The CRs failed admission with valueFrom.key: Required value.templates/kagent/agents/muster-token-job.yaml: mint the muster token via the TokenRequest API (kubectl create token, duration agents.muster.tokenDuration, default 8760h) instead of a legacy kubernetes.io/service-account-token Secret. Legacy Secret tokens carry iss: kubernetes/serviceaccount and no exp, so muster’s trustedIssuers JWT validation (cluster OIDC issuer + required expiry) can never accept them; every RemoteMCPServer call failed with Unauthorized. The legacy token Secret is removed; the token now rotates on every install/upgrade.templates/kagent/agents/muster-sa.yaml: the token-init Role granted create on Secrets restricted by resourceNames, which Kubernetes RBAC never matches for create requests (the object name is not part of the authorization attributes). The hook Job failed with secrets is forbidden on first install. create is now an unrestricted (namespace-scoped) rule; get/patch stay name-restricted.templates/kagent/declarative-agent-pod-security.yaml: remove seccompProfile: RuntimeDefault from the injected pod and container security contexts. RuntimeDefault blocks clone(CLONE_NEWUSER) which bwrap (used by srt internally) requires for user-namespace isolation, causing every shell/bash tool invocation to fail with bwrap: No permissions to create a new namespace.templates/kagent/policy-exception.yaml (new): PolicyException in the policy-exceptions namespace exempting pods and deployments labelled app: kagent in the kagent namespace from the cluster-wide restrict-seccomp-strict Kyverno policy. Required because the cluster enforces seccomp profiles and we cannot simply omit seccompProfile without an exception.templates/kagent/declarative-agent-srt-settings.yaml (new): Kyverno policy that patches the srt-settings.json key in agent config Secrets (labelled app: kagent) on admission to include "enableWeakerNestedSandbox": true. Without this flag, bwrap attempts to bind-mount /proc into its new PID namespace, which fails inside unprivileged containers with bwrap: Can't mount proc on /newroot/proc: Operation not permitted. The flag is the documented srt workaround for container environments (sandbox/linux-sandbox-utils.ts); the kagent controller does not expose it through any CR field.templates/kagent/declarative-agent-pod-security.yaml: extend the security context mutation to SandboxAgent CRs. SandboxAgent is a distinct kind from Agent and was not covered by the existing rule; pods created via the agents.x-k8s.io Sandbox backend were blocked by disallow-capabilities-strict, disallow-privilege-escalation, and require-run-as-nonroot Kyverno policies.