mirror of
https://github.com/ysoftdevs/terraform-aws-eks.git
synced 2026-01-16 16:47:20 +01:00
feat: Allow users to selectively attach the EKS created cluster primary security group to nodes (#1952)
This commit is contained in:
@@ -658,6 +658,7 @@ Module provided default templates can be found under the [templates directory](h
|
|||||||
- Users have the ability to opt out of the security group creation and instead provide their own externally created security group if so desired
|
- Users have the ability to opt out of the security group creation and instead provide their own externally created security group if so desired
|
||||||
- The security group that is created is designed to handle the bare minimum communication necessary between the control plane and the nodes, as well as any external egress to allow the cluster to successfully launch without error
|
- The security group that is created is designed to handle the bare minimum communication necessary between the control plane and the nodes, as well as any external egress to allow the cluster to successfully launch without error
|
||||||
- Users also have the option to supply additional, externally created security groups to the cluster as well via the `cluster_additional_security_group_ids` variable
|
- Users also have the option to supply additional, externally created security groups to the cluster as well via the `cluster_additional_security_group_ids` variable
|
||||||
|
- Lastly, users are able to opt in to attaching the primary security group automatically created by the EKS service by setting `attach_cluster_primary_security_group` = `true` from the root module for the respective node group (or set it within the node group defaults). This security group is not managed by the module; it is created by the EKS service. It permits all traffic within the domain of the security group as well as all egress traffic to the internet.
|
||||||
|
|
||||||
- Node Group Security Group(s)
|
- Node Group Security Group(s)
|
||||||
- Each node group (EKS Managed Node Group and Self Managed Node Group) by default creates its own security group. By default, this security group does not contain any additional security group rules. It is merely an "empty container" that offers users the ability to opt into any addition inbound our outbound rules as necessary
|
- Each node group (EKS Managed Node Group and Self Managed Node Group) by default creates its own security group. By default, this security group does not contain any additional security group rules. It is merely an "empty container" that offers users the ability to opt into any addition inbound our outbound rules as necessary
|
||||||
|
|||||||
@@ -108,10 +108,12 @@ module "eks" {
|
|||||||
|
|
||||||
# EKS Managed Node Group(s)
|
# EKS Managed Node Group(s)
|
||||||
eks_managed_node_group_defaults = {
|
eks_managed_node_group_defaults = {
|
||||||
ami_type = "AL2_x86_64"
|
ami_type = "AL2_x86_64"
|
||||||
disk_size = 50
|
disk_size = 50
|
||||||
instance_types = ["m6i.large", "m5.large", "m5n.large", "m5zn.large"]
|
instance_types = ["m6i.large", "m5.large", "m5n.large", "m5zn.large"]
|
||||||
vpc_security_group_ids = [aws_security_group.additional.id]
|
|
||||||
|
attach_cluster_primary_security_group = true
|
||||||
|
vpc_security_group_ids = [aws_security_group.additional.id]
|
||||||
}
|
}
|
||||||
|
|
||||||
eks_managed_node_groups = {
|
eks_managed_node_groups = {
|
||||||
@@ -188,10 +190,10 @@ module "eks_managed_node_group" {
|
|||||||
cluster_name = module.eks.cluster_id
|
cluster_name = module.eks.cluster_id
|
||||||
cluster_version = local.cluster_version
|
cluster_version = local.cluster_version
|
||||||
|
|
||||||
vpc_id = module.vpc.vpc_id
|
vpc_id = module.vpc.vpc_id
|
||||||
subnet_ids = module.vpc.private_subnets
|
subnet_ids = module.vpc.private_subnets
|
||||||
|
cluster_primary_security_group_id = module.eks.cluster_primary_security_group_id
|
||||||
vpc_security_group_ids = [
|
vpc_security_group_ids = [
|
||||||
module.eks.cluster_primary_security_group_id,
|
|
||||||
module.eks.cluster_security_group_id,
|
module.eks.cluster_security_group_id,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ module "eks_managed_node_group" {
|
|||||||
| <a name="input_cluster_endpoint"></a> [cluster\_endpoint](#input\_cluster\_endpoint) | Endpoint of associated EKS cluster | `string` | `""` | no |
|
| <a name="input_cluster_endpoint"></a> [cluster\_endpoint](#input\_cluster\_endpoint) | Endpoint of associated EKS cluster | `string` | `""` | no |
|
||||||
| <a name="input_cluster_ip_family"></a> [cluster\_ip\_family](#input\_cluster\_ip\_family) | The IP family used to assign Kubernetes pod and service addresses. Valid values are `ipv4` (default) and `ipv6` | `string` | `null` | no |
|
| <a name="input_cluster_ip_family"></a> [cluster\_ip\_family](#input\_cluster\_ip\_family) | The IP family used to assign Kubernetes pod and service addresses. Valid values are `ipv4` (default) and `ipv6` | `string` | `null` | no |
|
||||||
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | Name of associated EKS cluster | `string` | `null` | no |
|
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | Name of associated EKS cluster | `string` | `null` | no |
|
||||||
|
| <a name="input_cluster_primary_security_group_id"></a> [cluster\_primary\_security\_group\_id](#input\_cluster\_primary\_security\_group\_id) | The ID of the EKS cluster primary security group to associate with the instance(s). This is the security group that is automatically created by the EKS service | `string` | `null` | no |
|
||||||
| <a name="input_cluster_security_group_id"></a> [cluster\_security\_group\_id](#input\_cluster\_security\_group\_id) | Cluster control plane security group ID | `string` | `null` | no |
|
| <a name="input_cluster_security_group_id"></a> [cluster\_security\_group\_id](#input\_cluster\_security\_group\_id) | Cluster control plane security group ID | `string` | `null` | no |
|
||||||
| <a name="input_cluster_service_ipv4_cidr"></a> [cluster\_service\_ipv4\_cidr](#input\_cluster\_service\_ipv4\_cidr) | The CIDR block to assign Kubernetes service IP addresses from. If you don't specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks | `string` | `null` | no |
|
| <a name="input_cluster_service_ipv4_cidr"></a> [cluster\_service\_ipv4\_cidr](#input\_cluster\_service\_ipv4\_cidr) | The CIDR block to assign Kubernetes service IP addresses from. If you don't specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks | `string` | `null` | no |
|
||||||
| <a name="input_cluster_version"></a> [cluster\_version](#input\_cluster\_version) | Kubernetes version. Defaults to EKS Cluster Kubernetes version | `string` | `null` | no |
|
| <a name="input_cluster_version"></a> [cluster\_version](#input\_cluster\_version) | Kubernetes version. Defaults to EKS Cluster Kubernetes version | `string` | `null` | no |
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ resource "aws_launch_template" "this" {
|
|||||||
key_name = var.key_name
|
key_name = var.key_name
|
||||||
user_data = module.user_data.user_data
|
user_data = module.user_data.user_data
|
||||||
|
|
||||||
vpc_security_group_ids = compact(concat([try(aws_security_group.this[0].id, "")], var.vpc_security_group_ids))
|
vpc_security_group_ids = compact(concat([try(aws_security_group.this[0].id, ""), var.cluster_primary_security_group_id], var.vpc_security_group_ids))
|
||||||
|
|
||||||
default_version = var.launch_template_default_version
|
default_version = var.launch_template_default_version
|
||||||
update_default_version = var.update_launch_template_default_version
|
update_default_version = var.update_launch_template_default_version
|
||||||
|
|||||||
@@ -126,6 +126,12 @@ variable "vpc_security_group_ids" {
|
|||||||
default = []
|
default = []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "cluster_primary_security_group_id" {
|
||||||
|
description = "The ID of the EKS cluster primary security group to associate with the instance(s). This is the security group that is automatically created by the EKS service"
|
||||||
|
type = string
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
variable "launch_template_default_version" {
|
variable "launch_template_default_version" {
|
||||||
description = "Default version of the launch template"
|
description = "Default version of the launch template"
|
||||||
type = string
|
type = string
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ module "self_managed_node_group" {
|
|||||||
| <a name="input_cluster_endpoint"></a> [cluster\_endpoint](#input\_cluster\_endpoint) | Endpoint of associated EKS cluster | `string` | `""` | no |
|
| <a name="input_cluster_endpoint"></a> [cluster\_endpoint](#input\_cluster\_endpoint) | Endpoint of associated EKS cluster | `string` | `""` | no |
|
||||||
| <a name="input_cluster_ip_family"></a> [cluster\_ip\_family](#input\_cluster\_ip\_family) | The IP family used to assign Kubernetes pod and service addresses. Valid values are `ipv4` (default) and `ipv6` | `string` | `null` | no |
|
| <a name="input_cluster_ip_family"></a> [cluster\_ip\_family](#input\_cluster\_ip\_family) | The IP family used to assign Kubernetes pod and service addresses. Valid values are `ipv4` (default) and `ipv6` | `string` | `null` | no |
|
||||||
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | Name of associated EKS cluster | `string` | `""` | no |
|
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | Name of associated EKS cluster | `string` | `""` | no |
|
||||||
|
| <a name="input_cluster_primary_security_group_id"></a> [cluster\_primary\_security\_group\_id](#input\_cluster\_primary\_security\_group\_id) | The ID of the EKS cluster primary security group to associate with the instance(s). This is the security group that is automatically created by the EKS service | `string` | `null` | no |
|
||||||
| <a name="input_cluster_security_group_id"></a> [cluster\_security\_group\_id](#input\_cluster\_security\_group\_id) | Cluster control plane security group ID | `string` | `null` | no |
|
| <a name="input_cluster_security_group_id"></a> [cluster\_security\_group\_id](#input\_cluster\_security\_group\_id) | Cluster control plane security group ID | `string` | `null` | no |
|
||||||
| <a name="input_cluster_version"></a> [cluster\_version](#input\_cluster\_version) | Kubernetes cluster version - used to lookup default AMI ID if one is not provided | `string` | `null` | no |
|
| <a name="input_cluster_version"></a> [cluster\_version](#input\_cluster\_version) | Kubernetes cluster version - used to lookup default AMI ID if one is not provided | `string` | `null` | no |
|
||||||
| <a name="input_cpu_options"></a> [cpu\_options](#input\_cpu\_options) | The CPU options for the instance | `map(string)` | `null` | no |
|
| <a name="input_cpu_options"></a> [cpu\_options](#input\_cpu\_options) | The CPU options for the instance | `map(string)` | `null` | no |
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ resource "aws_launch_template" "this" {
|
|||||||
key_name = var.key_name
|
key_name = var.key_name
|
||||||
user_data = module.user_data.user_data
|
user_data = module.user_data.user_data
|
||||||
|
|
||||||
vpc_security_group_ids = compact(concat([try(aws_security_group.this[0].id, "")], var.vpc_security_group_ids))
|
vpc_security_group_ids = compact(concat([try(aws_security_group.this[0].id, ""), var.cluster_primary_security_group_id], var.vpc_security_group_ids))
|
||||||
|
|
||||||
default_version = var.launch_template_default_version
|
default_version = var.launch_template_default_version
|
||||||
update_default_version = var.update_launch_template_default_version
|
update_default_version = var.update_launch_template_default_version
|
||||||
|
|||||||
@@ -234,6 +234,12 @@ variable "vpc_security_group_ids" {
|
|||||||
default = []
|
default = []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "cluster_primary_security_group_id" {
|
||||||
|
description = "The ID of the EKS cluster primary security group to associate with the instance(s). This is the security group that is automatically created by the EKS service"
|
||||||
|
type = string
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
variable "enable_monitoring" {
|
variable "enable_monitoring" {
|
||||||
description = "Enables/disables detailed monitoring"
|
description = "Enables/disables detailed monitoring"
|
||||||
type = bool
|
type = bool
|
||||||
|
|||||||
@@ -281,7 +281,6 @@ module "eks_managed_node_group" {
|
|||||||
|
|
||||||
ebs_optimized = try(each.value.ebs_optimized, var.eks_managed_node_group_defaults.ebs_optimized, null)
|
ebs_optimized = try(each.value.ebs_optimized, var.eks_managed_node_group_defaults.ebs_optimized, null)
|
||||||
key_name = try(each.value.key_name, var.eks_managed_node_group_defaults.key_name, null)
|
key_name = try(each.value.key_name, var.eks_managed_node_group_defaults.key_name, null)
|
||||||
vpc_security_group_ids = compact(concat([local.node_security_group_id], try(each.value.vpc_security_group_ids, var.eks_managed_node_group_defaults.vpc_security_group_ids, [])))
|
|
||||||
launch_template_default_version = try(each.value.launch_template_default_version, var.eks_managed_node_group_defaults.launch_template_default_version, null)
|
launch_template_default_version = try(each.value.launch_template_default_version, var.eks_managed_node_group_defaults.launch_template_default_version, null)
|
||||||
update_launch_template_default_version = try(each.value.update_launch_template_default_version, var.eks_managed_node_group_defaults.update_launch_template_default_version, true)
|
update_launch_template_default_version = try(each.value.update_launch_template_default_version, var.eks_managed_node_group_defaults.update_launch_template_default_version, true)
|
||||||
disable_api_termination = try(each.value.disable_api_termination, var.eks_managed_node_group_defaults.disable_api_termination, null)
|
disable_api_termination = try(each.value.disable_api_termination, var.eks_managed_node_group_defaults.disable_api_termination, null)
|
||||||
@@ -315,13 +314,15 @@ module "eks_managed_node_group" {
|
|||||||
iam_role_additional_policies = try(each.value.iam_role_additional_policies, var.eks_managed_node_group_defaults.iam_role_additional_policies, [])
|
iam_role_additional_policies = try(each.value.iam_role_additional_policies, var.eks_managed_node_group_defaults.iam_role_additional_policies, [])
|
||||||
|
|
||||||
# Security group
|
# Security group
|
||||||
create_security_group = try(each.value.create_security_group, var.eks_managed_node_group_defaults.create_security_group, true)
|
vpc_security_group_ids = compact(concat([local.node_security_group_id], try(each.value.vpc_security_group_ids, var.eks_managed_node_group_defaults.vpc_security_group_ids, [])))
|
||||||
security_group_name = try(each.value.security_group_name, var.eks_managed_node_group_defaults.security_group_name, null)
|
cluster_primary_security_group_id = try(each.value.attach_cluster_primary_security_group, var.eks_managed_node_group_defaults.attach_cluster_primary_security_group, false) ? aws_eks_cluster.this[0].vpc_config[0].cluster_security_group_id : null
|
||||||
security_group_use_name_prefix = try(each.value.security_group_use_name_prefix, var.eks_managed_node_group_defaults.security_group_use_name_prefix, true)
|
create_security_group = try(each.value.create_security_group, var.eks_managed_node_group_defaults.create_security_group, true)
|
||||||
security_group_description = try(each.value.security_group_description, var.eks_managed_node_group_defaults.security_group_description, "EKS managed node group security group")
|
security_group_name = try(each.value.security_group_name, var.eks_managed_node_group_defaults.security_group_name, null)
|
||||||
vpc_id = try(each.value.vpc_id, var.eks_managed_node_group_defaults.vpc_id, var.vpc_id)
|
security_group_use_name_prefix = try(each.value.security_group_use_name_prefix, var.eks_managed_node_group_defaults.security_group_use_name_prefix, true)
|
||||||
security_group_rules = try(each.value.security_group_rules, var.eks_managed_node_group_defaults.security_group_rules, {})
|
security_group_description = try(each.value.security_group_description, var.eks_managed_node_group_defaults.security_group_description, "EKS managed node group security group")
|
||||||
security_group_tags = try(each.value.security_group_tags, var.eks_managed_node_group_defaults.security_group_tags, {})
|
vpc_id = try(each.value.vpc_id, var.eks_managed_node_group_defaults.vpc_id, var.vpc_id)
|
||||||
|
security_group_rules = try(each.value.security_group_rules, var.eks_managed_node_group_defaults.security_group_rules, {})
|
||||||
|
security_group_tags = try(each.value.security_group_tags, var.eks_managed_node_group_defaults.security_group_tags, {})
|
||||||
|
|
||||||
tags = merge(var.tags, try(each.value.tags, var.eks_managed_node_group_defaults.tags, {}))
|
tags = merge(var.tags, try(each.value.tags, var.eks_managed_node_group_defaults.tags, {}))
|
||||||
}
|
}
|
||||||
@@ -405,8 +406,6 @@ module "self_managed_node_group" {
|
|||||||
instance_type = try(each.value.instance_type, var.self_managed_node_group_defaults.instance_type, "m6i.large")
|
instance_type = try(each.value.instance_type, var.self_managed_node_group_defaults.instance_type, "m6i.large")
|
||||||
key_name = try(each.value.key_name, var.self_managed_node_group_defaults.key_name, null)
|
key_name = try(each.value.key_name, var.self_managed_node_group_defaults.key_name, null)
|
||||||
|
|
||||||
vpc_security_group_ids = compact(concat([local.node_security_group_id], try(each.value.vpc_security_group_ids, var.self_managed_node_group_defaults.vpc_security_group_ids, [])))
|
|
||||||
cluster_security_group_id = local.cluster_security_group_id
|
|
||||||
launch_template_default_version = try(each.value.launch_template_default_version, var.self_managed_node_group_defaults.launch_template_default_version, null)
|
launch_template_default_version = try(each.value.launch_template_default_version, var.self_managed_node_group_defaults.launch_template_default_version, null)
|
||||||
update_launch_template_default_version = try(each.value.update_launch_template_default_version, var.self_managed_node_group_defaults.update_launch_template_default_version, true)
|
update_launch_template_default_version = try(each.value.update_launch_template_default_version, var.self_managed_node_group_defaults.update_launch_template_default_version, true)
|
||||||
disable_api_termination = try(each.value.disable_api_termination, var.self_managed_node_group_defaults.disable_api_termination, null)
|
disable_api_termination = try(each.value.disable_api_termination, var.self_managed_node_group_defaults.disable_api_termination, null)
|
||||||
@@ -442,13 +441,16 @@ module "self_managed_node_group" {
|
|||||||
iam_role_additional_policies = try(each.value.iam_role_additional_policies, var.self_managed_node_group_defaults.iam_role_additional_policies, [])
|
iam_role_additional_policies = try(each.value.iam_role_additional_policies, var.self_managed_node_group_defaults.iam_role_additional_policies, [])
|
||||||
|
|
||||||
# Security group
|
# Security group
|
||||||
create_security_group = try(each.value.create_security_group, var.self_managed_node_group_defaults.create_security_group, true)
|
vpc_security_group_ids = compact(concat([local.node_security_group_id], try(each.value.vpc_security_group_ids, var.self_managed_node_group_defaults.vpc_security_group_ids, [])))
|
||||||
security_group_name = try(each.value.security_group_name, var.self_managed_node_group_defaults.security_group_name, null)
|
cluster_security_group_id = local.cluster_security_group_id
|
||||||
security_group_use_name_prefix = try(each.value.security_group_use_name_prefix, var.self_managed_node_group_defaults.security_group_use_name_prefix, true)
|
cluster_primary_security_group_id = try(each.value.attach_cluster_primary_security_group, var.self_managed_node_group_defaults.attach_cluster_primary_security_group, false) ? aws_eks_cluster.this[0].vpc_config[0].cluster_security_group_id : null
|
||||||
security_group_description = try(each.value.security_group_description, var.self_managed_node_group_defaults.security_group_description, "Self managed node group security group")
|
create_security_group = try(each.value.create_security_group, var.self_managed_node_group_defaults.create_security_group, true)
|
||||||
vpc_id = try(each.value.vpc_id, var.self_managed_node_group_defaults.vpc_id, var.vpc_id)
|
security_group_name = try(each.value.security_group_name, var.self_managed_node_group_defaults.security_group_name, null)
|
||||||
security_group_rules = try(each.value.security_group_rules, var.self_managed_node_group_defaults.security_group_rules, {})
|
security_group_use_name_prefix = try(each.value.security_group_use_name_prefix, var.self_managed_node_group_defaults.security_group_use_name_prefix, true)
|
||||||
security_group_tags = try(each.value.security_group_tags, var.self_managed_node_group_defaults.security_group_tags, {})
|
security_group_description = try(each.value.security_group_description, var.self_managed_node_group_defaults.security_group_description, "Self managed node group security group")
|
||||||
|
vpc_id = try(each.value.vpc_id, var.self_managed_node_group_defaults.vpc_id, var.vpc_id)
|
||||||
|
security_group_rules = try(each.value.security_group_rules, var.self_managed_node_group_defaults.security_group_rules, {})
|
||||||
|
security_group_tags = try(each.value.security_group_tags, var.self_managed_node_group_defaults.security_group_tags, {})
|
||||||
|
|
||||||
tags = merge(var.tags, try(each.value.tags, var.self_managed_node_group_defaults.tags, {}))
|
tags = merge(var.tags, try(each.value.tags, var.self_managed_node_group_defaults.tags, {}))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user