Argo CD in air-gapped Kubernetes clusters

Argo CD can run in a Kubernetes cluster with no internet access once its images, Git repositories, Helm charts and Dex dependencies are served from inside your network. This page covers what to mirror, what breaks offline, and how to plan patching.

On this page

Running Argo CD in an air-gapped cluster: what the work covers

Argo CD can run offline when every image, Git source, Helm chart, OCI artifact and identity call it makes is served from inside your network. Teams usually reach this pattern when they must deliver to clusters with no outbound internet access, such as isolated production segments, classified or regulated environments, or operational networks where change has to cross a controlled boundary before it reaches a cluster. Argo CD is licensed under Apache-2.0 and the project offers no paid edition, so the work here is about mirroring, configuration and evidence rather than licensing. Nothing in the software itself requires a public connection once its dependencies are placed inside the boundary.

The work covers five dependency paths: the Argo CD container images and the images of the components it deploys, the internal Git server that holds your manifests, the Helm and OCI registries that hold charts and packaged artifacts, the identity provider used for SSO, and the patch process that brings new Argo CD releases across the boundary. For the registry side, the decisions are whether to replicate images into a private registry or pull them through a proxy cache inside the network, and how each artifact is verified before it is admitted. For SSO, the question is which connector or OIDC endpoint can be reached without outbound calls, since bundled Dex connectors that depend on external services need an internal alternative. The page also addresses how to patch Argo CD on the project's current supported minor releases without pulling from public sources.

Before you commit to a plan, confirm three things with your own environment: which network path your clusters and build hosts have to any internal mirror, which Argo CD version you will pin and where its image digests will be recorded, and who owns the transfer of new releases across the boundary. Ask any partner to show the exact list of hosts the running installation contacts, because a single missed call, such as a Dex metadata fetch or a Helm repository lookup, will fail only at the moment someone tries to sync. The sections that follow take each path in turn, so your team can decide which parts to build in-house and which to scope as a fixed deliverable.

Which Argo CD dependencies must resolve inside your network

An air-gapped Argo CD install reaches out to more places than its own pods. Each of the six dependencies below must resolve inside your network, or a specific operation fails. Argo CD keeps its state in Kubernetes objects and treats Redis as a disposable cache, so the replication work centers on images, Git, registries, identity and bootstrap sources rather than on a database.

Argo CD component container images

Every Argo CD workload pulls its own image: the API server, repo server, application controller, and the bundled Dex and Redis components if you use them. Mirror each image at the exact tag you deploy, then point the manifests or Helm values at your internal registry. If a pod cannot pull, that component never starts, and the rest of the install stalls. Ask your platform team who approves new tags and how mirrored digests are recorded in change control.

Git repositories Applications read from

Argo CD reads desired state from Git, and the repo server clones on every refresh. Your internal Git host must hold both the configuration repositories and any Helm or Kustomize sources your Applications reference, because a sync cannot succeed against content it cannot fetch. Decide whether the mirror is a read-only replica or the primary, and confirm which branches and tags are replicated. The repo-server also runs Helm and Kustomize on repository content, so mirrored repositories should be reviewed before they are trusted.

Helm chart and OCI registries

Applications that deploy from Helm repositories or OCI chart references need those artifacts available internally. Mirror the charts and any chart dependencies they pull, including subcharts, since a missing dependency fails the render rather than the pull. Harbor can host OCI Helm charts and replicate them from upstream sources in a controlled batch. Confirm with your application owners which charts are in scope and who signs off on each new version.

Dex connectors that call identity providers

Bundled Dex reaches out to its upstream connectors, and OIDC integrations contact the provider's discovery and token endpoints. Connectors such as GitHub or a hosted SaaS identity service need outbound calls that an isolated network does not allow. Plan the identity source as an internal service, such as LDAP, SAML or a self-hosted OIDC provider, and confirm each connector's endpoints before cutover. Admin access depends on this path working, so test a login path that does not require the public internet.

