Skip to content

Commit 087df1f

Browse files
authored
Fix race condition causes webhook failure when deploying Kyverno and NGINX charts (#338)
1 parent 8514f4b commit 087df1f

1 file changed

Lines changed: 34 additions & 5 deletions

File tree

modules/compute/eks/stack.py

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,13 +229,16 @@ def __init__(
229229
self._install_nvidia_device_plugin(eks_cluster, eks_version, replicated_ecr_images_metadata)
230230

231231
# AWS Load Balancer Controller
232+
awslbcontroller_chart = None
232233
if eks_addons_config.get("deploy_aws_lb_controller"):
233234
awslbcontroller_chart = self._create_aws_lb_controller(
234235
eks_cluster, eks_version, vpc_id, replicated_ecr_images_metadata, eks_addons_config
235236
)
236237

237238
if eks_addons_config.get("deploy_nginx_controller"):
238-
self._create_nginx_controller(eks_cluster, eks_version, replicated_ecr_images_metadata, eks_addons_config)
239+
self._create_nginx_controller(
240+
eks_cluster, eks_version, replicated_ecr_images_metadata, eks_addons_config, awslbcontroller_chart
241+
)
239242

240243
# AWS S3 CSI Driver
241244
if eks_addons_config.get("deploy_aws_s3_csi"):
@@ -341,7 +344,12 @@ def __init__(
341344
# Kyverno policies
342345
if eks_addons_config.get("deploy_kyverno"):
343346
self._deploy_kyverno(
344-
eks_cluster, project_dir, eks_version, replicated_ecr_images_metadata, eks_addons_config
347+
eks_cluster,
348+
project_dir,
349+
eks_version,
350+
replicated_ecr_images_metadata,
351+
eks_addons_config,
352+
awslbcontroller_chart,
345353
)
346354

347355
# Configure EKS/K8s RBAC with ready to assume roles based on org reqs
@@ -451,7 +459,8 @@ def _create_managed_node_group(self, eks_cluster, eks_version, ng_config, node_c
451459
),
452460
)
453461

454-
eks_node_ami_type = getattr(eks.NodegroupAmiType, ng_config.get("eks_node_ami_type", "").upper())
462+
ami_type_str = ng_config.get("eks_node_ami_type", "")
463+
eks_node_ami_type = getattr(eks.NodegroupAmiType, ami_type_str.upper(), None) if ami_type_str else None
455464
if not eks_node_ami_type:
456465
# Backward compatiblity - use AL2
457466
# WARNING: For Kubernetes versions 1.33 and later, EKS will not provide
@@ -835,6 +844,7 @@ def _create_aws_lb_controller(
835844
repository=get_chart_repo(str(eks_version), ALB_CONTROLLER, replicated_ecr_images_metadata),
836845
release="awslbcontroller",
837846
namespace="kube-system",
847+
wait=True, # Wait for ALB Controller pods to be ready (webhook must be available)
838848
values=deep_merge(
839849
{
840850
"clusterName": eks_cluster.cluster_name,
@@ -854,7 +864,9 @@ def _create_aws_lb_controller(
854864
awslbcontroller_chart.node.add_dependency(awslbcontroller_service_account)
855865
return awslbcontroller_chart
856866

857-
def _create_nginx_controller(self, eks_cluster, eks_version, replicated_ecr_images_metadata, eks_addons_config):
867+
def _create_nginx_controller(
868+
self, eks_cluster, eks_version, replicated_ecr_images_metadata, eks_addons_config, awslbcontroller_chart=None
869+
):
858870
"""
859871
Creates the NGINX Ingress Controller.
860872
"""
@@ -903,6 +915,9 @@ def _create_nginx_controller(self, eks_cluster, eks_version, replicated_ecr_imag
903915
),
904916
)
905917
nginx_controller_chart.node.add_dependency(nginx_controller_service_account)
918+
# Ensure ALB Controller webhook is ready before installing NGINX (creates Service resources)
919+
if awslbcontroller_chart:
920+
nginx_controller_chart.node.add_dependency(awslbcontroller_chart)
906921

907922
def _create_s3_csi_addon(self, eks_cluster, project_name, mountpoint_buckets):
908923
"""
@@ -1324,7 +1339,15 @@ def _deploy_calico(self, eks_cluster, project_dir, eks_version, replicated_ecr_i
13241339

13251340
default_deny_policy.node.add_dependency(allow_tigera_operator_policy)
13261341

1327-
def _deploy_kyverno(self, eks_cluster, project_dir, eks_version, replicated_ecr_images_metadata, eks_addons_config):
1342+
def _deploy_kyverno(
1343+
self,
1344+
eks_cluster,
1345+
project_dir,
1346+
eks_version,
1347+
replicated_ecr_images_metadata,
1348+
eks_addons_config,
1349+
awslbcontroller_chart=None,
1350+
):
13281351
"""
13291352
Deploys the Kyverno policy engine plugin for the EKS cluster.
13301353
"""
@@ -1347,6 +1370,9 @@ def _deploy_kyverno(self, eks_cluster, project_dir, eks_version, replicated_ecr_
13471370
release="kyverno",
13481371
namespace="kyverno",
13491372
)
1373+
# Ensure ALB Controller webhook is ready before installing Kyverno (creates Service resources)
1374+
if awslbcontroller_chart:
1375+
kyverno_chart.node.add_dependency(awslbcontroller_chart)
13501376

13511377
if eks_addons_config.get("deploy_calico"):
13521378
with open(os.path.join(project_dir, "network-policies/default-allow-kyverno.json"), "r") as f:
@@ -1400,6 +1426,9 @@ def _deploy_kyverno(self, eks_cluster, project_dir, eks_version, replicated_ecr_
14001426
)
14011427

14021428
kyverno_policy_reporter_chart.node.add_dependency(kyverno_chart)
1429+
# Ensure ALB Controller webhook is ready before installing policy reporter (creates Service resources)
1430+
if awslbcontroller_chart:
1431+
kyverno_policy_reporter_chart.node.add_dependency(awslbcontroller_chart)
14031432

14041433
def _deploy_metrics_server(self, eks_cluster, eks_version, replicated_ecr_images_metadata, eks_addons_config):
14051434
"""

0 commit comments

Comments
 (0)