registry.k8s.io/coredns/coredns:v1.14.3 was promoted as a single linux/amd64 image manifest instead of a multi-arch manifest list. On any non-amd64 host the CoreDNS container fails to start:
exec /coredns: exec format error
This breaks arm64/arm/ppc64le/s390x/riscv64 consumers of the image (kubeadm clusters, kOps, etc.) — CoreDNS goes CrashLoopBackOff and cluster DNS is down.
Evidence
| Image |
Media type |
Platforms |
registry.k8s.io/coredns/coredns:v1.14.3 |
manifest.v2+json (single) |
amd64 only ❌ |
registry.k8s.io/coredns/coredns:v1.14.2 |
manifest.list.v2+json |
all 6 ✅ |
gcr.io/k8s-staging-coredns/coredns:v1.14.3 |
manifest.list.v2+json |
all 6 ✅ |
docker.io/coredns/coredns:1.14.3 |
manifest.list.v2+json |
all 6 ✅ |
$ crane manifest registry.k8s.io/coredns/coredns:v1.14.3 | jq .mediaType
"application/vnd.docker.distribution.manifest.v2+json" # single amd64 manifest
$ crane manifest gcr.io/k8s-staging-coredns/coredns:v1.14.3 | jq .mediaType
"application/vnd.docker.distribution.manifest.list.v2+json" # correct multi-arch list
- Promoted (broken) digest:
sha256:884b72dd6d2f7d367902af420605e0288dffedb0516ce29330423ae3f8f5c6fa — the linux/amd64 child manifest
- Correct manifest-list digest (staging + Docker Hub):
sha256:b21d26b915e10acb5bc78715c1e8b6047ab2675389b2bcc18b3a6499d90e74c0
Root cause
The build/staging image is fine — the multi-arch list exists in gcr.io/k8s-staging-coredns. The promotion PR #9395 recorded the amd64 child digest in images.yaml rather than the index digest, so the promoter copied only the amd64 manifest.
Attempts to fix
The in-place fix was attempted in #9421 and closed, registry.k8s.io tags are immutable and the promoter will not re-point an already-promoted tag (per @dims). A new version tag is the only way to land a correct multi-arch image on registry.k8s.io.
registry.k8s.io/coredns/coredns:v1.14.3was promoted as a singlelinux/amd64image manifest instead of a multi-arch manifest list. On any non-amd64 host the CoreDNS container fails to start:This breaks arm64/arm/ppc64le/s390x/riscv64 consumers of the image (kubeadm clusters, kOps, etc.) — CoreDNS goes CrashLoopBackOff and cluster DNS is down.
Evidence
registry.k8s.io/coredns/coredns:v1.14.3manifest.v2+json(single)registry.k8s.io/coredns/coredns:v1.14.2manifest.list.v2+jsongcr.io/k8s-staging-coredns/coredns:v1.14.3manifest.list.v2+jsondocker.io/coredns/coredns:1.14.3manifest.list.v2+jsonsha256:884b72dd6d2f7d367902af420605e0288dffedb0516ce29330423ae3f8f5c6fa— thelinux/amd64child manifestsha256:b21d26b915e10acb5bc78715c1e8b6047ab2675389b2bcc18b3a6499d90e74c0Root cause
The build/staging image is fine — the multi-arch list exists in
gcr.io/k8s-staging-coredns. The promotion PR #9395 recorded the amd64 child digest inimages.yamlrather than the index digest, so the promoter copied only the amd64 manifest.Attempts to fix
The in-place fix was attempted in #9421 and closed,
registry.k8s.iotags are immutable and the promoter will not re-point an already-promoted tag (per @dims). A new version tag is the only way to land a correct multi-arch image onregistry.k8s.io.