Air Gap environment (aka disconnected environment)

May 5, 2026 ยท View on GitHub

When we have our cluster on a air gap or proxy environment, we need to copy the actual images into our custom registry and update image details via environment variables on the operator deployment under the container tekton-operator-lifecycle as follows, This will allow us to use images from our custom registry.

Rewrite image registry

You can rewrite the registry host of all images managed by the operator by setting the TEKTON_REGISTRY_OVERRIDE environment variable on the tekton-operator-lifecycle container. This keeps the original repository path and tag/digest, and only changes the registry host.

If not set, no change is applied (default behavior).

We can rewrite the actual registry ghcr.io of all images by simply set the environment variable TEKTON_REGISTRY_OVERRIDE ad follow:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tekton-operator
  namespace: tekton-operator
spec:
  template:
    spec:
      containers:
        - name: tekton-operator-lifecycle
          env:
            # Optional: globally rewrite registry host for all images
            - name: TEKTON_REGISTRY_OVERRIDE
              value: my-internal-registry.io/my-tekton-folder
            # You can still specify per-image values; their registry host will be rewritten to the override above
            - name: IMAGE_DASHBOARD_TEKTON_DASHBOARD
              value: ghcr.io/tektoncd/dashboard:v0.48.0

Behavior and precedence:

  • If TEKTON_REGISTRY_OVERRIDE is unset, images are taken from per-image env vars (if set) or from the shipped defaults.
  • If TEKTON_REGISTRY_OVERRIDE is set, the operator rewrites the registry host for all resolved images (from per-image env vars and defaults). The repository path and tag/digest are preserved.
  • There is currently no per-image opt-out when the global override is set. To exempt specific images, do not set TEKTON_REGISTRY_OVERRIDE and rely solely on per-image env vars.

Rewrite image one by one

We can also rewrite images one by one using the following:

Sample: images as environment variable in operator deployment
example.com/tektoncd/dashboard:v0.48.0
            - name: IMAGE_JOB_PRUNER_TKN
              value: custom-example.com/tektoncd/tkn:v0.31.0

Tekton instance update

If you update an existing instance of tekton, you will need also to refresh the TektonInstallerSets so the new value can be taken into account.

kubectl delete tektoninstallerset <installer-set-name>

List of image environment variables

Images supported in kubernetes

ComponentContainer/Args nameEnvironment Variable
Chainstekton-chains-controllerIMAGE_CHAINS_TEKTON_CHAINS_CONTROLLER
Dashboardtekton-dashboardIMAGE_DASHBOARD_TEKTON_DASHBOARD
Hubtekton-hub-apiIMAGE_HUB_TEKTON_HUB_API
Hubtekton-hub-dbIMAGE_HUB_TEKTON_HUB_DB
Hubtekton-hub-db-migrationIMAGE_HUB_TEKTON_HUB_DB_MIGRATION
Hubtekton-hub-uiIMAGE_HUB_TEKTON_HUB_UI
Manual Approval Gatemanual-approvalIMAGE_MAG_MANUAL_APPROVAL
Manual Approval Gatetekton-taskgroup-controllerIMAGE_MAG_TEKTON_TASKGROUP_CONTROLLER
Pipelinearg:entrypoint-imageIMAGE_PIPELINES_ARG__ENTRYPOINT_IMAGE
Pipelinearg:git-imageIMAGE_PIPELINES_ARG__GIT_IMAGE
Pipelinearg:nop-imageIMAGE_PIPELINES_ARG__NOP_IMAGE
Pipelinearg:shell-imageIMAGE_PIPELINES_ARG__SHELL_IMAGE
Pipelinearg:shell-image-winIMAGE_PIPELINES_ARG__SHELL_IMAGE_WIN
Pipelinearg:workingdirinit-imageIMAGE_PIPELINES_ARG__WORKINGDIRINIT_IMAGE
Pipelinecontroller (resolvers controller)IMAGE_PIPELINES_CONTROLLER
Pipelinetekton-events-controllerIMAGE_PIPELINES_TEKTON_EVENTS_CONTROLLER
Pipelinetekton-pipelines-controllerIMAGE_PIPELINES_TEKTON_PIPELINES_CONTROLLER
PipelinewebhookIMAGE_PIPELINES_WEBHOOK
ResultsapiIMAGE_RESULTS_API
ResultspostgresIMAGE_RESULTS_POSTGRES
ResultswatcherIMAGE_RESULTS_WATCHER
Triggersarg:el-imageIMAGE_TRIGGERS_ARG__EL_IMAGE
Triggerstekton-triggers-controllerIMAGE_TRIGGERS_TEKTON_TRIGGERS_CONTROLLER
Triggerstekton-triggers-core-interceptorsIMAGE_TRIGGERS_TEKTON_TRIGGERS_CORE_INTERCEPTORS
TriggerswebhookIMAGE_TRIGGERS_WEBHOOK
Pipelines Proxywebhook Proxy imageIMAGE_PIPELINES_PROXY
Pruner CronJobimage used in pruner cronJobIMAGE_JOB_PRUNER_TKN
Tekton Prunerimage used by pruner controllerIMAGE_PRUNER_CONTROLLER
Tekton Prunerimage used by pruner webhookIMAGE_PRUNER_WEBHOOK
Tekton Schedulerimage used by scheduler controllerIMAGE_SCHEDULER_MANAGER
Tekton Schedulerimage used by scheduler webhookIMAGE_SCHEDULER_WEBHOOK
Multicluster Proxy AAEproxy-aaeIMAGE_MULTICLUSTERPROXYAAE_PROXY_AAE
Syncer Serviceworkload-controllerIMAGE_SYNCER_SERVICE_WORKLOAD_CONTROLLER

