global.imageRegistry names in your values.yaml: 2501’s, an Amazon ECR registry, or your copy of it. The engine, Command Center, executor-mcp and kerberos-worker images also carry latest, the newest build 2501 shipped. The chart uses it only when you set global.imageTag: latest in your values.yaml: those four images then come from the newest build, under your build’s settings, which can differ between versions. The database and Elasticsearch keep their digests. Each time you apply the chart, the engine and Command Center restart on what latest holds then, and the database migrates to it; on Swarm, run docker stack deploy again. Executors pull it as they start. This is for Helm and kubectl only, not ArgoCD: ArgoCD renders the chart again on its own schedule, and each render would restart the engine and migrate the database at a time nobody chose. With ArgoCD, follow a build by its version instead. To move to the newest build with its settings, apply its chart instead: see Upgrade. On Kubernetes your nodes can pull straight from 2501’s. This page shows how, and how to copy the images into your registry instead.
ECR gives no lasting password: a pull token expires after 12 hours. So the image pull secret the chart would use does not fit here. Your nodes get their tokens from AWS’s own plugin instead, which renews them before they expire.
1. Get access
Send your 2501 account team the AWS role or user your nodes will pull as, for examplearn:aws:iam::<your account>:role/<node role>. 2501 grants it read access to the release images. Nothing else in 2501’s account is reachable with it.
On your side, that role or user needs this policy:
2. Point the installation at 2501’s registry
In yourvalues.yaml:
global.imageTag, and its signature check is unchanged: see Verify image signatures.
3. Let the nodes pull
Amazon EKS
Nothing to install: EKS nodes already get ECR tokens with their IAM role. Attach the policy of step 1 to the node role, or use the AWS-managedAmazonEC2ContainerRegistryReadOnly, which covers it.
Another Kubernetes
On every node, the kubelet runs AWS’s credential plugin,ecr-credential-provider, whenever it pulls from 2501’s registry. The kubelet must be 1.26 or newer. k3s and RKE2 look for the plugin and its configuration in /var/lib/rancher/credentialprovider/, and use them once both are there; other distributions take two kubelet settings, in step 4.
-
Download the plugin, version 1.28 or newer (the first that speaks the kubelet’s
v1plugin API), from Kubernetes’ artifact server. The GitHub releases of cloud-provider-aws carry no binaries, and not every release is on the artifact server: if the download answers 404, pick another release. -
Store the read-only IAM key of step 1 on the node, readable by root only:
-
Tell the kubelet to use the plugin for that registry, in
/var/lib/rancher/credentialprovider/config.yamlon k3s and RKE2, in/etc/kubernetes/ecr-credential-provider.yamlelsewhere: -
Restart the kubelet. On k3s and RKE2, restart the node’s service (
k3sork3s-agent,rke2-serverorrke2-agent): its log saysKubelet image credential provider bin dir and configuration file found. Elsewhere, start the kubelet with these two settings first:
Check
A pod that only needs its image pulled, which goes through the kubelet as the chart’s pods do. Its security settings let a namespace that enforces the restricted Pod Security Standard admit it:ImagePullBackOff with no basic auth credentials means the plugin did not run for that registry: check the matchImages entry, and that the kubelet found the plugin and its configuration.
Your own registry
On any Kubernetes, and always on OpenShift, you can copy the images of the build into your registry instead, under the same paths (2501.ai/release/<name>), with their signatures. List the images of a build from its chart, then copy each one:
imagePullSecrets. Copy the new images before each upgrade. With global.imageTag: latest, also copy the four 2501 images under that tag after each release, since a copy by digest carries no tag: cosign copy 605134458542.dkr.ecr.eu-west-3.amazonaws.com/2501.ai/release/<image>:latest registry.bank.internal:5000/2501.ai/release/<image>:latest, for engine, command-center, executor-mcp and kerberos-worker.
