agent-platform release v4.28.15

Fixed

  • The model pods pass the fleet’s restricted Pod Security Standard, and the chart adds no container to them (giantswarm/agent-platform#518; proof 1 of giantswarm/giantswarm#37639). The connectivity chart’s model-serving pods policy injected hf-cache-init into every model pod — root, CHOWN/DAC_OVERRIDE/FOWNER added, chmod 0777 of the cache subdirectory — and the fleet’s Kyverno set denied the pod on two rules the chart’s PolicyException does not name (disallow-capabilities-strict/adding-capabilities-strict, require-run-as-non-root-user/run-as-non-root-user): on gazelle (4.28.14) the LLMInferenceService’s ReplicaSet was refused on every attempt (validate.kyverno.svc-fail, ReplicaFailure=True), no pod, no node, nothing served — the first time the container reached admission at all (#506 made the rule match these pods, #514 made it idempotent). The init container is removed, neither excepted nor made rootless: the redirect-model-storage-* rules give the pod the claim’s fsGroup next to the claim mount (modelServing.cache.fsGroup, default 1000 — the uid and fsGroup model-manager’s cache pods use; a pod that declared another fsGroup gets the claim’s, one claim, one group), and the kubelet does the rest — it makes the claim’s contents group-owned, group-writable and setgid on every mount (the CSI driver’s fsGroupPolicy permitting: EBS gp3 and Azure Disk apply it) and creates a missing subPath directory with the claim root’s mode and group, so <claim>/<model> is root:1000 2775 and the storage-initializer (uid 1000), the runtime and model-manager’s download Job (uid 1000, fsGroup 1000) write it, mkdir -m 0777 -p it and rm -rf it without root or a capability (the kubelet’s exact sequence replayed in a container; without the fsGroup uid 1000 is denied, which is what the init container had papered over). modelServing.policies.cacheInit (image, resources) is gone. The chart’s PolicyException is unchanged: it names the four rules the vLLM image and the storage-initializer violate, and nothing the chart adds needs one. make verify-model-serving-policies applies the fleet’s five restricted-PSS ClusterPolicies (tests/fixtures/restricted-pss-clusterpolicies.yaml: kyverno-policies 3.7.2 as installed on a management cluster, every rule Enforce) with the chart’s exception over the mutated pod of both shapes and holds every rule to pass or skip (the four excepted rules skip, adding-capabilities-strict and run-as-non-root-user pass), the bare pod to fail exactly the four excepted rules, and a pod with the 4.28.14 init container to fail exactly the two that denied it on gazelle; it holds the mutated pod’s fsGroup and that the mutation adds no container. The live half — the workload pod admitted on the first ReplicaSet attempt and the predictor Ready — is the proof’s.