Redis and cluster bootstrap images

Redis, the Kubernetes control plane and the networking, DNS and ingress add-ons used during cluster build all pull images at bootstrap time. Redis is a disposable cache, so losing it causes a refresh rebuild rather than data loss, but the pod still needs its image to start. Kubernetes supports pre-pulling control plane images with kubeadm and pointing the installer at a private registry. Ask your cluster team which bootstrap images are mirrored and whether they match the Argo CD manifest versions.

CRD and manifest sources

Argo CD installs its custom resource definitions and core manifests from a release artifact or a Helm chart, and that source must be copied into your network before the install. Store the exact manifest files in your Git host and record their checksums. Upgrades depend on the same copy, so a new release needs a new reviewed mirror. Keep the install and upgrade manifests under the same change control as the workloads they create.

How to get images and charts across the boundary

A self-hosted registry gives the platform team one place to hold Argo CD images, Helm charts and any other OCI artifacts the cluster pulls. Harbor is licensed under Apache-2.0 according to its GitHub repository, and it stores container images and Helm charts as OCI artifacts, so one registry can serve both. In a common pattern, a staging Harbor on a connected network pulls from upstream sources, and a Harbor inside the isolated network receives approved content through replication. Replication rules can run push-based or pull-based, filter by repository name, tag, label and resource type, and trigger manually, on a cron schedule or on push and retag events. Proxy cache projects serve a cached copy when the upstream is unreachable, which helps during outages but does not replace an approved, versioned copy.

  • Who runs it: the platform team owns the replication rules, and the security team approves which repositories and tags are allowed across the boundary.
  • How often: scheduled runs suit routine patch intake, while manual triggers suit an approved release that must cross on a specific day.
  • Integrity checks: pin images by digest in manifests, record digests in the change ticket and confirm signatures or scan results before a rule replicates into the isolated side.
  • Bandwidth and scope: a per-task bandwidth limit and tight filters keep transfers predictable and stop unrelated repositories from crossing.
  • Proxy cache caveats: cache projects are read-only for pushes and carry a default 7-day retention policy, so confirm retention settings before relying on them for audit evidence.

Confirm version-specific behavior, supported endpoints and replication options with the Harbor documentation for the release you deploy, since these features change between releases.

Configuration choices and when each fits

This table compares the main choices for feeding images, charts, Git content and identity into an air-gapped Argo CD install. Read each row for what it changes in the cluster, when it fits your boundary, and what it costs you to operate later. Most teams combine a mirrored registry with an internal Git host and then tighten the admin account once SSO works.

OptionWhat it changesWhen it fitsTrade-off
Harbor proxy cachePulls upstream images on first request and keeps a local copy, so clusters pull from one internal addressConnected staging can reach public registries while production cannot, and you want on-demand pullsCached copies expire under the default 7-day retention policy, and first pulls still need upstream access
Harbor replication rulesCopies selected repositories and tags into the isolated Harbor on a schedule, on push events or manuallyYou know the exact image set Argo CD and its add-ons need and want a reviewed, pinned inventoryYou must maintain the filter list, and new image versions do not appear until a rule copies them
Internal Git hostingArgo CD syncs from a Git server inside the boundary that your team controlsChange approvals and commit history must stay in your environmentYou own backups, access control and patching of the Git service itself
Read-only Git mirrorContent is pushed one way from a connected zone into an internal repository that Argo CD only readsSource code stays in an external host but the cluster must not reach it directlyEach transfer adds a review step, and commits can lag the source until the next sync
Helm charts from an OCI registryCharts are stored as OCI artifacts in Harbor and referenced by registry path and versionChart versions must be pinned, scanned and promoted like imagesCharts that reference public images or remote dependencies still need those artifacts mirrored
Vendored manifests in GitRendered YAML is committed to your repository and Argo CD applies plain filesThe cluster has no Helm or registry dependency and reviewers must read every changeUpgrades mean re-rendering and reviewing large diffs, and drift from upstream is easy to miss
Disable the admin user (admin.enabled set to false)Turns off the built-in admin login after SSO or local users work, removing a shared passwordSSO through Dex or direct OIDC is confirmed working and at least one other administrator can log inBreak-glass access depends on a recovery path you must test before disabling
Keep the admin user enabledLocal admin login stays available independent of the identity providerInitial setup, or an identity provider outage would otherwise lock every operator outA shared credential remains a standing risk that auditors will ask you to explain

