If you want to deploy the Varnish Virtual Registry on a Kubernetes cluster, you can use our official Helm Chart.
The Helm Chart has a whole range of configurable settings that are listed on the chart’s README.md file on GitHub.
You can simply run helm install varnish-virtual-registry oci://docker.io/varnish/orca-chart to deploy Varnish Virtual Registry to your Kubernetes cluster using Helm. However, it makes sense to configure your Kubernetes deployment by overriding some settings in values.yaml.
Create a values.yaml file that contains the configuration settings you want to override. The orca section of the values.yaml file reflects the configuration specification of the Varnish Virtual Registry.
The following code block illustrates how you can override values.yaml to configure the supported registries of your Virtual Registry deployment:
orca:
virtual_registry:
registries:
- name: dockerhub
default: true
remotes:
- url: https://docker.io
- name: quay
remotes:
- url: https://quay.io
- name: ghcr
remotes:
- url: https://ghcr.io
- name: k8s
remotes:
- url: https://registry.k8s.io
- name: npmjs
remotes:
- url: https://registry.npmjs.org
- name: go
remotes:
- url: https://proxy.golang.org
- name: github
remotes:
- url: https://github.com
- name: gitlab
remotes:
- url: https://gitlab.com
We have tutorials that teaches you how to enable TLS and register a custom license using the Helm Chart:
Run the following command to install the Helm Chart and deploy the Virtual Registry to your Kubernetes cluster:
helm install -f values.yaml varnish-virtual-registry oci://docker.io/varnish/orca-chart
This command uses the custom values.yaml file to override the standard configuration. The name of the Helm deployment in this case is varnish-virtual-registry.
You can run helm status varnish-virtual-registry to check the status of the Helm deployment, and you can run kubectl get all -A -l "app.kubernetes.io/name=orca-chart,app.kubernetes.io/instance=varnish-virtual-registry" to check the status of the deployment in Kubernetes.
Varnish Virtual Registry has a health-check endpoint at /healthz, and will respond with a 200 OK to all requests on that path regardless of Host.
Kubernetes offers different ways to reach a container from the outside world: through a cluster IP address, using a port on a node, using ingress or gateway access.
For the sake of simplicity, we’ll do a simple test by setting up temporary port forwarding. Simply run the following command to link port 80 of your Varnish Virtual Registry container on the Kubernetes cluster to port 8080 on your local machine:
kubectl port-forward -n default svc/varnish-virtual-registry-orca-chart 8080:80
The default configuration has the Virtual Registry listening for HTTP traffic on port 80. If you have changed this to a different port, make sure to adjust your kubectl port-forward command.
Once the port forwarding is set up, you can access http://localhost:8080/healthz as shown below:
curl http://localhost:8080/healthz -I
HTTP/1.1 200 OK
Date: Wed, 29 Oct 2025 16:17:17 GMT
Content-Length: 0
Accept-Ranges: bytes
Connection: keep-alive