Configuring private Docker registries¶
REANA is able to execute workflows which make use of Docker images hosted on private Docker image registries. You will just need to save the necessary credentials in Kubernetes secrets, and then instruct REANA to pass these secrets to each job's pod.
Obtaining the credentials¶
First of all, you will need to obtain the authentication credentials, and how to do so varies depending on which registry you are using. One possibility would be to create a special service account to access the registry. As an example, the REANA service account is used to authenticate to the private registry provided by CERN's GitLab instance, as shown in Private Docker registries.
Configuring Kubernetes and REANA¶
After obtaining the credentials, you will have to save them in a Kubernetes secret, as explained in the related Kubernetes documentation page Pull an Image from a Private Registry.
In particular, this is how you would create the secret from an already existing Docker configuration file, after running
$ kubectl create secret generic my-cern-gitlab-secret \ --from-file=".dockerconfigjson=$HOME/.docker/config.json" \ --type="kubernetes.io/dockerconfigjson"
As an alternative, you can create the secret by providing the username and password needed to authenticate to the private registry:
$ kubectl create secret docker-registry my-cern-gitlab-secret \ --docker-server="https://gitlab-registry.cern.ch" \ --docker-username="johndoe" \ --docker-password="mysecretpassword" \ --docker-email="firstname.lastname@example.org"
You should then set the
components.reana_workflow_controller.environment.IMAGE_PULL_SECRETS Helm value to the name of the secret, which in the above examples is
components: reana_workflow_controller: environment: IMAGE_PULL_SECRETS: "my-cern-gitlab-secret"
If you would like to configure multiple private Docker registries, you should create one secret for each of them, for example
my-cern-gitlab-secret for CERN GitLab and
my-ghcr-secret for GitHub Container Registry. Then, you have to specify all the secrets in the
components.reana_workflow_controller.environment.IMAGE_PULL_SECRETS Helm value, separating the names with commas:
components: reana_workflow_controller: environment: IMAGE_PULL_SECRETS: "my-cern-gitlab-secret,my-ghcr-secret"