Which Dex connectors fail without outbound calls

Connectors that call a public service will fail on an isolated network. Argo CD bundles Dex, which offers SAML, LDAP and GitHub connectors, and teams can also point Argo CD straight at an existing OIDC provider such as Okta, Auth0, Microsoft, Keycloak or Google Workspace. The GitHub connector depends on GitHub's public endpoints, so it will not complete sign-in from a network with no outbound path. Before you build the air-gapped cluster, list every identity source your users need and check whether each one is reachable from inside the isolated network. A provider you host inside your own boundary, an LDAP directory or a SAML identity provider that your network routes internally can work, provided the Dex or Argo CD pods can resolve and reach those addresses and trust their certificates. Confirm the routing and the certificate chain in a test cluster before cutover, not during the first outage.

Keep the built-in admin user until SSO is proven, then disable it. The user management documentation recommends using the admin account only for initial setup and disabling it with admin.enabled set to false once local users or SSO are configured. In an air-gapped environment, that account is often the only way back in if the identity path breaks, so record how you will recover access before you turn it off and test that path. Also check the RBAC mapping during offline setup. Argo CD 3.0 changed Dex-based RBAC to use the federated_claims.user_id claim, so role bindings written against earlier claim values may stop matching users after an upgrade. Decode a real token from your provider in the offline environment and confirm the claim your policy expects is present.

Mirror what the login flow depends on, not only the container images. Dex and the Argo CD API server need their configuration, certificates and any connector libraries to be present on the cluster before the first login attempt. Plan a change record that lists each connector, its internal endpoint, the certificate authority it trusts and the claim used for role mapping. Ask your SSO and platform teams to confirm which of these endpoints live inside your network and which need an approved exception. Any connector that still requires an outside call should be treated as an open decision for your security review rather than an assumption to be fixed later.

How to build the offline Argo CD install in sequence

