Skip to content

Commit 24c0f7d

Browse files
authored
feat(workers): Add option for disabling legacy IMDS (#1037)
1 parent 2ffe4e0 commit 24c0f7d

File tree

7 files changed

+98
-84
lines changed

7 files changed

+98
-84
lines changed

module-workers.tf

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -47,35 +47,36 @@ module "workers" {
4747
worker_pools = var.worker_pools
4848

4949
# Workers
50-
assign_dns = var.assign_dns
51-
assign_public_ip = var.worker_is_public
52-
block_volume_type = var.worker_block_volume_type
53-
capacity_reservation_id = var.worker_capacity_reservation_id
54-
cloud_init = var.worker_cloud_init
55-
disable_default_cloud_init = var.worker_disable_default_cloud_init
56-
cni_type = var.cni_type
57-
image_id = var.worker_image_id
58-
image_ids = local.image_ids
59-
image_os = var.worker_image_os
60-
image_os_version = var.worker_image_os_version
61-
image_type = var.worker_image_type
62-
indexed_images = local.indexed_images
63-
kubeproxy_mode = var.kubeproxy_mode
64-
max_pods_per_node = var.max_pods_per_node
65-
node_labels = alltrue([var.cluster_type == "basic", var.cilium_install == true]) ? merge(var.worker_node_labels, { "oci.oraclecloud.com/custom-k8s-networking" = true }) : var.worker_node_labels
66-
node_metadata = var.worker_node_metadata
67-
agent_config = var.agent_config
68-
platform_config = var.platform_config
69-
pod_nsg_ids = concat(var.pod_nsg_ids, var.cni_type == "npn" ? [try(module.network.pod_nsg_id, null)] : [])
70-
pod_subnet_id = try(module.network.pod_subnet_id, "") # safe destroy; validated in submodule
71-
pv_transit_encryption = var.worker_pv_transit_encryption
72-
shape = var.worker_shape
73-
ssh_public_key = local.ssh_public_key
74-
timezone = var.timezone
75-
volume_kms_key_id = var.worker_volume_kms_key_id
76-
worker_nsg_ids = concat(var.worker_nsg_ids, [try(module.network.worker_nsg_id, null)])
77-
worker_subnet_id = try(module.network.worker_subnet_id, "") # safe destroy; validated in submodule
78-
preemptible_config = var.worker_preemptible_config
50+
assign_dns = var.assign_dns
51+
assign_public_ip = var.worker_is_public
52+
block_volume_type = var.worker_block_volume_type
53+
capacity_reservation_id = var.worker_capacity_reservation_id
54+
cloud_init = var.worker_cloud_init
55+
disable_default_cloud_init = var.worker_disable_default_cloud_init
56+
cni_type = var.cni_type
57+
image_id = var.worker_image_id
58+
image_ids = local.image_ids
59+
image_os = var.worker_image_os
60+
image_os_version = var.worker_image_os_version
61+
image_type = var.worker_image_type
62+
indexed_images = local.indexed_images
63+
kubeproxy_mode = var.kubeproxy_mode
64+
legacy_imds_endpoints_disabled = var.worker_legacy_imds_endpoints_disabled
65+
max_pods_per_node = var.max_pods_per_node
66+
node_labels = alltrue([var.cluster_type == "basic", var.cilium_install == true]) ? merge(var.worker_node_labels, { "oci.oraclecloud.com/custom-k8s-networking" = true }) : var.worker_node_labels
67+
node_metadata = var.worker_node_metadata
68+
agent_config = var.agent_config
69+
platform_config = var.platform_config
70+
pod_nsg_ids = concat(var.pod_nsg_ids, var.cni_type == "npn" ? [try(module.network.pod_nsg_id, null)] : [])
71+
pod_subnet_id = try(module.network.pod_subnet_id, "") # safe destroy; validated in submodule
72+
pv_transit_encryption = var.worker_pv_transit_encryption
73+
shape = var.worker_shape
74+
ssh_public_key = local.ssh_public_key
75+
timezone = var.timezone
76+
volume_kms_key_id = var.worker_volume_kms_key_id
77+
worker_nsg_ids = concat(var.worker_nsg_ids, [try(module.network.worker_nsg_id, null)])
78+
worker_subnet_id = try(module.network.worker_subnet_id, "") # safe destroy; validated in submodule
79+
preemptible_config = var.worker_preemptible_config
7980

8081
# Tagging
8182
tag_namespace = var.tag_namespace
@@ -106,4 +107,4 @@ output "worker_pool_ids" {
106107
output "worker_pool_ips" {
107108
description = "Created worker instance private IPs by pool for available modes ('node-pool', 'instance')."
108109
value = local.worker_count_expected > 0 ? try(one(module.workers[*].worker_pool_ips), null) : null
109-
}
110+
}

modules/workers/computecluster.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ resource "oci_core_compute_cluster" "workers" {
4646
resource "oci_core_instance" "compute_cluster_workers" {
4747
for_each = local.compute_cluster_instance_map
4848

49-
availability_domain = (lookup(oci_core_compute_cluster.shared, lookup(each.value, "compute_cluster", ""), null) != null ?
49+
availability_domain = (lookup(oci_core_compute_cluster.shared, lookup(each.value, "compute_cluster", ""), null) != null ?
5050
oci_core_compute_cluster.shared[lookup(each.value, "compute_cluster", "")].availability_domain :
5151
lookup(each.value, "placement_ad", null) != null ? lookup(var.ad_numbers_to_names, lookup(each.value, "placement_ad")) : element(each.value.availability_domains, 0)
5252
)
@@ -120,7 +120,7 @@ resource "oci_core_instance" "compute_cluster_workers" {
120120
}
121121

122122
instance_options {
123-
are_legacy_imds_endpoints_disabled = false
123+
are_legacy_imds_endpoints_disabled = each.value.legacy_imds_endpoints_disabled
124124
}
125125

126126
metadata = merge(

modules/workers/instance.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ resource "oci_core_instance" "workers" {
6969
}
7070

7171
instance_options {
72-
are_legacy_imds_endpoints_disabled = false
72+
are_legacy_imds_endpoints_disabled = each.value.legacy_imds_endpoints_disabled
7373
}
7474

7575
metadata = merge(

modules/workers/instanceconfig.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ resource "oci_core_instance_configuration" "workers" {
3838
capacity_reservation_id = each.value.capacity_reservation_id
3939

4040
instance_options {
41-
are_legacy_imds_endpoints_disabled = false
41+
are_legacy_imds_endpoints_disabled = each.value.legacy_imds_endpoints_disabled
4242
}
4343

4444
create_vnic_details {

modules/workers/locals.tf

Lines changed: 50 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -21,48 +21,49 @@ locals {
2121
is_monitoring_disabled = false
2222
plugins_config = {}
2323
}
24-
allow_autoscaler = false
25-
assign_public_ip = var.assign_public_ip
26-
autoscale = false
27-
block_volume_type = var.block_volume_type
28-
boot_volume_size = local.boot_volume_size
29-
boot_volume_vpus_per_gb = local.boot_volume_vpus_per_gb
30-
capacity_reservation_id = var.capacity_reservation_id
31-
cloud_init = [] # empty pool-specific default
32-
compartment_id = var.compartment_id
33-
create = true
34-
disable_default_cloud_init = var.disable_default_cloud_init
35-
drain = false
36-
eviction_grace_duration = 300
37-
force_node_delete = true
38-
extended_metadata = {} # empty pool-specific default
39-
ignore_initial_pool_size = false
40-
image_id = var.image_id
41-
image_type = var.image_type
42-
kubernetes_version = var.kubernetes_version
43-
max_pods_per_node = min(max(var.max_pods_per_node, 1), 110)
44-
memory = local.memory
45-
mode = var.worker_pool_mode
46-
node_cycling_enabled = false
47-
node_cycling_max_surge = 1
48-
node_cycling_max_unavailable = 0
49-
node_cycling_mode = ["instance"]
50-
node_labels = var.node_labels
51-
nsg_ids = [] # empty pool-specific default
52-
ocpus = local.ocpus
53-
os = var.image_os
54-
os_version = var.image_os_version
55-
placement_ads = var.ad_numbers
56-
platform_config = var.platform_config
57-
pod_nsg_ids = var.pod_nsg_ids
58-
pod_subnet_id = coalesce(var.pod_subnet_id, var.worker_subnet_id, "none")
59-
preemptible_config = var.preemptible_config
60-
pv_transit_encryption = var.pv_transit_encryption
61-
shape = local.shape
62-
size = var.worker_pool_size
63-
subnet_id = var.worker_subnet_id
64-
taints = [] # empty pool-specific default
65-
volume_kms_key_id = var.volume_kms_key_id
24+
allow_autoscaler = false
25+
legacy_imds_endpoints_disabled = var.legacy_imds_endpoints_disabled
26+
assign_public_ip = var.assign_public_ip
27+
autoscale = false
28+
block_volume_type = var.block_volume_type
29+
boot_volume_size = local.boot_volume_size
30+
boot_volume_vpus_per_gb = local.boot_volume_vpus_per_gb
31+
capacity_reservation_id = var.capacity_reservation_id
32+
cloud_init = [] # empty pool-specific default
33+
compartment_id = var.compartment_id
34+
create = true
35+
disable_default_cloud_init = var.disable_default_cloud_init
36+
drain = false
37+
eviction_grace_duration = 300
38+
force_node_delete = true
39+
extended_metadata = {} # empty pool-specific default
40+
ignore_initial_pool_size = false
41+
image_id = var.image_id
42+
image_type = var.image_type
43+
kubernetes_version = var.kubernetes_version
44+
max_pods_per_node = min(max(var.max_pods_per_node, 1), 110)
45+
memory = local.memory
46+
mode = var.worker_pool_mode
47+
node_cycling_enabled = false
48+
node_cycling_max_surge = 1
49+
node_cycling_max_unavailable = 0
50+
node_cycling_mode = ["instance"]
51+
node_labels = var.node_labels
52+
nsg_ids = [] # empty pool-specific default
53+
ocpus = local.ocpus
54+
os = var.image_os
55+
os_version = var.image_os_version
56+
placement_ads = var.ad_numbers
57+
platform_config = var.platform_config
58+
pod_nsg_ids = var.pod_nsg_ids
59+
pod_subnet_id = coalesce(var.pod_subnet_id, var.worker_subnet_id, "none")
60+
preemptible_config = var.preemptible_config
61+
pv_transit_encryption = var.pv_transit_encryption
62+
shape = local.shape
63+
size = var.worker_pool_size
64+
subnet_id = var.worker_subnet_id
65+
taints = [] # empty pool-specific default
66+
volume_kms_key_id = var.volume_kms_key_id
6667
}
6768

6869
# Merge desired pool configuration onto default values
@@ -172,11 +173,11 @@ locals {
172173
)
173174

174175
# Override Node-cycling mode
175-
node_cycling_mode = pool.node_cycling_mode != null ? [ for entry in pool.node_cycling_mode: lookup(local.supported_node_cycling_mode, lower(entry)) ] : null
176-
176+
node_cycling_mode = pool.node_cycling_mode != null ? [for entry in pool.node_cycling_mode : lookup(local.supported_node_cycling_mode, lower(entry))] : null
177+
177178
}) if tobool(pool.create)
178179
}
179-
180+
180181
supported_node_cycling_mode = {
181182
instance = "INSTANCE_REPLACE"
182183
boot_volume = "BOOT_VOLUME_REPLACE"
@@ -290,12 +291,12 @@ locals {
290291

291292
# Yields {<pool name> = {<instance id> = <instance ip>}} for modes: 'node-pool', 'instance'
292293
worker_pool_ips = merge(local.worker_instance_ips, local.worker_nodepool_ips)
293-
294+
294295
# Map of nodepools using Ubuntu images.
295296

296297
ubuntu_supported_versions = {
297-
"22.04" = "jammy"
298-
"24.04" = "noble"
298+
"22.04" = "jammy"
299+
"24.04" = "noble"
299300
"22.04 Minimal" = "jammy"
300301
"24.04 Minimal" = "nobble"
301302
}
@@ -307,6 +308,6 @@ locals {
307308
ubuntu_release = lookup(data.oci_core_image.workers[k], "operating_system_version", null) != null ? lookup(data.oci_core_image.workers[k], "operating_system_version") : lookup(v, "os_version", null)
308309
}
309310
if lookup(v, "mode", var.worker_pool_mode) != "virtual-node-pool" &&
310-
contains(coalescelist(split(" ", lookup(data.oci_core_image.workers[k], "operating_system", "")), [lookup(v, "os", "")]), "Ubuntu")
311+
contains(coalescelist(split(" ", lookup(data.oci_core_image.workers[k], "operating_system", "")), [lookup(v, "os", "")]), "Ubuntu")
311312
}
312313
}

modules/workers/variables.tf

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,12 @@ variable "max_pods_per_node" {
291291
}
292292
}
293293

294+
variable "legacy_imds_endpoints_disabled" {
295+
default = false
296+
description = "Whether to disable requests to the IMDSv1 endpoint and only allow requests to the IMDSv2 endpoint. See <a href=https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contengconfiguringimds.htm>Instance Metadata</a> for more information."
297+
type = bool
298+
}
299+
294300
variable "platform_config" {
295301
default = null
296302
description = "Default platform_config for self-managed worker pools created with mode: 'instance', 'instance-pool', or 'cluster-network'. See <a href=https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/datatypes/PlatformConfig>PlatformConfig</a> for more information."
@@ -327,4 +333,4 @@ variable "compute_clusters" {
327333
default = {}
328334
description = "Whether to create compute clusters shared by nodes across multiple worker pools enabled for 'compute-cluster'."
329335
type = map(any)
330-
}
336+
}

variables-workers.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ variable "worker_pv_transit_encryption" {
206206
type = bool
207207
}
208208

209+
variable "worker_legacy_imds_endpoints_disabled" {
210+
default = false
211+
description = "Whether to disable requests to the IMDSv1 endpoint and only allow requests to the IMDSv2 endpoint. See <a href=https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contengconfiguringimds.htm>Instance Metadata</a> for more information."
212+
type = bool
213+
}
214+
209215
variable "max_pods_per_node" {
210216
default = 31
211217
description = "The default maximum number of pods to deploy per node when unspecified on a pool. Absolute maximum is 110. Ignored when when cni_type != 'npn'."

0 commit comments

Comments
 (0)