Openshift console by default lists Helm charts from RedHat Helm chart repository.
Instances of HelmChartRepository
CRD
capture the details required for accessing a Helm chart repository.
Basic structure of HelmChartRepository
CR
apiVersion: helm.openshift.io/v1beta1
kind: HelmChartRepository
metadata:
name: NAME
spec:
# optional name that might be used by console
# name: CHART_DISPLAY_NAME
connectionConfig:
url: HELM_CHART_REPO_URL
Add Azure Sample Chart Repository
$ cat <<EOF | kubectl apply -f -
apiVersion: helm.openshift.io/v1beta1
kind: HelmChartRepository
metadata:
name: azure-sample-repo
spec:
connectionConfig:
url: https://raw.githubusercontent.com/Azure-Samples/helm-charts/master/docs
EOF
If accessing chart repository requires usage of a custom CA certificate, its content (PEM encoded) needs be
stored under key ca-bundle.crt
within the configmap in openshift-config
namespace. The configmap name
is referred in spec.connectionConfig.ca.name
field.
spec:
connectionConfig:
url: https://my-private-repo.foo.local
ca:
name: helm-ca-cert
Configmaps can be added through UI:
or from CLI:
kubectl create configmap helm-ca-cert \
--from-file=ca-bundle.crt=/path/to/certs/ca.crt \
-n openshift-config
Similarly, client certificate and key can be provided for cases when the repo requires them.
These should be in pem encoded format and stored under key tls.crt
and tls.key
respectively,
within a secret
in openshift-config
namespace. The secret name is referred in spec.connectionConfig.tlsClientConfig.name
field.
spec:
connectionConfig:
url: https://my-private-repo.foo.local
tlsClientConfig:
name: helm-tls-configs
Secrets can be added through UI:
or from CLI:
kubectl create secret generic helm-tls-configs \
--from-file=tls.crt=/path/to/certs/client.crt \
--from-file=tls.key=/path/to/certs//client.key \
-n openshift-config
We can disable listing helm charts in the catalog by adding disabled
flag.
spec:
connectionConfig:
url: https://my-private-repo.foo.local
disabled: true
By adding disabled
flag in the CR, we are disabling helm chart listing from https://my-private-repo.foo.local
repository.
Adding multiple instances of HelmChartRepository
is supported. As the result, /api/helm/charts/index.yaml
endpoint returns combined chart list, containing charts from all accessible repositories.
When requesting repo index through /api/helm/charts/index.yaml
endpoint, HelmChartRepository
CRs and
corresponding configmaps and secrets are read on behalf of logged UI user. By default, only admins have
proper rights. Without that, users see only charts from the default repo. Admins might allow others to
browse configured repo by adding appropriate roles to the cluster.
Example: allow all regular users to browse repos:
$ cat <<EOF | kubectl apply -f -
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: helm-chartrepos-viewer
rules:
- verbs:
- get
- list
apiGroups:
- helm.openshift.io
resources:
- helmchartrepositories
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: helm-chartrepos-view
subjects:
- kind: Group
apiGroup: rbac.authorization.k8s.io
name: 'system:authenticated'
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: helm-chartrepos-viewer
EOF
In case when certificates are needed, additional appropriate roles must
be added in openshift-config
namespace.
Following the previous example, regular users need to
get read access to helm-ca-cert
configmap and helm-tls-configs
secret.
$ cat << EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: openshift-config
name: helm-chartrepos-tls-conf-viewer
rules:
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["helm-ca-cert"]
verbs: ["get"]
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["helm-tls-configs"]
verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: openshift-config
name: helm-chartrepos-tls-conf-viewer
subjects:
- kind: Group
apiGroup: rbac.authorization.k8s.io
name: 'system:authenticated'
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: helm-chartrepos-tls-conf-viewer
EOF
Applying carefully crafted roles, an admin can really fine tune access to declared repos, even achieve different views for appropriate user groups, etc.