-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.tf
253 lines (215 loc) · 7.25 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
/**
* # terraform-eks-full
* ## Create EKS cluster with Controller, Managed Nodegroups and add-ons
*
* ### Steps to create for Controller:
* 1. IAM Role
* 2. KMS Key
* 3. Security Group
* 4. Logs stream in CloudWatch
* 5. Control Plane
*
* ### Steps to create Nodegroups
* 1. IAM Role
* 2. Security Group
* 3. Autoscale Launch Template
* 4. EKS NodeGroup ASG from template
*
* ### Steps to create addons:
* #### VPC-CNI
* 1. IAM Role
* 2. EBS CNI Driver
* NB! VPC-CNI set to use custom VPC for pod networks. Eniconfig is needed.
* ToDo: Add eniconfig by applying kubectl apply -f ENICONFIG.yaml
* NB! Node system ASG refresh needed.
*
* #### EBS-CSI
* 1. IAM Role
* 2. EBS CSI Driver
* 3. Add EBS SCI Driver ARN to default EBS KMS Key users
*
* #### CoreDNS
* 1. coredns deployment
*
* #### Kube-proxy
* 1. kube-proxy deployment
*
* #### Iam Roles for Service Accounts
* 1. Create default IRSA if enabled: Autoscaler, ALB Controller, External Secrets Operator, Dashboard.
* 2. Custom IRSA if set (available variables for template: "eks_name" and "account_id")
*
* #### Custom OIDC
* 1. Create Additional custom OIDC provider if set.
* ## ToDo: move all internal config to separate submodule
* NB!!!Connection to control plane required!!!
* provider "kubernetes" {
* config_path = "~/.kube/config"
* config_context = module.controlplane.eks_arn
*}
* Create var.ebs_kms_key if == 0 get default from aws
* in case != use it and add cluster balancer autoscaler to users of this key.
* OR ad designated users to KMS key usage right after custom KMS key creation
* COEXT-68712
*/
data "aws_region" "current" {}
data "aws_ebs_default_kms_key" "current" {}
data "aws_kms_key" "current" {
key_id = data.aws_ebs_default_kms_key.current.key_arn
}
module "controlplane" {
source = "./modules/controlplane"
name = var.name
eks_version = var.eks_version
service_ipv4_cidr = var.service_ipv4_cidr
control_plane_allowed_networks = var.control_plane_allowed_networks
log_retention_in_days = try(var.log_retention_in_days, 30)
current_region = data.aws_region.current.name
controller_well_known_policy_arns = var.controller_well_known_policy_arns
controller_custom_iam_policy = var.controller_custom_iam_policy
vpc_id = var.vpc_id
private_subnet_ids = var.private_subnet_ids
tags = merge(
var.tags,
{ Name = var.name }
)
}
module "alb" {
source = "./modules/alb"
vpc_id = var.vpc_id
eks_name = var.name
alb_internal = var.alb_internal
subnet_ids = var.private_subnet_ids
certificate_arn = var.alb_certificate_arn
dns_zone_id = var.dns_zone_id
alb_delete_protection = length(module.controlplane.arn) > 0 ? true : false
tags = merge(
var.tags,
var.tags_alb
)
}
locals {
create_nodes = length(var.nodegroups) == 0 ? 0 : 1
}
module "nodegroups" {
source = "./modules/nodegroups"
count = local.create_nodes
name = var.name
eks_version = var.eks_version
service_ipv4_cidr = var.service_ipv4_cidr
nodegroups = var.nodegroups
key_name = var.key_name
subnet_ids = var.private_subnet_ids
vpc_id = var.vpc_id
node_well_known_policy_arns = var.node_well_known_policy_arns
eks_security_group_id = module.controlplane.security_group_id
alb_security_group_id = module.alb.alb_sg_id
eks_endpoint = module.controlplane.endpoint
eks_ca_cert = module.controlplane.ca_cert
kms_ebs_key_id = var.kms_ebs_key_id == null ? data.aws_kms_key.current.arn : var.kms_ebs_key_id
tags = merge(
var.tags,
var.tags_nodegroup
)
depends_on = [
module.controlplane,
# module.alb
]
}
module "addon_vpc_cni" {
source = "./modules/addon-vpc-cni"
eks_name = var.name
eks_version = module.controlplane.version
latest_addon_version = var.latest_addon_version
resolve_conflicts_on_create = "OVERWRITE"
resolve_conflicts_on_update = "OVERWRITE"
pod_subnet_ids = var.pod_subnet_ids
eks_security_group_id = module.controlplane.security_group_id
oidc_provider_arn = module.controlplane.oidc_provider.arn
eniconfig_create = try(var.eniconfig_create, false)
tags = try(var.tags, {})
depends_on = [
module.nodegroups
]
}
module "addon_ebs_csi" {
source = "./modules/addon-ebs-csi"
count = local.create_nodes
eks_name = var.name
eks_version = module.controlplane.version
latest_addon_version = var.latest_addon_version
resolve_conflicts_on_create = "OVERWRITE"
resolve_conflicts_on_update = "OVERWRITE"
oidc_provider_arn = module.controlplane.oidc_provider.arn
tags = var.tags
depends_on = [
module.nodegroups,
module.addon_vpc_cni
]
}
module "addon_efs_csi" {
source = "./modules/addon-efs-csi"
count = local.create_nodes
eks_name = var.name
eks_version = module.controlplane.version
latest_addon_version = var.latest_addon_version
resolve_conflicts_on_create = "OVERWRITE"
resolve_conflicts_on_update = "OVERWRITE"
oidc_provider_arn = module.controlplane.oidc_provider.arn
tags = var.tags
depends_on = [
module.nodegroups,
module.addon_vpc_cni
]
}
module "addon_coredns" {
source = "./modules/addon-coredns"
count = local.create_nodes
eks_name = var.name
eks_version = module.controlplane.version
latest_addon_version = var.latest_addon_version
resolve_conflicts_on_create = "OVERWRITE"
resolve_conflicts_on_update = "OVERWRITE"
tags = var.tags
depends_on = [
module.nodegroups,
module.addon_vpc_cni
]
}
module "addon_kube_proxy" {
source = "./modules/addon-kube-proxy"
count = local.create_nodes
eks_name = var.name
eks_version = module.controlplane.version
latest_addon_version = var.latest_addon_version
resolve_conflicts_on_create = "OVERWRITE"
resolve_conflicts_on_update = "OVERWRITE"
tags = var.tags
depends_on = [
module.nodegroups,
module.addon_vpc_cni
]
}
module "irsa" {
source = "./modules/irsa"
eks_name = var.name
oidc_provider_arn = module.controlplane.oidc_provider.arn
irsa_create_autoscaler = var.irsa_create_autoscaler
irsa_create_alb_controller = var.irsa_create_alb_controller
irsa_create_eso = var.irsa_create_eso
irsa_create_gen_dashboard = var.irsa_create_gen_dashboard
irsa_custom = var.irsa_custom
tags = merge(
var.tags,
var.tags_irsa
)
}
module "extra_oidc" {
source = "./modules/oidc"
for_each = length(var.oidc_config) == 0 ? {} : var.oidc_config
eks_name = var.name
oidc_config = var.oidc_config
tags = merge(
var.tags,
var.tags_oidc
)
}