This sequence takes an Argo CD installation from a connected staging area to a cluster with no route to public sources, with a check at each step so the team can confirm the install works offline before relying on it.

  1. Inventory every image and manifest

    Start by listing everything the chosen Argo CD release needs: the install manifests or Helm chart version, each container image those manifests reference (API server, repo server, application controller, Redis, Dex if used), and any CRDs. Record the exact tags, not floating labels. Confirm the release you choose is one of the minor lines still receiving patch releases, since the release process only supports the three most recent minor versions. Also list the Helm charts, Kustomize bases and plugin images your Applications will pull. The output is a versioned bill of materials that your platform team signs off. Check: every image reference in the rendered manifests appears on the list, and nothing is pulled from a tag that is not recorded.

  2. Stand up internal registry and Git services

    Provision an internal container registry, an OCI-capable Helm chart store and an internal Git server inside the isolated network. Harbor is one option: it is Apache-2.0 licensed, stores images and Helm charts as OCI artifacts, and can act as a proxy cache or replication target. Your platform team should confirm the registry and Git product versions, storage sizing, TLS certificates and the trust chain that Kubernetes nodes and the repo server will use. Plan backups for these services, because Argo CD will depend on them for every sync. Check: from a node in the air-gapped network, you can push and pull a test image and clone a test repository over the internal names.

  3. Mirror and verify images and charts

    Transfer the inventoried artifacts across the boundary using your approved media process, then push them into the internal registry under the same tags. Verify each artifact before it is admitted: compare digests against the vendor-published values, scan images with your chosen scanner and keep the results with the change record. Your supply chain procurement process should define how software integrity and authenticity are checked for anything carried across the isolated boundary. Check: a digest comparison report shows every mirrored image matches its source digest, and the scanner results are stored with the release record.

  4. Define repositories as Kubernetes Secrets

    Register each internal Git repository and Helm or OCI source as a Kubernetes Secret labeled for Argo CD, not in the argocd-cm ConfigMap, because repository configuration in argocd-cm is no longer supported from Argo CD 3.0. Use the internal host names and the credentials your Git server issues, and store the Secret manifests in your own bootstrap process rather than typing them into the UI. Check: Argo CD lists each repository with a successful connection status, and the credentials are not visible in API responses or logs.

  5. Point Argo CD at internal sources

    Update the Argo CD install values or manifests so every image reference resolves to the internal registry, and set the image pull secrets for the nodes. Make sure the Helm chart or Kustomize base references your internal registry rather than public defaults. If you use a Helm chart, confirm the chart version matches the image versions you mirrored. Check: the rendered manifests contain no references to public registries, and all Argo CD pods reach Running state.

  6. Configure Dex or direct OIDC against internal endpoints

    Configure single sign-on so every identity endpoint is internal. If you use the bundled Dex, confirm that the connector you chose, such as LDAP or SAML against your directory, does not need an outbound call to a public service, since some connectors do. If you use a direct OIDC provider, host it internally and confirm its discovery and token endpoints resolve inside the network. Keep the built-in admin user for initial setup only and disable it with admin.enabled set to false once SSO works. Check: a test user signs in through the internal identity provider, the group claim maps to the expected Argo CD role, and the admin account is disabled.

  7. Run a sync test with no public route

    Create a small test Application that points at the internal Git repository and deploys a known manifest to a non-production namespace. Confirm the sync completes and the resource reaches a healthy state. Then verify isolation from the cluster side: from a pod or node, attempt to reach public registries and public Git hosts and confirm the connections fail. Record the results. Check: the sync succeeds, the Application reports Synced and Healthy, and every outbound attempt to public sources is blocked.

  8. Rehearse a patch release

    Before the first production upgrade, run a patch rehearsal on a staging cluster built the same way. Pick the next patch release for your minor line, mirror it through the same verified process, update the internal references and perform the upgrade. Confirm the Argo CD components restart cleanly, sync tests still pass and rollback steps work. Document the steps and the evidence so the production change repeats the same path. Check: the staging upgrade completes with no outbound calls, and the runbook records each artifact, digest and test result.

How patching works when public sources are off limits

Plan every Argo CD patch around a release cadence that never stops. The Argo CD release process ships a minor release four times a year, roughly once every three months, and only the three most recent minor versions receive patch releases. In an air-gapped cluster, that means a minor version you have running will age out of patch coverage on a schedule you do not control, so the upgrade calendar has to be owned by your team. Track the Argo CD release process and cadence and the patch releases on the argoproj/argo-cd GitHub releases page, then decide in advance which minor line you will stay on and how long you accept a gap before moving forward.

Each new patch release should enter the enclave through the same verified path as the original images, manifests and chart versions: mirrored into your internal registry, checked for integrity and authenticity under your own supply chain procedure, then promoted into a staging enclave where the same Application sets sync and the SSO login, RBAC policies and repository secrets are exercised. Harbor is often the staging point for images and OCI artifacts, and its release notes deserve the same attention. Back up the Harbor database before any upgrade, as the v2.15.2 release notes recommend, and be ready to run a reindexdb pass if index problems appear. The v2.15.3 release introduced a breaking change in which webhooks to internal network addresses are blocked by default, so confirm that any internal notification or pipeline endpoint still receives events before promoting.

