main.tf (145 lines of code) (raw):
locals {
default_cluster_security_group_rules = {
egress_nodes_ephemeral_ports_tcp = {
description = "To node 1025-65535"
protocol = "tcp"
from_port = 1025
to_port = 65535
type = "egress"
source_node_security_group = true
}
}
default_node_security_group_additional_rules = {
ingress_self_all = {
description = "Node to node all ports/protocols"
protocol = "-1"
from_port = 0
to_port = 0
type = "ingress"
self = true
}
egress_all = {
description = "Node all egress"
protocol = "-1"
from_port = 0
to_port = 0
type = "egress"
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
}
}
}
module "kubernetes" {
source = "terraform-aws-modules/eks/aws"
version = "20.37.2"
create = try(coalesce(var.cluster_enabled, true), true)
tags = try(merge(coalesce(var.tags, {}), {
"karpenter.sh/discovery" = var.prefix
}), {})
prefix_separator = "-"
cluster_name = var.prefix
cluster_version = try(coalesce(var.cluster_version, "1.34"), "1.34")
cluster_enabled_log_types = try(coalesce(var.cluster_cloudwatch_logging.log_types, ["audit", "api", "authenticator"]), ["audit", "api", "authenticator"])
authentication_mode = try(coalesce(var.cluster_authentication_mode, "API_AND_CONFIG_MAP"), "API_AND_CONFIG_MAP")
cluster_additional_security_group_ids = try(coalesce(var.cluster_vpc_config.additional_security_group_ids, []), [])
vpc_id = try(coalesce(var.cluster_network_external_vpc_id, module.internal_network.vpc_id, null), null)
control_plane_subnet_ids = try(coalesce(var.cluster_network_external_control_plane_subnet_ids, null), module.internal_network.intra_subnets, [])
subnet_ids = try(coalesce(var.cluster_network_external_node_subnet_ids, null), module.internal_network.private_subnets, [])
cluster_endpoint_private_access = try(coalesce(var.cluster_vpc_config.expose_api_access_on_intranet, true), true)
cluster_endpoint_public_access = try(coalesce(var.cluster_vpc_config.expose_api_access_on_internet, true), true)
cluster_endpoint_public_access_cidrs = try(coalesce(var.cluster_vpc_config.accept_api_requests_from_cidr_blocks, ["0.0.0.0/0"]), ["0.0.0.0/0"])
cluster_ip_family = try(coalesce(var.cluster_service_network_config.ip_family, "ipv4"), "ipv4")
cluster_service_ipv4_cidr = try(coalesce(var.cluster_service_network_config.service_ipv4_cidr, null), null)
cluster_service_ipv6_cidr = try(coalesce(var.cluster_service_network_config.service_ipv6_cidr, null), null)
outpost_config = {}
cluster_encryption_config = try(coalesce(var.cluster_database_encryption_config, {
provider_key_arn = null
resources = ["secrets"]
}), {
provider_key_arn = null
resources = ["secrets"]
})
attach_cluster_encryption_policy = try(coalesce(var.cluster_encryption_policy.attach_default, true), true)
cluster_tags = try(coalesce(var.cluster_tags, {}), {})
create_cluster_primary_security_group_tags = try(coalesce(var.cluster_security_group.create_primary_security_group_tags, true), true)
cluster_timeouts = try(coalesce(var.cluster_timeouts, {}), {})
access_entries = try(coalesce(var.cluster_access_management.list, {
# The below code block is a default access management configuration that relies fully on the new API for access entries and access policies.
# It is necessary for deploying Kubernetes resources with the Kubernetes and Helm provider.
aws_account_admins = {
principal_arn = data.aws_iam_role.current.arn
policy_associations = {
cluster_admins = {
policy_arn = "arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy"
access_scope = {
type = "cluster"
namespaces = []
}
}
}
}
}))
enable_cluster_creator_admin_permissions = try(coalesce(var.cluster_access_management.enable_cluster_creator_admin_permissions, false), false)
create_kms_key = try(coalesce(var.cluster_kms.enabled, true), true)
kms_key_description = try(coalesce(var.cluster_kms.key_description, null), null)
kms_key_deletion_window_in_days = try(coalesce(var.cluster_kms.key_deletion_window_in_days, 30), 30)
enable_kms_key_rotation = try(coalesce(var.cluster_kms.enable_key_rotation, true), true)
kms_key_enable_default_policy = try(coalesce(var.cluster_kms.key_enable_default_policy, true), true)
kms_key_owners = try(coalesce(var.cluster_kms.key_owners, []), [])
kms_key_administrators = try(coalesce(var.cluster_kms.key_administrators, []), [])
kms_key_users = try(coalesce(var.cluster_kms.key_users, []), [])
kms_key_service_users = try(coalesce(var.cluster_kms.key_service_users, []), [])
kms_key_source_policy_documents = try(coalesce(var.cluster_kms.key_source_policy_documents, []), [])
kms_key_override_policy_documents = try(coalesce(var.cluster_kms.key_override_policy_documents, []), [])
kms_key_aliases = try(coalesce(var.cluster_kms.key_aliases, []), [])
create_cloudwatch_log_group = try(coalesce(var.cluster_cloudwatch_logging.enabled, true), true)
cloudwatch_log_group_retention_in_days = try(coalesce(var.cluster_cloudwatch_logging.log_group_retention_in_days, 14), 14)
cloudwatch_log_group_kms_key_id = try(coalesce(var.cluster_cloudwatch_logging.log_group_kms_key_id, null), null)
cloudwatch_log_group_class = try(coalesce(var.cluster_cloudwatch_logging.log_group_class, null), null)
cloudwatch_log_group_tags = try(coalesce(var.cluster_cloudwatch_logging.log_group_tags, {}), {})
create_cluster_security_group = try(coalesce(var.cluster_security_group.create_default, true), true)
cluster_security_group_id = try(coalesce(var.cluster_security_group.id, null), null)
cluster_security_group_name = try(coalesce(var.cluster_security_group.name, null), null)
cluster_security_group_use_name_prefix = try(coalesce(var.cluster_security_group.use_name_prefix, true), true)
cluster_security_group_description = try(coalesce(var.cluster_security_group.description, "EKS cluster shared security group"), "EKS cluster shared security group")
cluster_security_group_additional_rules = try(merge(coalesce(var.cluster_security_group.additional_rules, {}), local.default_cluster_security_group_rules), {})
cluster_security_group_tags = try(coalesce(var.cluster_security_group.tags, {}), {})
create_cni_ipv6_iam_policy = try(coalesce(var.cluster_node_security_group.create_cni_ipv6_iam_policy, false), false)
create_node_security_group = try(coalesce(var.cluster_node_security_group.create_default, true), true)
node_security_group_id = try(coalesce(var.cluster_node_security_group.id, ""), "")
node_security_group_name = try(coalesce(var.cluster_node_security_group.name, null), null)
node_security_group_use_name_prefix = try(coalesce(var.cluster_node_security_group.use_name_prefix, true), true)
node_security_group_description = try(coalesce(var.cluster_node_security_group.description, "EKS node security group"), "EKS node security group")
node_security_group_additional_rules = try(merge(coalesce(var.cluster_node_security_group.additional_rules, {}), local.default_node_security_group_additional_rules), {})
node_security_group_enable_recommended_rules = try(coalesce(var.cluster_node_security_group.enable_recommended_rules, true), true)
node_security_group_tags = try(merge(coalesce(var.cluster_node_security_group.tags, {}), {
"karpenter.sh/discovery" = var.prefix
}), {})
enable_efa_support = try(coalesce(var.cluster_node_security_group.enable_efa_support, false), false)
enable_irsa = try(coalesce(var.cluster_iam_role_for_service_account.enabled, true), true)
openid_connect_audiences = try(coalesce(var.cluster_iam_role_for_service_account.openid_connect_audiences, []), [])
include_oidc_root_ca_thumbprint = try(coalesce(var.cluster_iam_role_for_service_account.include_oidc_root_ca_thumbprint, true), true)
custom_oidc_thumbprints = try(coalesce(var.cluster_iam_role_for_service_account.custom_oidc_thumbprints, []), [])
create_iam_role = try(coalesce(var.cluster_iam.create_default_role, true), true)
iam_role_arn = try(coalesce(var.cluster_iam.role_arn, null), null)
iam_role_name = try(coalesce(var.cluster_iam.role_name, null), null)
iam_role_use_name_prefix = try(coalesce(var.cluster_iam.role_use_name_prefix, true), true)
iam_role_path = try(coalesce(var.cluster_iam.role_path, null), null)
iam_role_description = try(coalesce(var.cluster_iam.role_description, null), null)
iam_role_permissions_boundary = try(coalesce(var.cluster_iam.role_permissions_boundary, null), null)
iam_role_additional_policies = try(coalesce(var.cluster_iam.role_additional_policies, {}), {})
iam_role_tags = try(coalesce(var.cluster_iam.role_tags, {}), {})
cluster_encryption_policy_use_name_prefix = try(coalesce(var.cluster_encryption_policy.use_name_prefix, true), true)
cluster_encryption_policy_name = try(coalesce(var.cluster_encryption_policy.name, null), null)
cluster_encryption_policy_description = try(coalesce(var.cluster_encryption_policy.description, null), null)
cluster_encryption_policy_path = try(coalesce(var.cluster_encryption_policy.path, null), null)
cluster_encryption_policy_tags = try(coalesce(var.cluster_encryption_policy.tags, {}), {})
dataplane_wait_duration = "30s"
cluster_addons = try(merge(var.cluster_addons_default, coalesce(var.cluster_addons_additional, null)), {})
cluster_addons_timeouts = try(coalesce(var.cluster_addons_timeouts, {}), {})
cluster_identity_providers = try(coalesce(var.cluster_additional_identity_providers, {}), {})
fargate_profiles = try(coalesce(var.cluster_compute_pool_fargate.groups, {}), {})
fargate_profile_defaults = try(coalesce(var.cluster_compute_pool_fargate.defaults, {}), {})
self_managed_node_groups = try(coalesce(var.cluster_compute_pool_self_managed.defaults, {}), {})
self_managed_node_group_defaults = try(coalesce(var.cluster_compute_pool_self_managed.groups, {}), {})
eks_managed_node_groups = try(coalesce(var.cluster_compute_pool_aws_managed.groups, {}), {})
eks_managed_node_group_defaults = try(coalesce(var.cluster_compute_pool_aws_managed.defaults, {}), {})
}