Skip to content

Commit 4564b65

Browse files
committed
WIP: add hardened (Wolfi) images documentation for ECK
Adds a new page `deploy-manage/deploy/cloud-on-k8s/hardened-images.md` documenting Wolfi-based (hardened) images in ECK: - The ECK Operator image is Wolfi by default since v2.15.0 - Stack images (ES, Kibana, Agent, Beats, APM Server, Logstash) can be pulled as Wolfi variants via the `container-suffix: -wolfi` operator flag - EPR and Elastic Maps Server images are already natively Wolfi and require an explicit `.spec.image:` override to avoid pull failures when `container-suffix` is set Also adds an entry for the new page in `manage-deployments.md`. 1. Did you use a generative AI (GenAI) tool to assist in creating this contribution? - [x] Yes Tool(s) and model(s) used: Claude Code (claude-sonnet-4-6)
1 parent 53aa353 commit 4564b65

2 files changed

Lines changed: 84 additions & 0 deletions

File tree

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
navigation_title: Hardened (Wolfi) images
3+
applies_to:
4+
deployment:
5+
eck: all
6+
products:
7+
- id: cloud-kubernetes
8+
- id: elasticsearch
9+
- id: kibana
10+
- id: elastic-agent
11+
- id: beats
12+
- id: apm
13+
- id: logstash
14+
---
15+
16+
# Hardened (Wolfi) images in {{eck}} [k8s-hardened-images]
17+
18+
Elastic has partnered with [Chainguard](https://www.chainguard.dev/) to provide hardened container images based on [Wolfi](https://github.com/wolfi-dev/os), a minimal, security-focused Linux distribution designed for containerized environments. These images significantly reduce the CVE footprint of Elastic containers by including only the application and its necessary runtime dependencies. For background on this initiative, refer to the blog post [Reducing CVEs in Elastic container images](https://www.elastic.co/blog/reducing-cves-in-elastic-container-images).
19+
20+
::::{note}
21+
Only images distributed via `docker.elastic.co` are officially supported by Elastic. Third-party hardened image sources, such as Docker Hardened Images (DHI) on Docker Hub, are not maintained by Elastic and fall outside the scope of Elastic support.
22+
::::
23+
24+
## The ECK Operator image [k8s-hardened-images-operator]
25+
26+
Since ECK **v2.15.0**, the ECK Operator image is built on Wolfi by default. No additional configuration is required — pulling the standard operator image from `docker.elastic.co` already provides a hardened, Wolfi-based container.
27+
28+
## {{stack}} images managed by {{eck}} [k8s-hardened-images-stack]
29+
30+
Wolfi-based variants of the {{stack}} images ({{es}}, {{kib}}, {{agent}}, {{beats}}) are available from v8.16.0 onwards (v8.15.0 for {{apm-server}} and {{ls}}). However, ECK does not pull Wolfi variants by default for {{stack}} components — the standard images are used unless explicitly overridden.
31+
32+
To have the operator pull Wolfi-based images natively for the {{stack}} components it manages, set the `container-suffix` configuration flag to `-wolfi`. The operator then appends this suffix to the container images it resolves. This flag cannot be combined with the `--ubi-only` flag. For more details, refer to [ECK configuration flags](cloud-on-k8s://reference/eck-configuration-flags.md).
33+
34+
For example, set the suffix in the `elastic-operator` ConfigMap:
35+
36+
```yaml
37+
apiVersion: v1
38+
kind: ConfigMap
39+
metadata:
40+
name: elastic-operator
41+
namespace: elastic-system
42+
data:
43+
eck.yaml: |-
44+
container-suffix: -wolfi
45+
```
46+
47+
::::{warning}
48+
The `container-suffix` flag applies to **all** resources managed by the operator, including [{{package-registry}}](package-registry.md) and [{{hosted-ems}}](elastic-maps-server.md). The images for these two components are **already natively based on Wolfi** and do not have a `-wolfi` suffix. With `container-suffix: -wolfi` set, the operator would try to pull non-existent suffixed images, causing the image pull to fail.
49+
50+
For these resources, explicitly set the container image in the manifest using `.spec.image:` (without the suffix).
51+
52+
For [{{package-registry}}](package-registry.md), use:
53+
54+
```yaml subs=true
55+
apiVersion: packageregistry.k8s.elastic.co/v1alpha1
56+
kind: PackageRegistry
57+
metadata:
58+
name: package-registry-sample
59+
namespace: default
60+
spec:
61+
version: {{version.stack}}
62+
image: docker.elastic.co/package-registry/distribution:{{version.stack}}
63+
```
64+
65+
Other valid tags include `lite-{{version.stack}}`, `production` and `lite`. For more details, refer to [](/reference/fleet/air-gapped.md#air-gapped-diy-epr).
66+
67+
For [{{hosted-ems}}](elastic-maps-server.md), use:
68+
69+
```yaml subs=true
70+
apiVersion: maps.k8s.elastic.co/v1alpha1
71+
kind: ElasticMapsServer
72+
metadata:
73+
name: quickstart
74+
spec:
75+
version: {{version.stack}}
76+
image: docker.elastic.co/elastic-maps-service/elastic-maps-server:{{version.stack}}
77+
```
78+
79+
::::
80+
81+
## Further reading [k8s-hardened-images-further-reading]
82+
83+
- [Reducing CVEs in Elastic container images](https://www.elastic.co/blog/reducing-cves-in-elastic-container-images)

deploy-manage/deploy/cloud-on-k8s/manage-deployments.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ In this section, you'll learn how to perform the following tasks in ECK:
3232
- [**Apply updates to your deployments**](./update-deployments.md): Modify existing deployments, scale clusters, and update configurations, while ensuring minimal disruption.
3333
- [**Configure access to your deployments**](./accessing-services.md): Use and adapt Kubernetes services to your needs.
3434
- [**Advanced configuration**](./configure-deployments.md): Explore available settings for {{es}} and {{kib}}, including storage, networking, security, and scaling options.
35+
- [**Hardened (Wolfi) images**](./hardened-images.md): Learn how the ECK Operator and the {{stack}} components managed by ECK use Wolfi-based images to reduce CVE exposure, and what this means in practice.
3536

3637
For a complete reference on configuration possibilities for {{es}} and {{kib}}, see:
3738

0 commit comments

Comments
 (0)