Ein Helm-Chart Repository besteht lediglich aus den per tar archivierten und mit gzip komprimierten Charts, einer sogenannten Provenienz-Datei pro Chart und einer index.yaml.

Die Struktur eines Helm-Chart Repositories sieht üblicherweise wie folgt aus:

/path/to/chart/folder/
  |
  |- index.yaml
  |
  |- chart-a-1.0.0.tgz
  |
  |- chart-a-1.0.0.tgz.prov
  |
  |- chart-b-1.0.0.tgz
  |
  |- chart-b-1.0.0.tgz.prov

Die Provenienz-Dateien werden während der Archivierung eines Charts erzeugt. Mehr Detailinformationen zur Provienenz und Integrität von Helm-Charts gibt es unter https://helm.sh/docs/topics/provenance/.

Vorraussetzungen

  • Helm CLI
  • GPG und ein Schlüsselpaar

Helm-Chart erzeugen

Um ein existierendes Helm-Chart zu packen und die Provenienzdatei zu erzeugen, wird mit der Helm CLI folgender Aufruf ausgeführt:

helm package --sign --key 'Sascha Retter' --keyring /path/to/private-keyring /path/to/chart 

Wie im Github-Issue https://github.com/helm/helm/issues/2843 beschrieben, nutzt Gpg seit Version 2.1 ein neues Format, um den Schlüsselbund zu speichern. Leider ist dieses Format bisher nicht kompatibel mit Helm. Daher muss einmalig der Schlüsselbund in das alte Gpg Format exportiert werden.

gpg  --export-secret-keys > /path/to/private-keyring

Signatur überprüfen

Die Signatur des Charts kann mit folgendem Aufruf ausgegeben werden:

helm verify chart-a-0.1.0.tgz

# This command generates:
# Signed by: Name <email>
# Using Key With Fingerprint: 915D36BB00043043FED02C49F8F150FC16506555
# Chart Hash Verified: sha256:bf52483e60a73106ab64106a36ba21f765ea5e69a4105b081b5cb9e864ce7e1f

Der Aufruf, um während der Installation die Signatur zu prüfen, sieht wie folgt aus. Damit die Verifizierung erfolgen kann, muss der entsprechende öffentliche Schlüssel im Schlüsselbund enthalten sein. Um den Pfad zum Schlüsselbund anzugeben, kann wie oben beim Signieren der Parameter --keyring verwendet werden. Außerdem muss ggf. vorher der öffentliche Schlüsselbund exportiert werden.

# Export keyring
gpg  --export > /path/to/pub-keyring

# Install and verify
helm install --generate-name --verify mychart-0.1.0.tgz #--keyring pub-kreyring

Repository Index

Die index.yaml-Datei wird erzeugt durch den Aufruf:

helm repo index

Codeberg

Codeberg e.V. bietet unter https://codeberg.org eine non-profit Softwareentwicklungsplattform auf Basis von Gitea an.

Mehr Informationen zu Codeberg gibt es unter: https://docs.codeberg.org/getting-started/what-is-codeberg/


Hosting mit Codeberg Pages

Pro Benutzerkonto stellt Codeberg eine Page (statische Website) zur Verfügung. Damit bieten Codeberg Pages eine schöne Möglichkeit, Helm-Repositories zu hosten. Da nur eine Page pro Benutzerkonto bzw. Organisation zur Verüfgung steht, ist es ratsam, das Helm-Chart Repository von Beginn an in einem Unterverzeichnis z.B. charts einzurichten.

Um eine Codeberg-Page einzurichten, legen wir ein Repository pages und darin wie oben beschrieben z.B. ein Verzeichnis charts an. In dieses Verzeichnis kopieren wir die index.yaml, die gepackten Charts und die jeweils zugehörige Provenienzdatei.

Die codeberg.pages sind unter der URL gemäß dem Schema https://<your_username>.codeberg.page zu erreichen. Damit ist das Chart-Repository erreichbar unter:

https://<your_username>.codeberg.page/charts

Es besteht nun die Möglichkeit, neben der index.yaml auch eine index.html abzulegen, die für Benutzer Informationen zum Helm-Chart-Repository zur Verfügung stellt. Außerdem wäre hier ein geeigneter Platz, um einen Link zum Download des öffentlichen Schlüssels anzubieten, mit dem die Charts im Repository signiert sind.

Chart Repository hinzufügen und Helm-Charts installieren

Wir können damit wie gewohnt unser Repository mit dem folgenden Aufruf der Helm CLI hinzufügen:

helm repo add https://<your_username>.codeberg.page/charts

Danach können wir beispielsweise mit folgendem Aufruf unser chart-a installieren:

helm upgrade --verify --install releasename chart-a