rimusz blog

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

Charting Helm Hub Through JFrog Container Registry

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, Helm created Helm Hub to provide a central catalog of the growing number of public Helm chart repositories.

Browsing the awesome Helm 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 Helm Hub as the single central location to pull Helm charts for your entire organization? But that’s not easy to do; you can’t access Helm Hub through the Helm CLI.

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 Helm 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 Helm 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 Helm Hub you’ll need to make sure to have these prerequisite conditions:

  • A Kubernetes cluster with RBAC enabled
  • Helm v2 or v3 installed.
  • JFrog Container Registry installed, and user which can add/edit/delete virtual and remote Helm repositories.

Step 1: Create Remote Helm Repositories

To set remote Helm repositories navigate to: https://jcr.mydomain.com/artifactory/webapp/#/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://storage.googleapis.com/kubernetes-charts

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/artifactory/webapp/#/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 helmhub/artifactory
jfrog/artifactory           8.3.0           6.16.0      Universal Repository Manager supporting all major packagi...
jfrog/artifactory-cpp-ce    0.2.0           6.16.0      JFrog Artifactory CE for C++
jfrog/artifactory-ha        1.3.0           6.16.0      Universal Repository Manager supporting all major packagi...
jfrog/artifactory-jcr       0.2.0           6.16.0      JFrog Container Registry
jfrog/artifactory-oss       0.2.0           6.16.0      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 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 Helm 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.

Rimas Mocevicius

Cloud Native, Kubernetes, Co-founder of Helm, CKA, CoreOS Essentials book author, Kubernaut at JFrog

Vilnius, Lithuaniahttps://rimusz.net