Images supported in OpenShift

Supports all the images listed above in kubernetes and following are specific to OpenShift

ComponentContainer/Args nameEnvironment Variable
Pipeline-as-codepac-controllerIMAGE_PAC_PAC_CONTROLLER
Pipeline-as-codepac-webhookIMAGE_PAC_PAC_WEBHOOK
Pipeline-as-codepac-watcherIMAGE_PAC_PAC_WATCHER
Console Plugin (PF5)console-pluginIMAGE_PIPELINES_CONSOLE_PLUGIN_LEGACY
Console Plugin (PF6)console-pluginIMAGE_PIPELINES_CONSOLE_PLUGIN
Resultsretention-policy-agentIMAGE_RESULTS_RETENTION_POLICY_AGENT
AddonsIMAGE_ADDONS_BUILD
AddonsIMAGE_ADDONS_GENERATE
AddonsIMAGE_ADDONS_GEN_ENV_FILE
AddonsIMAGE_ADDONS_GIT_RUN
AddonsIMAGE_ADDONS_KN
AddonsIMAGE_ADDONS_LOAD_SCRIPTS
AddonsIMAGE_ADDONS_MAVEN_GENERATE
AddonsIMAGE_ADDONS_MAVEN_GOALS
AddonsIMAGE_ADDONS_MVN_SETTINGS
AddonsIMAGE_ADDONS_OC
AddonsIMAGE_ADDONS_PARAM_BUILDER_IMAGE
AddonsIMAGE_ADDONS_PARAM_GITINITIMAGE
AddonsIMAGE_ADDONS_PARAM_KN_IMAGE
AddonsIMAGE_ADDONS_PARAM_MAVEN_IMAGE
AddonsIMAGE_ADDONS_PARAM_TKN_IMAGE
AddonsIMAGE_ADDONS_PREPARE
AddonsIMAGE_ADDONS_REPORT
AddonsIMAGE_ADDONS_S2I_BUILD
AddonsIMAGE_ADDONS_S2I_GENERATE
AddonsIMAGE_ADDONS_SKOPEO_COPY
AddonsIMAGE_ADDONS_SKOPEO_RESULTS
AddonsIMAGE_ADDONS_TKN
AddonsIMAGE_ADDONS_TKN_CLI_SERVE
AddonsIMAGE_ADDONS_TKN_CLI_SERVE_INIT_CONFIG

OpenShift Console Plugin Compatibility

When deploying the Tekton Operator on OpenShift Container Platform (OCP) with the console plugin enabled, you must account for your OCP version.

Starting with OpenShift 4.22, the console plugin was upgraded to use PatternFly 6 (PF6), while earlier versions use PatternFly 5 (PF5). To ensure compatibility, you need to provide both of the following environment variables:

IMAGE_PIPELINES_CONSOLE_PLUGIN: Point this to the PF6 image.

IMAGE_PIPELINES_CONSOLE_PLUGIN_LEGACY: Point this to the PF5 image.

Note: You do not need to manually configure which image to use at runtime. The operator will automatically detect your OCP version and deploy the correct console plugin image.