Chapter 1. Getting started with configuration
Red Hat Quay can be deployed in a standalone manner, or on an existing OpenShift cluster using the Operator. The methods you use to create, retrieve, update and validate the Red Hat Quay configuration vary slightly, depending on the type of deployment you are using. However, the core configuration options are fundamentally the same for all types of deployment, and these options can be manipulated:
-
Directly, by editing the
config.yaml
file. See the section Editing the configuration file. - Programmatically, using the configuration API. See the section Using the configuration API.
- Visually, using the configuration tool UI. See the section Using the configuration tool.
You can install Quay on OpenShift using the Operator, without the need to supply any initial configuration, as the Operator will supply sensible defaults to deploy the registry. For a standalone deployment, however, you must supply a minimal level of configuration before the registry can be started. The minimal requirements can be determined using the configuration API and are documented in the section
Once you have Quay deployed with your initial configuration, you should retrieve and save the full configuration from the running system as it may contain extra, generated values that you will need in future when restarting or upgrading your system.
1.1. Configuration updates for Quay 3.6 Copy linkLink copied to clipboard!
1.1.1. New configuration fields Copy linkLink copied to clipboard!
-
FEATURE_EXTENDED_REPOSITORY_NAMES: Support for nested repositories and extended repository names has been added. This change allows the use of
/
in repository names needed for certain OpenShift Container Platform use cases. For more information, see Configuring nested repositories -
FEATURE_USER_INITIALIZE: If set to true, the first User account may be created via API
/api/v1/user/initialize
. For more information, see Pre-configuring Quay for automation -
ALLOWED_OCI_ARTIFACT_TYPES: Helm, cosign, and ztsd compression scheme artifacts are built into Red Hat Quay 3.6 by default. For any other OCI media type that is not supported by default, you can add them to the
ALLOWED_OCI_ARTIFACT_TYPES
configuration in Quay’sconfig.yaml
For more information, see Adding other OCI media types to Quay -
CREATE_PRIVATE_REPO_ON_PUSH: Registry users now have the option to set
CREATE_PRIVATE_REPO_ON_PUSH
in their config.yaml toTrue
orFalse
depending on their security needs. - CREATE_NAMESPACE_ON_PUSH: Pushing to a non-existent organization can now be configured to automatically create the organization.
1.1.2. Deprecated configuration fields Copy linkLink copied to clipboard!
-
FEATURE_HELM_OCI_SUPPORT: This option has been deprecated and will be removed in a future version of Red Hat Quay. In Red Hat Quay 3.6, Helm artifacts are supported by default and included under the
FEATURE_GENERAL_OCI_SUPPORT
property. Users are no longer required to update their config.yaml files to enable support.
1.2. Editing the configuration file Copy linkLink copied to clipboard!
Deploying the registry in standalone mode requires a minimal configuration - see section Section 1.5, “Minimal configuration”.
The configuration file is validated on startup of the registry, and any issue will be highlighted in the output:
It is possible to use the configuration API to validate the configuration, but this requires starting the Quay container in config mode
For changes to take effect, the registry needs to be restarted.
1.3. Location of configuration file in a standalone deployment Copy linkLink copied to clipboard!
For a standalone deployment, the config.yaml
file must be specified when starting the Quay registry. This file is located in the config volume, so in the following example, the config file is located at $QUAY/config/config.yaml
:
sudo podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay \ -v $QUAY/config:/conf/stack:Z \ -v $QUAY/storage:/datastorage:Z \ registry.redhat.io/quay/quay-rhel8:v3.6.8
$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
--name=quay \
-v $QUAY/config:/conf/stack:Z \
-v $QUAY/storage:/datastorage:Z \
registry.redhat.io/quay/quay-rhel8:v3.6.8
1.4. Configuring Quay on OpenShift using the command line and API Copy linkLink copied to clipboard!
Once deployed, you can configure the Quay application by editing the Quay configuration bundle secret spec.configBundleSecret
and you can also change the managed status of components in the spec.components
object of the QuayRegistry resource
The Operator does not watch the spec.configBundleSecret
resource for changes, so it is recommended that configuration changes be made to a new Secret
resource and that the spec.configBundleSecret
field is updated to reflect the change. In the event there are issues with the new configuration, it is simple to revert the value of spec.configBundleSecret
to the older Secret
.
The procedure for changing the configuration involves:
- Determining the current endpoints and secrets
- Downloading the existing configuration bundle, if Red Hat Quay has already been deployed on OpenShift
-
Creating or updating the
config.yaml
configuration file - Assembling any SSL certs required for Quay, or custom SSL certs needed for services
- Creating a new config bundle secret, using the config file and any certs
- Creating or updating the registry, referencing the new config bundle secret and specifying any over-rides for managing components
- Monitoring the deployment to ensure successful completion and that the configuration changes have taken effect
Alternatively, you can use the config editor UI to configure the Quay application, as described in the section Chapter 4, Using the config tool to reconfigure Quay on OpenShift.
1.4.1. Determining QuayRegistry endpoints and secrets Copy linkLink copied to clipboard!
You can examine the QuayRegistry resource, using oc describe quayregistry
or oc get quayregistry -o yaml
, to determine the current endpoints and secrets:
The relevant fields are:
-
registryEndpoint
: The URL for your registry, for browser access to the registry UI, and for the registry API endpoint -
configBundleSecret
: The config bundle secret, containing theconfig.yaml
file and any SSL certs -
configEditorEndpoint
: The URL for the config editor tool, for browser access to the config tool, and for the configuration API -
configEditorCredentialsSecret
: The secret containing the username (typicallyquayconfig
) and the password for the config editor tool
To determine the username and password for the config editor tool:
Retrieve the secret:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Decode the username:
echo 'cXVheWNvbmZpZw==' | base64 --decode
$ echo 'cXVheWNvbmZpZw==' | base64 --decode quayconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Decode the password:
echo 'SkZwQkVKTUN0a1BUZmp4dA==' | base64 --decode
$ echo 'SkZwQkVKTUN0a1BUZmp4dA==' | base64 --decode JFpBEJMCtkPTfjxt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.2. Downloading the existing configuration Copy linkLink copied to clipboard!
There are a number of methods for accessing the current configuration:
Using the config editor endpoint, specifying the username and password for the config editor:
curl -k -u quayconfig:JFpBEJMCtkPTfjxt https://example-registry-quay-config-editor-quay-enterprise.apps.docs.quayteam.org/api/v1/config
$ curl -k -u quayconfig:JFpBEJMCtkPTfjxt https://example-registry-quay-config-editor-quay-enterprise.apps.docs.quayteam.org/api/v1/config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow Using the config bundle secret
Get the secret data:
oc get secret -n quay-enterprise example-registry-quay-config-bundle-jkfhs -o jsonpath='{.data}'
$ oc get secret -n quay-enterprise example-registry-quay-config-bundle-jkfhs -o jsonpath='{.data}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow Decode the data:
echo 'QUxMT1dfUFVMTFN...U1FOiAzMG0K' | base64 --decode
$ echo 'QUxMT1dfUFVMTFN...U1FOiAzMG0K' | base64 --decode
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.3. Using the config bundle to configure custom SSL certs Copy linkLink copied to clipboard!
You can configure custom SSL certs either before initial deployment or after Red Hat Quay is deployed on OpenShift, by creating a new config bundle secret. If you are adding the cert(s) to an existing deployment, you must include the complete existing config.yaml
in the new config bundle secret, even if you are not making any configuration changes.
Create the secret using embedded data or using files:
Embed the configuration details directly in the Secret resource YAML file, for example:
custom-ssl-config-bundle.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Next, create the secret from the YAML file:
oc create -f custom-ssl-config-bundle.yaml
$ oc create -f custom-ssl-config-bundle.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Alternatively, you can create files containing the desired information, and then create the secret from those files:
oc create secret generic custom-ssl-config-bundle-secret \ --from-file=config.yaml \ --from-file=extra_ca_cert_my-custom-ssl.crt=my-custom-ssl.crt
$ oc create secret generic custom-ssl-config-bundle-secret \ --from-file=config.yaml \ --from-file=extra_ca_cert_my-custom-ssl.crt=my-custom-ssl.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Create or update the QuayRegistry YAML file
quayregistry.yaml
, referencing the created Secret, for example:quayregistry.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Deploy or update the registry using the YAML file:
oc apply -f quayregistry.yaml
oc apply -f quayregistry.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5. Minimal configuration Copy linkLink copied to clipboard!
For a standalone deployment, configuration options are required for the following features:
- Server hostname
- HTTP or HTTPS
- Authentication type, for example, Database or LDAP
- Secret keys for encrypting data
- Storage for images
- Database for metadata
- Redis for build logs and user events
- Tag expiration options
1.5.1. Sample minimal configuration file Copy linkLink copied to clipboard!
A sample minimal config file, using local storage for images, is shown below:
$QUAY/config/config.yaml
The SETUP_COMPLETE
field indicates that the configuration has been validated. You should use the config editor tool to validate your configuration before starting the registry.
1.5.2. Local storage Copy linkLink copied to clipboard!
Using local storage for images is only recommended when deploying a registry for proof of concept purposes. In this case, storage is specified on the command line when starting the registry, mapping a local directory $QUAY/storage
to the /datastorage
path in the container:
sudo podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay \ -v $QUAY/config:/conf/stack:Z \ -v $QUAY/storage:/datastorage:Z \ registry.redhat.io/quay/quay-rhel8:v3.6.8
$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
--name=quay \
-v $QUAY/config:/conf/stack:Z \
-v $QUAY/storage:/datastorage:Z \
registry.redhat.io/quay/quay-rhel8:v3.6.8
1.5.3. Cloud storage Copy linkLink copied to clipboard!
Storage configuration is detailed in the section Image storage. It is useful to compare the difference when using cloud storage, for example, on Google Cloud Platform:
$QUAY/config/config.yaml
When starting the registry using cloud storage, no configuration is required on the command line:
sudo podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay \ -v $QUAY/config:/conf/stack:Z \ registry.redhat.io/quay/quay-rhel8:v3.6.8
$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
--name=quay \
-v $QUAY/config:/conf/stack:Z \
registry.redhat.io/quay/quay-rhel8:v3.6.8