Changelog¶
All notable changes to the Helm chart and deploy tooling are documented here.
Format based on Keep a Changelog. Versioning: SemVer.
[Unreleased]¶
[0.7.3] - 2026-09-25¶
Fixed¶
- Control-plane NetworkPolicy DNS egress allows NodeLocalDNS (port 53 without CoreDNS-only selectors) so the UI can resolve
virtfoundry-apion Kubespray clusters.
[0.7.2] - 2026-09-25¶
Security release aligning charts with core/operator 0.7.2 (PSS hardening, networking/Ingress defaults, secrets fail-closed).
Security¶
- Harden API/UI Deployments (closes #42): non-root + drop ALL + RuntimeDefault seccomp + readOnlyRootFilesystem, requests/limits, UI SA without token automount, Service
80→8080via nginx ConfigMap. Default NetworkPolicy for control plane (networkPolicy.enabled); setallowedIngressNamespacesto restrict. Residuals: env-injected secrets; API egress open — follow-ups on the issue. Core images: UI listens on 8080 / API UID 65532. - Breaking:
platform.networking.isolated.enableddefaults tofalseso a default install is API+UI-only (no hostNetwork bridge DaemonSet). Enabling isolated or public opts into host bridges with documented caps — closes #40. See Host bridges. Kind / homelab overlays that need Multus L2 must setisolated.enabled: true(and usuallybridge.tolerations: [{operator: Exists}]). - Bridge DaemonSet hardening: dedicated SA without token automount, no
hostPID,NET_ADMIN/NET_RAWinstead ofprivileged: true, alpine pinned by digest. Residual: DHCP container stillapk add dnsmasqat runtime (#54). - Breaking:
ingress.enableddefaults tofalse(no cleartext HTTP control plane). Enabling Ingress requiresingress.tlsoringress.allowCleartext: true. Gateway profile usessectionName: websecure; HTTP→HTTPS redirect example at httproute-https-redirect.yaml — closes #41. See Ingress and TLS. api.security.allowedOrigins→ ConfigMapsecurity.allowed_origins(CORS //ws/*Origin allowlist) — closes #51, residual from core#98 / PR #113. Default[]is correct for same-origin UI proxy; split UI/API must list UI origins. See Allowed origins.-
Document CDI importer egress NetworkPolicy in each tenant namespace (created by core
EnsureTenantNamespace; not a release-NS chart object) — closes #49, follow-up to core#95. See Images and templates and example private-mirror policy. -
Breaking: the
virtfoundrychart ships no credential defaults.secrets.rootPassword(min 12 chars) andsecrets.jwtSecret(min 32 chars) are required, and the published sentinelsvirtfoundry/change-me-in-productionare refused — install andhelm templatefail closed instead (#37, core#93) - Platform hook RBAC no longer grants
apiGroups: ["*"] / resources: ["*"]. Each hook Job has its own ServiceAccount:-platform-kubevirt(get/patch onkubevirt/kubevirtonly),-platform-multusand-platform-cdi(rendered only withplatform.multus.install/platform.cdi.install) - Hook RBAC carries
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded, so no platform identity outlives the install/upgrade
Upgrading from 0.7.1 or older leaves the previous wildcard objects behind — Helm never owned them. Remove them once:
kubectl delete clusterrolebinding virtfoundry-platform --ignore-not-found
kubectl delete clusterrole virtfoundry-platform --ignore-not-found
kubectl -n virtfoundry-system delete serviceaccount virtfoundry-platform --ignore-not-found
Added¶
secrets.existingSecret(withsecrets.rootPasswordKey/secrets.jwtSecretKey) — bring your own Secret; recommended for Argo CD and other GitOps flowssecrets.autoGenerateJwtSecret— random 48-char JWT secret on first install, preserved across upgrades vialookupsecrets.allowInsecureDefaults— local-development escape hatch that also setsVF_ALLOW_INSECURE_DEFAULTS=1on the API
Changed¶
helm upgradewithout--set secrets.*reuses the credentials already stored in the live Secret, so upgrades no longer reset the root password or invalidate issued tokens- Documented in Configuration — Secrets
[0.7.1] - 2026-09-04¶
Added¶
- Chart values — full default
values.yamlon the docs site, why--setbelongs on the Helm command platform.storage.defaultClass: auto— select Longhorn when the StorageClass existsplatform.networking.public.autoFromCluster— fill CIDR/gateway/pool from Node InternalIP when you do not--setthemscripts/detect-host-public-net.sh— print a public-net values snippet from kubectl/host
Changed¶
- Charts and default
appVersion0.7.1(core UI hides platform Windows ISO from VM create until the tenant uploads one)
[0.7.0] - 2026-09-02¶
Added¶
- Platform prerequisites — install links for KubeVirt, Multus, CDI, Longhorn, MetalLB, CSI snapshotter
Changed¶
- Charts and default
appVersion0.7.0 - Homepage and quickstart point to prerequisites guide
0.6.0 - 2026-09-01¶
Added¶
virtfoundry-operatorHelm chart (0.6.0) with bundledvirtfoundry.io/v1alpha1CRDsstore.driver=kubernetesprofile documented as default install path
Changed¶
- Breaking (0.x): removed MySQL StatefulSet, worker Deployment, and
values-kubernetes.yamloverlay - Default images
ghcr.io/virtfoundry/{core,ui,operator}:0.6.0 - Install docs list KubeVirt, Multus, CDI prerequisites before Helm commands
- VM snapshot UI screenshots and CRD store terminal shot refresh
Removed¶
- Legacy MySQL store templates and worker chart resources
0.5.0 - 2026-08-16¶
Pre-1.0 release line. VirtFoundry is not 1.0 yet; v1.0.0–v1.5.0 tags were premature and are not a stability contract.
Changed¶
- Chart
version/appVersionand default images set to0.5.0 - Docs and install snippets pin
--version 0.5.0
Docs¶
- Kind laptop guide (no VLAN); public-network underlay without a switch
1.5.0 - 2026-08-11¶
Changed¶
- Default container images bumped to
1.5.0(API, worker, UI)
Added¶
appVersionaligned with core v1.5.0: root delete-tenant, dedicated CPU offerings, Features docs, IFNAMSIZ-safe public bridge default, CI attestation fix
Docs¶
- Features guide under
docs/guide/features/(published on GitHub Pages)
1.4.1 - 2026-08-05¶
Changed¶
- Default container images bumped to
1.4.1(API, worker, UI)
Fixed¶
appVersionaligned with core v1.4.1: volume delete while attached returns 409 Conflict; UI version label synced with release
No chart template or values schema changes — upgrade by bumping the chart version or overriding image tags.
1.4.0 - 2026-08-05¶
Changed¶
- Default container images bumped to
1.4.0(API, worker, UI)
Added¶
appVersionaligned with core v1.4.0: template seed dedup, ISO import polling UI,docs/VM-TEMPLATES.md
No chart template or values schema changes — upgrade by bumping the chart version or overriding image tags.
1.3.0 - 2026-08-05¶
Changed¶
- Default container images bumped to
1.3.0(API, worker, UI)
Added¶
appVersionaligned with core v1.3.0: service offerings CRUD API,/offeringsadmin UI,service_offering_idpersist on VM resize
No chart template or values schema changes — upgrade by bumping the chart version or overriding image tags.
1.2.0 - 2026-08-05¶
Changed¶
- Default container images bumped to
1.2.0(API, worker, UI)
Added¶
appVersionaligned with core v1.2.0: volume attach/detach API, VM Detail Storage tab, volume delete guard,defaultClasswiring for tenant PVCs
No chart template or values schema changes — upgrade by bumping the chart version or overriding image tags.
1.1.1 - 2026-08-04¶
Changed¶
- Default container images bumped to
1.1.1(API, worker, UI)
Fixed¶
appVersionaligned with core v1.1.1: VM create pod NIC naming fix, login page layout and theme support, optimized logo PNGs
No chart template or values schema changes — upgrade by bumping the chart version or overriding image tags.
1.1.0 - 2026-08-04¶
Added¶
- Default container images bumped to
1.1.0(API, worker, UI) - Chart icon updated to application favicon
Changed¶
appVersionaligned with core v1.1.0: default VPC (10.0.0.0/16) per tenant, self-service API keys, UI accordion navigation and header menus, Redux client state, dashboard and favicon updates
No chart template or values schema changes — upgrade by bumping the chart version or overriding image tags.
1.0.0 - 2026-08-03¶
Added¶
- IAM release: users, roles, API keys, permission middleware
- Default container images
1.0.0
0.2.0 - 2026-08-02¶
Added¶
- Public network profile: bridge CNI NAD, configurable IP pool and gateway, optional dnsmasq bridge address
platform.networking.public.bridge.addressandroutePoolViaBridgefor host route steering when multiple bridges share a CIDRallowPodNetwork: truedefault for VM pod + public dual-homed networking- MkDocs documentation site published to GitHub Pages
/docs/
Changed¶
- Platform bridge DaemonSet: optional bridge IP + VM pool host routes via the public bridge
- Default container images bumped to
0.2.0
Fixed¶
- Public VM networking: bridge Multus without host-local IPAM (guest IP via cloud-init pool)
0.1.0 - 2026-08-01¶
Added¶
- Initial Helm chart: API, worker, UI, MySQL
- Gateway API and Ingress profiles
- Platform networking values (
platform.networking.public, isolated bridge) - GitHub Pages Helm repository via chart-releaser
- Deploy scripts and setup helpers (KubeVirt, Multus, CDI)