rimusz blog

Cloud computing, clusters, containers, Kubernetes, Helm ...

Charting Artifact Hub Through JFrog Container Registry

[Updated May 29th, 2021]

As JFrog Chartcenter.io (a free, central repository of public Helm charts) is in sunset what are alternatives there?

A great many Helm charts have been sent into the ocean of the internet, and it can be hard to know about them all or their whereabouts. To help solve that, Artifact Hub was created to provide a central catalog of the growing number of public Helm chart repositories.

Browsing the awesome Artifact Hub UI, you can see how easy it is to find lots of great Kubernetes-ready apps. Through your browser, you can search for the publicly available charts you need.

With such a large and growing set of listings, wouldn’t it be great if your build automation tools could use Artifact Hub as the single central location to pull Helm charts for your entire organization? But that’s not easy to do; you can access Artifact Hub through the Helm CLI to search Helm charts only.

To remedy this, you can create and maintain a virtual Helm chart repository helmhub in JFrog Container Registry and add to it all required Helm repositories from the Artifact Hub as remote Helm repositories. Then JFrog Container Registry can be that single source of truth.

JFrog Container Registry supports Helm-compatible repositories. These can be local repos for charts that are private to your organization, or remote repositories that proxy a public Helm repo.

jcr helmhub2

You can then pull any Helm chart that is listed by Artifact Hub from the single URL of the virtual helmhub repository in JFrog Container Registry. As a bonus, you’ll also gain the faster retrieval speed of pulling the chart from the proxy in JFrog Container Registry.

Setting up your own Helm Hub

Before You Start

To setup selfhosted Helm Hub you’ll need to make sure to have these prerequisite conditions:

Step 1: Create Remote Helm Repositories

To set remote Helm repositories navigate to: https://jcr.mydomain.com/ui/admin/repositories/remote

Note: Please do not forget to update the Artifactory url with your domain.

Create there new repository type Helm and name it stable with URL https://charts.helm.sh/stable

helm repo

Create one more repository named jfrog with URL https://charts.jfrog.io

Step 2: Create Virtual Helm Repository

To create virtual helmhub repository navigate to: https://jcr.mydomain.com/ui/admin/repositories/virtual

Create there new repository type Helm and name it helmhub.

Add created in the previuos step remote repositories to it:

remote repos

Step 3: Set central Helm repository

Once helmhub virtual repository is done, you can set your Helm client to use helmhub repository as your single central location to consume charts from.

$ helm repo add helmhub https://jcr.mydomain.com/artifactory/helmhub/ --username user --password user_api_key
$ helm repo update

Note: Replace mydomain.com with your domain, also replace admin and adminpassword_ with actual values.

Using the Virtual Helm Repository

The helmhub virtual repository can be accessed through its URL just like any other Artifactory repository. You can access any of the charts held in any of the remote repositories as if they were all held in a single helmhub repository.

For example, you can use the Helm CLI to find charts, as in this search for artifactory in helmhub:

$ helm search repo helmhub/artifactory
NAME                        CHART VERSION   APP VERSION DESCRIPTION
jfrog/artifactory           107.19.4        7.19.4      Universal Repository Manager supporting all maj...
jfrog/artifactory-cpp-ce    107.19.4        7.19.4      JFrog Artifactory CE for C++
jfrog/artifactory-ha        107.19.4        7.19.4      Universal Repository Manager supporting all maj...
jfrog/artifactory-jcr       107.19.4        7.19.4      JFrog Container Registry
jfrog/artifactory-oss       107.19.4        7.19.4      JFrog Artifactory OSS

Take note that the remote repository where the chart is actually held is not identified. That’s the way Artifactory’s virtual repositories work -- they masquerade as a single repo for your convenience.

But if there are two or more charts with the same name, each in different remote repositories, then helm search will only show the chart of that name whose version number is the highest. To see all charts of the same name from all remote repositories, specify -l flag. This will force the Helm CLI to show the long listing, with each version of the chart:

helm search repo helmhub/chart-name -l

Charting the Next Course

Once you’ve set helmhub virtual repository, JFrog Container Registry is ready to serve Helm charts from any of the public repositories that are added from Artifact Hub. Through a virtual repository JFrog Container Registry instantly becomes your system’s single source of truth.

You can also use local Helm repositories in JFrog Container Registry to store the Helm charts for your organization’s private K8s apps. This helps you create a comprehensive Kubernetes registry where all the components of your application are fully traceable through a central artifact manager.

If you choose, you can even combine those local Helm repositories and the helmhub virtual repository into another virtual repository. This provides you with a single URL for access to both private and public Helm chart repos.

As the seas of Helm and Kubernetes grow deeper, they’re getting harder to navigate and JFrog Container Registry becomes an even sturdier vessel, helping you to sail smoothly to port.

Bonus

JFrog Container Registry also supports OCI type registries, so you can have the Helm Hub setup for your OCI registries as well.

One more thing

JFrog Cloud SaaS has a free tier where you can have JFrog Platform: Artifactory, Xray and Pipelines hosted in AWS, Azure and Google clouds. That is the most easiest way to try setting up Helm Hub.

Rimantas (Rimas) Mocevicius

Cloud Native, Kubernetes, Co-founder of Helm, CKA, kubectl: Command-Line Kubernetes in a Nutshell and CoreOS Essentials books author, Kubernaut at JFrog

Planet Earthhttps://rimusz.net