design/20240625.push-charts-to-oci.md
This checklist contains actions which must be completed before a PR implementing this design can be merged:
This design proposes to start pushing cert-manager's Helm charts to an OCI registry - quay.io/jetstack.
It proposes no other changes - specifically, after this design is implemented charts would still be pushed to their current location
charts.jetstack.io - for every release.cert-manager's Helm charts are the primary way we encourage users to install the project. The same applies to sub-projects, each of which has a Helm chart.
All Helm charts for all projects are currently hosted in a Helm repository available at https://charts.jetstack.io. This is primarily
for simplicity and for historical reasons - that location was the easiest back when we started building charts and there's been no pressing
need to change.
There is increasing pressure to change this. Firstly, there seems to be a movement away from Helm repositories in general. There have been several requests for cert-manager to push charts to an OCI registry and claims that certain tools no longer support Helm repositories.
Secondly, we're conscious of trying to replace references to any one company in the cert-manager projects and the use of the Jetstack domain name is obviously in tension with that. cert-manager seeks to be an entirely vendor-neutral project and the use of this domain for charts is one of the few remaining places where the cert-manager project still references Jetstack.
While this proposal doesn't directly address this vendor-neutrality issue, it should make it simpler to address in the future as migrating from one OCI registry to another should be simpler than migrating a repository.
The use of the jetstack.io domain also implies that Jetstack (now part of Venafi) has some say over access to this repo and who can push to it.
The company could reasonably request that have non-Venafi maintainers not be given access to the chart repo. This hasn't been a problem in practice
but the risk is not ideal for a project which seeks to encourage contributors from any company.
In addition, Venafi uses charts.jetstack.io for other, non-CNCF, charts. Access controls over who can push to the Helm repo are well
established and require code reviews, but given cert-manager's size and wide level of adoption it would be prudent to isolate it from
other unrelated projects. This mixing has caused issues for users.
charts.jetstack.ioSince this proposal is only to add a new source for fetching Helm charts, there are few risks anticipated.
One potential risk is that our current approach for signing Helm charts might need to be tweaked. We currently produce
"detached" .prov signature files for cert-manager which are served on charts.jetstack.io alongside the charts
themselves.
Some experimentation may be required to work out how these detached signatures work with OCI registries. This isn't urgent, as we'll continue to serve the signatures on our existing chart repository and there are other methods of signing available with OCI registries - notably, using sigstore / cosign. Note that the detached signatures are only relevant for cert-manager itself and not subprojects.
Changing cmrel will apply to future releases of cert-manager (v1.16.x) but also to past releases. Unless we make efforts to tag a cmrel version which doesn't push charts to OCI registries, or otherwise disable the pushing of charts for older cert-manager releases, we'll start pushing charts to OCI registries if we do a patch release of an existing supported cert-manager version.
This risk is minimal since - once again - the new registry won't be a default.
First, we'll create a new repository in quay.io, called quay.io/jetstack/charts.
Next, add a new step to the release process which pushes Helm charts to an OCI registry. This would be a code change in cmrel.
Once this publishing step is confirmed to work for new charts, we'll write a small one-off script which pushes all older versions of the chart to the new registry, or else find some off-the-shelf script to do the same thing.
Once the changes to cmrel are made, we should be able to do an alpha release of cert-manager v1.16.0 and install cert-manager locally in a kind cluster using the chart from the OCI registry.
Obviously no feature gates will apply to this change.
Once all cert-manager charts are pushed to the new registry and all older cert-manager charts are mirrored, there'll be future work to publish subproject charts and the related mirroring of those charts. This design does not attempt to solve that problem, and focuses on cert-manager first.
N/A
N/A
N/A
N/A
N/A
N/A
N/A
This proposal does not remove or break any functionality for users. For maintainers, pushing to multiple repositories would make gathering pull metrics more complex.
A reasonable alternative to using OCI registries would be for the cert-manager project to host its own
Helm chart repository (e.g., charts.cert-manager.io).
This would require running additional infrastructure (similar to what charts.jetstack.io does), and would
not be satisfactory for those users who've been asking for an OCI registry for compatibility reasons.
In short, running a repo seems to be more work for less gain than pushing to an OCI registry.