EKS Add-on Management

Amazon EKS supports curated add-on packages to provide core operational capabilities — such as pod networking (vpc-cni), DNS resolution (coredns), proxying (kube-proxy), storage (aws-ebs-csi-driver), and security (eks-pod-identity-agent).
While some add-ons install automatically during cluster bootstrap, AWS does not automatically upgrade them when you upgrade your Kubernetes version. This guide outlines how to discover versions, inspect configuration schemas, and manage add-on lifecycles via CLI and Terraform.
Add-on Discovery & Version Compatibility
1. List all available add-ons for a Kubernetes version
export VERSION="1.36"
aws eks describe-addon-versions \
--kubernetes-version $VERSION \
--query 'sort_by(addons, &addonName)[].{Addon: addonName, Type: type, Publisher: owner}' \
--output table
2. List AWS-managed add-ons and their latest versions
export VERSION="1.36"
aws eks describe-addon-versions \
--kubernetes-version $VERSION \
--owner aws \
--query 'sort_by(addons, &addonName)[].{Addon: addonName, LatestVersion: addonVersions[0].addonVersion, DefaultVersion: addonVersions[0].compatibilities[0].defaultVersion}' \
--output table
3. Check all compatible versions for a specific add-on
export VERSION="1.36"
aws eks describe-addon-versions \
--kubernetes-version $VERSION \
--addon-name vpc-cni \
--query 'addons[0].addonVersions[].addonVersion' \
--output json
Add-on Configuration Schemas
Many add-ons support custom environment variables, resource limits, and feature toggles. You can retrieve the complete configuration JSON/YAML schema directly from AWS.
# Retrieve configuration schema for a specific add-on version
aws eks describe-addon-configuration \
--addon-name vpc-cni \
--addon-version v1.19.0-eksbuild.1 \
--profile $PROFILE \
--output yaml
Managing Add-ons on Your Cluster
List installed add-ons
Inspect add-on health and active configuration
Install an add-on via AWS CLI
aws eks create-addon \
--cluster-name $CLUSTERNAME \
--addon-name aws-ebs-csi-driver \
--addon-version v1.38.0-eksbuild.1 \
--resolve-conflicts OVERWRITE \
--profile $PROFILE
Update an existing add-on
aws eks update-addon \
--cluster-name $CLUSTERNAME \
--addon-name vpc-cni \
--addon-version v1.19.0-eksbuild.1 \
--resolve-conflicts OVERWRITE \
--profile $PROFILE
Managing Add-ons with Terraform
Managing add-ons via Terraform provides declarative version control, custom JSON-encoded configurations, and automated IAM role association using EKS Pod Identity.
Example: VPC-CNI with Prefix Delegation & Network Policies
resource "aws_eks_addon" "vpc_cni" {
cluster_name = module.eks.cluster_name
addon_name = "vpc-cni"
addon_version = "v1.19.0-eksbuild.1"
resolve_conflicts_on_create = "OVERWRITE"
resolve_conflicts_on_update = "OVERWRITE"
configuration_values = jsonencode({
env = {
ENABLE_PREFIX_DELEGATION = "true"
WARM_PREFIX_TARGET = "1"
ENABLE_POD_ENI = "true"
POD_SECURITY_GROUP_ENFORCING_MODE = "standard"
}
enableNetworkPolicy = "true"
})
tags = {
"k8s-addon" = "vpc-cni"
"ManagedBy" = "Terraform"
}
}
Example: EKS Pod Identity Agent
resource "aws_eks_addon" "pod_identity_agent" {
cluster_name = module.eks.cluster_name
addon_name = "eks-pod-identity-agent"
addon_version = "v1.3.4-eksbuild.1"
resolve_conflicts_on_create = "OVERWRITE"
resolve_conflicts_on_update = "OVERWRITE"
}
Example: EBS CSI Driver with Custom StorageClass
resource "aws_eks_addon" "aws_ebs_csi_driver" {
cluster_name = module.eks.cluster_name
addon_name = "aws-ebs-csi-driver"
addon_version = "v1.38.0-eksbuild.1"
resolve_conflicts_on_create = "OVERWRITE"
resolve_conflicts_on_update = "OVERWRITE"
service_account_role_arn = aws_iam_role.ebs_csi_driver.arn
}
Conflict Resolution Strategies
When updating add-on versions or reconciling drift between Terraform and running DaemonSets, setting resolve_conflicts_on_update = "OVERWRITE" ensures Terraform successfully reapplies the declared configuration values without getting blocked by Kubernetes server-side apply conflicts.