Safeguard
Security Guides•

What does the AlwaysPullImages admission plugin do, and when use it?

AlwaysPullImages forces every new pod to pull its image, so cached private images cannot be reused without credentials. Tradeoffs and when it fits.

Safeguard Security Team
4 min read

AlwaysPullImages is an admission plugin that rewrites every new pod so its image pull policy is Always. That makes the node check credentials against the registry each time, so a pod from one tenant cannot start from a private image another tenant already pulled to the node. It helps most in multitenant clusters.

The problem it solves

By default an image that is already on a node can be reused. The Kubernetes documentation explains the issue: without this plugin, once an image has been pulled to a node, any pod from any user can use it just by knowing the image name, assuming the pod is scheduled to that node. Private image content then depends on scheduling luck, not on who holds registry credentials.

The documentation calls the plugin both mutating and validating. With it on, every new pod gets image pull policy Always, and the kubelet asks the runtime to pull on every container start. The pull then requires valid credentials, even if the layers are cached.

How pull policy behaves otherwise

The images documentation describes the values. IfNotPresent pulls only if the image is not present locally. Always makes the kubelet ask the container runtime to resolve the digest on every container launch. If a default is not set, the policy depends on the tag and how the image is referenced. Check the page for your version rather than relying on memory.

When it fits and when it does not

SituationFit
Shared cluster where teams use separate private registriesGood fit
Single team, single registry, no private image secrecy concernLittle benefit
Registry with weak availability or strict rate limitsConsider the load first
Air gapped or edge sites with intermittent connectivityThink carefully, pods may fail to start offline
Workloads that must restart fast during an incidentTest start times before adopting

The cost is more registry traffic and a dependency on registry availability at every container start. Pull through caches and mirrors can reduce the strain.

What it does not do

It does not make an image trustworthy. It does not stop someone with credentials from pulling an image. It does not replace network policy, signature verification or scanning. It only closes the cached-image path.

Enabling and checking

The plugin is not in the default list. On a self managed control plane you add it to the enable-admission-plugins flag. On managed services, check whether the provider supports it. Then verify the effect:

  1. Create a pod without an explicit pull policy.
  2. Read the created pod and confirm the policy shows Always.
  3. Test that a pod without access to the registry cannot start from a cached private image.

Rollout notes

Announce the change, watch registry error rates and pod start times, and make sure image pull secrets are present in every namespace that needs them. A kubelet that cannot authenticate will now fail starts that used to succeed from cache. That failure is the feature working, but teams need to know.

Where Safeguard fits

Safeguard's container image scanning shows what a private image contains, which is the other half of the question: controlling who can run an image, and knowing what is in it.

Quick check

Does AlwaysPullImages stop a vulnerable image from running?

No. It only forces credential checks on every pull. Use scanning and policies to judge image content.

Is it a good idea for a single team cluster?

Often little benefit, since the cached image concern is mainly about multiple tenants. Weigh it against extra registry load.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.