A production Kubernetes cluster accepts no inbound connections from outside its network. How does pull-based delivery work there, and what do you give up compared with a cluster your CI system can reach?
answer
- egress only, no inbound port
- the agent dials out to Git and the registry
- webhooks cannot arrive
- polling interval becomes deploy latency
- status must be pushed outward
basics
~20 sThe in-cluster agent makes outbound connections only — to the Git host and the image registry — so no inbound path to the API server is needed at all. You give up synchronous deploy feedback and inbound webhooks, so syncs fall back to interval polling and status must be pushed outward.
solid answer
~50 sPull-based delivery suits an isolated cluster because the only network requirement is egress: the agent dials out to Git over HTTPS or SSH and to the registry to fetch images, and it applies manifests to an API server that is reachable only from inside. Nothing outside needs a route in. Push delivery into the same cluster forces you to widen the perimeter — place a runner inside the network, build a VPN or private-link path, or expose the API server — and each option is a standing inbound door plus the credential that goes with it. The costs are feedback-shaped. Git-host webhooks that would normally trigger an immediate sync cannot reach the agent, so you rely on its polling interval and accept that latency. Deploy status has to be pushed outward as notifications or scraped from inside by your monitoring, and humans still need a bastion or equivalent for debugging — nothing about the delivery model removes that need.
go deeper
Know the direction: the in-cluster agent connects out to Git and the registry, so a cluster that accepts no inbound traffic can still be deployed to.
Explain what push would need instead — a runner inside the network, a VPN, or an exposed API server — and why each is both a perimeter change and a credential-placement problem.
Show you have paid the bill: webhook triggering is gone so polling interval sets deploy latency, status has to be pushed outward, and break-glass access for humans must be designed rather than improvised during an incident.
Own the isolated-environment strategy end to end — internal Git and registry mirrors, how content crosses the gap, how you prove to an auditor what is running, and who can reach the cluster when the agent is the thing that is broken.
## The network property that decides the design Some clusters cannot accept inbound connections: an API server on a private endpoint, an air-gapped or regulated environment, an on-premises cluster behind a corporate firewall, a customer-hosted deployment you do not control. For these, the pull model is not merely preferable — it is often the only shape that does not require new network engineering. The reason is direction. A reconciling agent inside the cluster initiates every connection it needs: - outbound to the Git host (HTTPS 443 or SSH 22) or to a registry serving manifests as an OCI artifact - outbound to the image registry to pull application images - inbound to nothing The API server it writes to is reached over the cluster's own network, so it can remain entirely private. ## What push would require instead To push into the same cluster you must create a path in, and every option has a cost: - **A runner inside the network.** Now you operate self-hosted runners in a privileged network position, and they execute pipeline code. You have moved the untrusted-code problem inside the perimeter. - **VPN or private link from the CI provider.** Real work to build and maintain, and it makes a hosted CI system a trusted network peer. - **Exposing the API server** to an allowlist. The smallest amount of engineering and the largest amount of exposure; allowlists on hosted runners are also impractical because their egress addresses are broad and change. Each of these also still requires the cluster credential to live outside the cluster, so you pay the perimeter cost *and* the credential-concentration cost. ## What you give up ### Immediate triggering Many teams point a Git-host webhook at their agent so a merge syncs within seconds. A webhook is an inbound connection, so in an isolated cluster it cannot arrive. The agent falls back to polling on its configured interval, and worst-case deploy latency becomes that interval. That is usually acceptable, but say it out loud: you have traded seconds for a closed perimeter. If seconds matter, the usual answer is a relay the cluster polls or subscribes to outbound, not an inbound hole. ### Feedback and observability Nothing outside can query the agent's UI or API. Deploy status has to travel outward: notifications the agent sends to chat or an incident tool, metrics scraped by monitoring that lives inside and forwards aggregates out, or an outbound-only reporting component. Expect to spend real effort here, because the failure mode of an isolated cluster is a change that quietly never applies with nobody outside able to see it. ### Debugging and break-glass When the agent itself is broken, someone has to get in. A bastion, a jump host, an identity-aware proxy, or a session-recorded access path is still required, and it is worth designing deliberately rather than discovering during an incident. ### Egress is not free either The cluster must still be allowed out to the Git host and the registry, which in a locked-down network means proxy configuration, TLS interception handling, and allowlists. In a genuinely air-gapped environment you run an internal Git mirror and an internal registry, and the pull model works fine against those — the agent does not care whether the endpoint is public, only that it can reach it. ## The shape of a good answer Lead with the direction argument: pull needs egress only, so the perimeter stays closed and the credential stays inside. Then show you know the bill — no webhooks means polling latency, no inbound means status must be pushed outward, and humans still need a controlled way in. Interviewers in regulated or on-premises environments ask this specifically to see whether you have run delivery into a network you cannot reach.
- How would you keep deploy latency low in an isolated cluster without opening an inbound path?Shorten the polling interval to what the Git host and your rate limits tolerate, or have the agent maintain an outbound long-lived connection to a relay that signals when a new revision exists. Both keep every connection cluster-initiated. Opening an inbound webhook endpoint undoes the property you adopted the model for.
- Does the pull model work in a fully air-gapped environment with no internet egress at all?Yes, provided the sources it needs live inside. Run an internal Git mirror or an internal OCI registry holding both manifests and images, and point the agent at those. The model only requires that the agent can reach its source, not that the source is public — bringing content across the gap becomes a separate, deliberate import process.
saying these in an interview costs you the question
- Thinking the agent needs an inbound port to receive changes
- Assuming webhooks still work into a private cluster
- Forgetting that egress to Git and the registry must be permitted
- Believing pull-based delivery removes the need for human break-glass access
- Exposing the API server to a hosted runner's address range as an allowlist