Skip to content

Commit 5939067

Browse files
authored
EKS-MULTI-ADDONS (#459)
1 parent 78e10d0 commit 5939067

File tree

2 files changed

+66
-7
lines changed

2 files changed

+66
-7
lines changed

terraform-modules/aws/eks/main.tf

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,21 @@ terraform {
1111
}
1212
}
1313

14+
locals {
15+
cluster_addons_iam = {
16+
for k, v in var.cluster_addons : k => {
17+
name = v.name
18+
addon_version = v.addon_version
19+
resolve_conflicts_on_create = v.resolve_conflicts_on_create
20+
resolve_conflicts_on_update = v.resolve_conflicts_on_update
21+
preserve = v.preserve
22+
timeouts = v.timeouts
23+
service_account_role_arn = (k == "aws-ebs-csi-driver" ? data.aws_iam_role.eks_csi_driver.arn : k == "vpc-cni" ? data.aws_iam_role.eks_cni_driver.arn : null)
24+
}
25+
}
26+
}
27+
28+
1429
data "aws_eks_cluster" "cluster" {
1530
name = module.eks.cluster_id
1631
}
@@ -19,6 +34,14 @@ data "aws_eks_cluster_auth" "cluster" {
1934
name = module.eks.cluster_id
2035
}
2136

37+
data "aws_iam_role" "eks_csi_driver" {
38+
name = aws_iam_role.eks_ebs_csi_driver.name
39+
}
40+
41+
data "aws_iam_role" "eks_cni_driver" {
42+
name = aws_iam_role.eks_cni_driver.name
43+
}
44+
2245
provider "kubernetes" {
2346
host = data.aws_eks_cluster.cluster.endpoint
2447
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority.0.data)
@@ -46,13 +69,7 @@ that it's using this module.
4669
https://aws.amazon.com/blogs/containers/amazon-ebs-csi-driver-is-now-generally-available-in-amazon-eks-add-ons/
4770
*/
4871

49-
resource "aws_eks_addon" "csi_driver" {
50-
cluster_name = module.eks.cluster_id
51-
addon_name = "aws-ebs-csi-driver"
52-
addon_version = "v1.11.4-eksbuild.1"
53-
service_account_role_arn = aws_iam_role.eks_ebs_csi_driver.arn
54-
}
55-
72+
# IAM CSI Role
5673
data "aws_iam_policy_document" "csi" {
5774
statement {
5875
actions = ["sts:AssumeRoleWithWebIdentity"]
@@ -81,6 +98,37 @@ resource "aws_iam_role_policy_attachment" "amazon_ebs_csi_driver" {
8198
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy"
8299
}
83100

101+
# IAM CNI
102+
data "aws_iam_policy_document" "cni" {
103+
statement {
104+
actions = ["sts:AssumeRoleWithWebIdentity"]
105+
effect = "Allow"
106+
107+
condition {
108+
test = "StringEquals"
109+
variable = "${replace(module.eks.oidc_provider, "https://", "")}:sub"
110+
values = ["system:serviceaccount:kube-system:aws-node"]
111+
}
112+
113+
principals {
114+
identifiers = [module.eks.oidc_provider_arn]
115+
type = "Federated"
116+
}
117+
}
118+
}
119+
120+
resource "aws_iam_role" "eks_cni_driver" {
121+
assume_role_policy = data.aws_iam_policy_document.cni.json
122+
name = "eks-cni-driver"
123+
}
124+
125+
resource "aws_iam_role_policy_attachment" "amazon_cni_driver" {
126+
role = aws_iam_role.eks_cni_driver.name
127+
policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
128+
}
129+
130+
131+
84132

85133
module "eks" {
86134
source = "terraform-aws-modules/eks/aws"
@@ -124,4 +172,6 @@ module "eks" {
124172
aws_auth_users = var.aws_auth_users
125173

126174
aws_auth_accounts = var.aws_auth_accounts
175+
176+
cluster_addons = local.cluster_addons_iam
127177
}

terraform-modules/aws/eks/variables.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,13 @@ variable "cluster_kms_enable_rotation" {
243243
type = bool
244244
default = true
245245
description = "(Optional) Specifies whether key rotation is enabled. Defaults to true."
246+
}
247+
248+
################################################################################
249+
# EKS Addons
250+
################################################################################
251+
variable "cluster_addons" {
252+
description = "Map of cluster addon configurations to enable for the cluster. Addon name can be the map keys or set with `name`"
253+
type = any
254+
default = {}
246255
}

0 commit comments

Comments
 (0)