Minor version jumps carry their own checks. The Argo CD 2.14 to 3.0 upgrade notes describe three changes to handle before you move: update and delete RBAC now apply only to the application itself, logs access requires an explicit logs, get permission, and annotation-based resource tracking is the default. Repositories must also be defined as Kubernetes Secrets rather than in argocd-cm, and Dex RBAC keys on federated_claims.user_id. Export and review your current policy.csv and repository definitions in staging, because a patch that changes access behavior can lock out operators in a cluster that has no internet fallback.

Security risks specific to an isolated Argo CD

An air-gapped Argo CD still executes repository content, trusts internal certificates and holds cluster credentials, and the isolation changes who checks each of those inputs. The cards below cover the risks the security documentation names and the controls an isolated install needs around them.

Repo-server executes repository content

The repo-server runs Helm and Kustomize against repository content to render manifests. In an isolated network, that content usually comes from internal Git and OCI registries, so the question is who can merge to them. Only internal, reviewed repositories should be trusted as inputs, and out-of-tree file access should be planned as a risk to control. Check which teams can write to each repository Argo CD reads from.

Internal certificates need an owner

Argo CD authenticates API requests only with JSON Web Tokens and uses TLS for traffic, including between its own components. Without public certificate authorities, every certificate chain must come from an internal CA that your team issues, renews and rotates. Name the owner of that CA and its renewal process before installation, because an expired internal certificate can stop the UI, the CLI and component communication at the same time.

Credentials stored as Kubernetes Secrets

Argo CD redacts cluster, Git and OAuth2 credentials from API responses and logs, but redaction does not protect them at rest. Since Argo CD 3.0, repositories must be defined as Kubernetes Secrets, so access to those Secrets in the Argo CD namespace is access to your Git credentials. Restrict Secret read permissions, and confirm how encryption at rest is handled in the cluster before the isolated install goes live.

Supply chain verification at the boundary

Every image, chart, manifest bundle and binary carried across the air gap is software you must verify before it runs. NERC CIP-013-2 requires supply chain procurement processes to address verification of software integrity and authenticity, which is the control behind checking each package at the boundary. Where that standard applies, record the checksum or signature check for every import and keep it with the transfer record. Organizations outside its scope can apply the same practice as a matter of policy.

Audit trails for every import

An isolated environment has no external service to show what was pulled, when and by whom. Build an audit trail for each import into the enclave, covering the artifact, its source, its verification result, the approver and the date it reached the cluster. Confirm which Argo CD and Kubernetes audit events are retained inside the network, where they are stored and how long they are kept, since those answers depend on your logging stack.

Questions buyers ask about air-gapped Argo CD

What drives the cost of running Argo CD in an air-gapped cluster?

The cost follows the number of artifacts you must mirror, the number of internal sources Argo CD must reach, and how many clusters carry the same process. The main components are design work on the mirror and sync process, building the internal registry, Git and chart endpoints, wiring identity without outbound calls, and writing the runbook your team will follow later. Most of that is one-time work. Recurring costs are the mirror refresh for each Argo CD patch release, the review of each imported package, and support time. Ask any quote to split these items, name who performs each one, and list the Argo CD version and clusters in scope.

How long does an air-gapped Argo CD project take?

Duration depends on how many images and charts must be carried across the boundary, how many internal Git and registry services already exist, and how complex the identity setup is. A single cluster with an existing internal registry and an identity provider reachable from inside the network takes far less time than a fleet with a new registry, custom Dex connectors and several Argo CD instances. Dex connectors that need outbound calls, such as those reaching a public identity source, add design and testing time because they must be replaced or routed internally. Ask for a timeline tied to a written list of components, owners and approval gates, rather than a single number.

What do we need from our own teams for an air-gapped Argo CD build?

The work needs four groups of people to commit time. The registry owner provides a private registry, such as Harbor, and decides how images and charts are imported. The Git owner hosts the manifests and Helm or Kustomize sources inside the boundary. The identity owner confirms which SSO path works without outbound calls, and the network owner approves the transfer process, firewall rules and the path for media or one-way data flows. Each group also reviews the content it approves. Ask the vendor to name the inputs each group must provide and the dates by which they are needed.

