Contact our team to test out this Helm chart and related images for free. Please also indicate any other images you would like to evaluate.
Chainguard's redistribution of the AWS EBS CSI Driver Helm chart, pre-configured with hardened Chainguard Images.
Authentication is required to access this chart and its images. First, authenticate with Chainguard and configure your environment:
Create an image pull secret for the cluster:
This is a redistribution of the upstream AWS EBS CSI Driver Helm chart. All upstream configuration options and documentation apply.
For full documentation, see: https://github.com/kubernetes-sigs/aws-ebs-csi-driver
The chart's values schema accepts two values that the upstream schema lacks: k8sVersion, which EKS passes when it installs the chart as an add-on, and useAwsAddonSelectors, described under Taking over from AWS's EBS CSI add-on below.
This chart provides an aws_mp_addon_parameters.json file that defines the IAM permissions required when deploying this product as an EKS Addon.
It also provides an aws_mp_configuration_schema.json file, described under EKS add-on configuration values below.
EKS validates the --configuration-values of aws eks create-addon and aws eks update-addon against aws_mp_configuration_schema.json at the chart root, and aws eks describe-addon-configuration returns it.
The schema starts from the schema of AWS's own aws-ebs-csi-driver add-on v1.67.2-eksbuild.1 (driver 1.67.2), so a customer moving from AWS's add-on can pass the same settings in the same shape, except those in the next two sections. Its defaults are this chart's, which can differ from AWS's.
The chart ignores these settings of AWS's add-on, so the schema leaves them out rather than accept a setting that does nothing:
| AWS setting | Why the chart ignores it |
|---|---|
| No template reads it; node pods read |
| No template reads |
| Only the node metrics Service reads it, and only from |
| Only the node ServiceMonitor reads them, and only from |
| Only the node service account reads it, and only from |
In their open form, these settings could reach something that no schema exposes, such as an image, a security context, or RBAC rules, or they accept values that Kubernetes or the driver rejects, that the chart ignores, or that the chart renders twice.
| AWS setting | Accepted | Why |
|---|---|---|
| Annotation keys, and as values: strings with no | The chart runs every key and value through Helm's |
Every string, including map keys and list items, for example | No control characters and no NEL, LS, or PS line separators, except tab and line feed in annotation values and EnvVar values | Helm's YAML writer keeps these separators raw and |
| Label keys, except keys under | The chart puts these labels on its ClusterRoles, where an aggregation label adds their rules to other roles, such as the built-in |
| Label keys other than | The chart's Deployment, DaemonSet, and PodDisruptionBudget selectors use these keys, and the chart writes these maps into the same pod template labels. A different value there leaves the pods outside their own Deployment or DaemonSet, which Kubernetes rejects. |
| Label keys other than | The chart's labels helper sets these labels and then writes |
| Keys with no | The chart joins the tags into one |
| Lowercase letters, digits, | The key becomes part of two DaemonSet names and of the selector label value |
|
| Kubernetes rejects any other value in the PodDisruptionBudget. It also rejects both counts set at once, which the schema does not check. The chart ignores the integer 0 and renders its default budget, which allows one unavailable pod with 2 or fewer replicas, so pass |
| Empty, or a DNS subdomain of at most 253 characters, such as | Kubernetes rejects a pod whose priority class name is not a DNS subdomain. |
| -1, 0, or 10 to 999999 | Where Kubernetes keeps the field, it requires at least 10. It keeps the field on Kubernetes 1.35, and on 1.33 and 1.34 only with the |
| At most 999999, every | The chart writes these numbers into the manifests and arguments without quotes, and Helm writes 1,000,000 or more as |
| 1 to 65535 | It becomes a container port. |
| An absolute path with no | The node pods mount it from the host and into their containers. Kubernetes rejects an empty host path or mount path, and a host path with a |
|
| The chart writes the field only when it is |
| Label or annotation keys, and string values. An annotation key prefix, such as | Kubernetes accepts only strings here and rejects any other label value, and a line separator in a key or value could add keys outside the map. |
| The Kubernetes types, with only the fields that work on every Kubernetes version from 1.29 to 1.35, no unknown fields, and no null at any field inside them, and with the required fields, allowed values, bounds, and formats that Kubernetes validation enforces on one field at a time | AWS's add-on accepts any object here, and a string inside an open object could carry a line separator. A value that Kubernetes would reject when the chart applies it, such as a pod affinity term with no |
| Any value except null | A setting accepts null only where a null renders the same as leaving the setting out, once null fields are dropped, and Chainguard's build-time check renders every null that the schema accepts. Here a null deletes the chart's default: a null |
The | Any value except null | These are empty or unset by default, but a null there still renders. Under a sidecar's |
Every annotation map, including the | Keys other than | Kubernetes 1.30 and later still copy the AppArmor annotation into the container's AppArmor profile, which is a security context. The seccomp annotations do nothing since Kubernetes 1.27, and are rejected so that every Chainguard EKS add-on has the same rule. |
The | Not accepted | It mounts a container image's contents, and the product decides which images the add-on uses. |
The | Not accepted | It pulls content that the product does not decide. Kubernetes deprecated it in v1.11 and dropped its driver after v1.35. |
The | Not accepted | Chainguard's build-time check rejects settings by words in their names ( |
The | Not accepted | Kubernetes has deprecated each of these in-tree volume types, or no longer provides it. Mount such storage through its CSI driver with the |
additionalDaemonSets entriesThe chart merges each entry over node, key by key at every level. A setting that the entry leaves out, or sets to an empty map, keeps its value from node. Any other value replaces it, including false, 0, an empty string, and an empty list, so an entry can turn off enableLinux, enableWindows, or tolerateAllTaints, which node turns on by default. Null is rejected in an entry, because it deletes the value from node.
useAwsAddonSelectors (default false) drops the app.kubernetes.io/instance label from every object and label selector. The controller Deployment, the node DaemonSets, and the PodDisruptionBudget then use the selectors of AWS's own add-on, so this add-on can take those objects over. Selectors cannot change on an existing object, so:
useAwsAddonSelectors: true on the first install that replaces AWS's add-on, and keep it set.A failed update can still change the PodDisruptionBudget, because its selector can change. Turning the setting off on an install that took over AWS's objects adds app.kubernetes.io/instance to that selector, while the controller pods still lack the label. If the budget is updated before the Deployment update fails, it selects no pods, and nothing limits evictions of the controller pods until the setting is turned back on. Turning the setting on for an existing Chainguard install leaves the pods matched, because their labels still include the narrower selector's keys.
With the setting on, the kubectl get pod command in the install notes still filters on app.kubernetes.io/instance and lists no pods. Filter on app.kubernetes.io/name=aws-ebs-csi-driver instead.
A Chainguard patch to the chart's selector labels helper adds the setting. With it unset, the chart renders exactly what it rendered before.
2.67.2-fips
2.67.2
2.67.1-fips
2.67.1
Helm charts contain references to Chainguard Container images. The following images are referenced in the chart: