@@ -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