Can our internal platform team run air-gapped Argo CD without a partner?

Yes, a platform team can do this alone if it already runs Kubernetes, a private registry and an internal Git server, and it has someone who can write and test the mirror process. The harder parts are the ones that have no public fallback: verifying every package crossing the boundary, handling Dex connectors and keeping the runbook current. A partner is useful when the team has never built an offline install, or when audit evidence must be prepared alongside the build. Ask for a written scope that lists what you will keep and what the partner delivers, so you can compare the two options on the same basis.

How does patching Argo CD differ when the cluster has no internet access?

Patching offline is a transfer and verification process rather than a pull. The Argo CD release process ships patch releases only for the three most recent minor versions, so your mirror must track those lines and you must choose a supported version before each cycle. Each release needs its images and any chart versions downloaded from a connected staging point, checked for integrity and authenticity, imported into the internal registry, and then deployed through a change record. Plan for a regular review of the release notes, a test in a non-production cluster, and a rollback path that uses the previous mirrored images. Confirm the cadence with your own change board before the first cycle.

Which controls should an air-gapped Argo CD build include for audit evidence?

An offline build should keep a record of every artifact that crossed the boundary, including its source, version, checksum and approver. That record supports the software integrity and supply chain expectations found in NERC CIP-013-2 for utility environments, and similar vendor-verification questions in other frameworks. Argo CD's Git-based change flow, projects and RBAC also produce evidence of who changed what. DeployOpen prepares systems, controls and evidence for compliance assessments, but independent auditors issue any audit report or certification. Confirm with your assessor which artifacts they expect before the build begins.

How does DeployOpen scope an air-gapped Argo CD engagement in writing?

DeployOpen works from a written scope before any build starts. Most engagements are fixed-scope, so the agreement names the clusters, Argo CD version, registry and Git endpoints, identity path, mirror process, deliverables and the acceptance tests. It also lists what the client's teams must provide and what happens to changes in scope. Ongoing patch cycles, upgrades and testing can be added as retainers. DeployOpen does not publish a price list, so a quote follows from that written scope. Ask for the scope document to state the assumptions behind the size of the mirror and the identity setup.

How DeployOpen works on this

DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside the client's own infrastructure, including air-gapped networks. For Argo CD in air-gapped Kubernetes clusters, we start with a written inventory of what must cross the boundary, then build and test the mirrored image, chart, Git and registry path before anything is handed over.

How we scope

  • Inventory every Argo CD image, Helm chart, Git repository and OCI artifact the cluster needs, with its source and approval owner.
  • Confirm which Dex connectors, if any, need outbound calls and decide whether each one is removed, replaced or reached through an internal endpoint.
  • Agree the written, fixed scope, including deliverables, timelines and acceptance tests, before any work starts. Ongoing support is available as a retainer.

How we build

  • Set up internal Git, Helm and OCI registries and mirror the Argo CD images with checksums recorded for each transfer.
  • Point Argo CD manifests, Helm values and repository Secrets at internal sources, then test syncs from a cluster with no internet route.
  • Test the patch path end to end, including how a newer patch release is verified, imported and rolled out from an internal source.

How we hand over

  • Document the transfer procedure, mirror inventory, version pins and the owner for each internal source of truth.
  • Provide runbooks for importing a new Argo CD patch release and for handling a failed mirror sync or expired credentials.
  • Walk your platform and security teams through the working system and the evidence they need for change and configuration reviews.

How we support

  • Support can be scheduled as a retainer covering patch imports, upgrade planning and changes to the mirror inventory.
  • Track the Argo CD minor release cadence and the three most recent minor versions that receive patch releases, so your patch plan stays current.
  • Confirm with the Argo CD project and your own environment before each upgrade, since major upgrades carry breaking changes.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.