@@ -262,7 +262,7 @@ func (t *defaultModelBuildTask) buildPreserveClientIPFlag(_ context.Context, tar
262
262
263
263
// buildTargetGroupPort constructs the TargetGroup's port.
264
264
// Note: TargetGroup's port is not in the data path as we always register targets with port specified.
265
- // so this settings don't really matter to our controller, and we do our best to use the most appropriate port as targetGroup's port to avoid UX confusing .
265
+ // so this setting don't really matter to our controller, and we do our best to use the most appropriate port as targetGroup's port to avoid UX confusion .
266
266
func (t * defaultModelBuildTask ) buildTargetGroupPort (_ context.Context , targetType elbv2model.TargetType , svcPort corev1.ServicePort ) int64 {
267
267
if targetType == elbv2model .TargetTypeInstance {
268
268
return int64 (svcPort .NodePort )
@@ -408,15 +408,11 @@ func (t *defaultModelBuildTask) buildTargetGroupBindingSpec(ctx context.Context,
408
408
if targetType == elbv2api .TargetTypeInstance {
409
409
targetPort = intstr .FromInt (int (port .NodePort ))
410
410
}
411
- defaultSourceRanges , err := t .getDefaultIPSourceRanges (ctx , * targetGroup .Spec .IPAddressType , port .Protocol , scheme )
412
- if err != nil {
413
- return elbv2model.TargetGroupBindingResourceSpec {}, err
414
- }
415
411
var tgbNetworking * elbv2model.TargetGroupBindingNetworking
416
412
if len (t .loadBalancer .Spec .SecurityGroups ) == 0 {
417
- tgbNetworking , err = t .buildTargetGroupBindingNetworkingLegacy (ctx , targetPort , * hc .Port , port , defaultSourceRanges , * targetGroup .Spec .IPAddressType )
413
+ tgbNetworking , err = t .buildTargetGroupBindingNetworkingLegacy (ctx , targetPort , * hc .Port , port , scheme , * targetGroup .Spec .IPAddressType )
418
414
} else {
419
- tgbNetworking , err = t .buildTargetGroupBindingNetworking (ctx , port . Protocol , targetGroup . Spec . Port , * targetGroup . Spec . HealthCheckConfig . Port )
415
+ tgbNetworking , err = t .buildTargetGroupBindingNetworking (ctx , targetPort , * hc . Port , port )
420
416
}
421
417
if err != nil {
422
418
return elbv2model.TargetGroupBindingResourceSpec {}, err
@@ -442,60 +438,52 @@ func (t *defaultModelBuildTask) buildTargetGroupBindingSpec(ctx context.Context,
442
438
}, nil
443
439
}
444
440
445
- func (t * defaultModelBuildTask ) buildTargetGroupBindingNetworking (_ context.Context , tgProtocol corev1.Protocol , tgPort int64 , healthCheckPort intstr.IntOrString ) (* elbv2model.TargetGroupBindingNetworking , error ) {
441
+ func (t * defaultModelBuildTask ) buildTargetGroupBindingNetworking (_ context.Context , tgPort intstr.IntOrString ,
442
+ hcPort intstr.IntOrString , port corev1.ServicePort ) (* elbv2model.TargetGroupBindingNetworking , error ) {
446
443
if t .backendSGIDToken == nil {
447
444
return nil , nil
448
445
}
449
446
protocolTCP := elbv2api .NetworkingProtocolTCP
450
447
protocolUDP := elbv2api .NetworkingProtocolUDP
451
448
449
+ var ports []elbv2api.NetworkingPort
452
450
if t .disableRestrictedSGRules {
453
- ports := []elbv2api.NetworkingPort {
454
- {
455
- Protocol : & protocolTCP ,
451
+ ports = append (ports , elbv2api.NetworkingPort {
452
+ Protocol : & protocolTCP ,
453
+ Port : nil ,
454
+ })
455
+ if port .Protocol == corev1 .ProtocolUDP {
456
+ ports = append (ports , elbv2api.NetworkingPort {
457
+ Protocol : & protocolUDP ,
456
458
Port : nil ,
457
- },
459
+ })
458
460
}
459
- if tgProtocol == corev1 .ProtocolUDP {
461
+ } else {
462
+ switch port .Protocol {
463
+ case corev1 .ProtocolTCP :
464
+ ports = append (ports , elbv2api.NetworkingPort {
465
+ Protocol : & protocolTCP ,
466
+ Port : & tgPort ,
467
+ })
468
+ case corev1 .ProtocolUDP :
460
469
ports = append (ports , elbv2api.NetworkingPort {
461
470
Protocol : & protocolUDP ,
462
- Port : nil ,
471
+ Port : & tgPort ,
463
472
})
473
+ if hcPort .String () == healthCheckPortTrafficPort || (hcPort .Type == intstr .Int && hcPort .IntValue () == tgPort .IntValue ()) {
474
+ ports = append (ports , elbv2api.NetworkingPort {
475
+ Protocol : & protocolTCP ,
476
+ Port : & tgPort ,
477
+ })
478
+ }
464
479
}
465
- return & elbv2model.TargetGroupBindingNetworking {
466
- Ingress : []elbv2model.NetworkingIngressRule {
467
- {
468
- From : []elbv2model.NetworkingPeer {
469
- {
470
- SecurityGroup : & elbv2model.SecurityGroup {
471
- GroupID : t .backendSGIDToken ,
472
- },
473
- },
474
- },
475
- Ports : ports ,
476
- },
477
- },
478
- }, nil
479
- }
480
480
481
- targetGroupPort := intstr .FromInt (int (tgPort ))
482
- ports := []elbv2api.NetworkingPort {
483
- {
484
- Protocol : & protocolTCP ,
485
- Port : & targetGroupPort ,
486
- },
487
- }
488
- if tgProtocol == corev1 .ProtocolUDP {
489
- ports = append (ports , elbv2api.NetworkingPort {
490
- Protocol : & protocolUDP ,
491
- Port : & targetGroupPort ,
492
- })
493
- }
494
- if healthCheckPort .String () != healthCheckPortTrafficPort && (healthCheckPort .Type == intstr .Int && healthCheckPort .IntVal != int32 (tgPort )) {
495
- ports = append (ports , elbv2api.NetworkingPort {
496
- Protocol : & protocolTCP ,
497
- Port : & healthCheckPort ,
498
- })
481
+ if hcPort .String () != healthCheckPortTrafficPort && (hcPort .Type == intstr .Int && hcPort .IntValue () != tgPort .IntValue ()) {
482
+ ports = append (ports , elbv2api.NetworkingPort {
483
+ Protocol : & protocolTCP ,
484
+ Port : & hcPort ,
485
+ })
486
+ }
499
487
}
500
488
return & elbv2model.TargetGroupBindingNetworking {
501
489
Ingress : []elbv2model.NetworkingIngressRule {
@@ -513,32 +501,31 @@ func (t *defaultModelBuildTask) buildTargetGroupBindingNetworking(_ context.Cont
513
501
}, nil
514
502
}
515
503
516
- func (t * defaultModelBuildTask ) buildPeersFromSourceRangesConfiguration (_ context.Context , defaultSourceRanges [] string ) ([]elbv2model. NetworkingPeer , bool ) {
504
+ func (t * defaultModelBuildTask ) getLoadBalancerSourceRanges (_ context.Context ) [] string {
517
505
var sourceRanges []string
518
- var peers []elbv2model.NetworkingPeer
519
- customSourceRangesConfigured := true
520
506
for _ , cidr := range t .service .Spec .LoadBalancerSourceRanges {
521
507
sourceRanges = append (sourceRanges , cidr )
522
508
}
523
509
if len (sourceRanges ) == 0 {
524
510
t .annotationParser .ParseStringSliceAnnotation (annotations .SvcLBSuffixSourceRanges , & sourceRanges , t .service .Annotations )
525
511
}
526
- if len (sourceRanges ) == 0 {
527
- sourceRanges = defaultSourceRanges
528
- customSourceRangesConfigured = false
529
- }
512
+ return sourceRanges
513
+ }
514
+
515
+ func (t * defaultModelBuildTask ) buildPeersFromSourceRangeCIDRs (_ context.Context , sourceRanges []string ) []elbv2model.NetworkingPeer {
516
+ var peers []elbv2model.NetworkingPeer
530
517
for _ , cidr := range sourceRanges {
531
518
peers = append (peers , elbv2model.NetworkingPeer {
532
519
IPBlock : & elbv2api.IPBlock {
533
520
CIDR : cidr ,
534
521
},
535
522
})
536
523
}
537
- return peers , customSourceRangesConfigured
524
+ return peers
538
525
}
539
526
540
527
func (t * defaultModelBuildTask ) buildTargetGroupBindingNetworkingLegacy (ctx context.Context , tgPort intstr.IntOrString ,
541
- hcPort intstr.IntOrString , port corev1.ServicePort , defaultSourceRanges [] string , targetGroupIPAddressType elbv2model.TargetGroupIPAddressType ) (* elbv2model.TargetGroupBindingNetworking , error ) {
528
+ hcPort intstr.IntOrString , port corev1.ServicePort , scheme elbv2model. LoadBalancerScheme , targetGroupIPAddressType elbv2model.TargetGroupIPAddressType ) (* elbv2model.TargetGroupBindingNetworking , error ) {
542
529
manageBackendSGRules , err := t .buildManageSecurityGroupRulesFlagLegacy (ctx )
543
530
if err != nil {
544
531
return nil , err
@@ -547,20 +534,28 @@ func (t *defaultModelBuildTask) buildTargetGroupBindingNetworkingLegacy(ctx cont
547
534
return nil , nil
548
535
}
549
536
tgProtocol := port .Protocol
550
- loadBalancerSubnetsSourceRanges := t .getLoadBalancerSubnetsSourceRanges (targetGroupIPAddressType )
551
537
networkingProtocol := elbv2api .NetworkingProtocolTCP
538
+ healthCheckProtocol := elbv2api .NetworkingProtocolTCP
552
539
if tgProtocol == corev1 .ProtocolUDP {
553
540
networkingProtocol = elbv2api .NetworkingProtocolUDP
554
541
}
555
- trafficSource := loadBalancerSubnetsSourceRanges
556
- customSourceRangesConfigured := false
542
+ loadBalancerSubnetCIDRs := t .getLoadBalancerSubnetsSourceRanges (targetGroupIPAddressType )
543
+ trafficSource := loadBalancerSubnetCIDRs
544
+ defaultRangeUsed := false
557
545
if networkingProtocol == elbv2api .NetworkingProtocolUDP || t .preserveClientIP {
558
- trafficSource , customSourceRangesConfigured = t .buildPeersFromSourceRangesConfiguration (ctx , defaultSourceRanges )
546
+ trafficSource = t .getLoadBalancerSourceRanges (ctx )
547
+ if len (trafficSource ) == 0 {
548
+ trafficSource , err = t .getDefaultIPSourceRanges (ctx , targetGroupIPAddressType , port .Protocol , scheme )
549
+ if err != nil {
550
+ return nil , err
551
+ }
552
+ defaultRangeUsed = true
553
+ }
559
554
}
560
555
tgbNetworking := & elbv2model.TargetGroupBindingNetworking {
561
556
Ingress : []elbv2model.NetworkingIngressRule {
562
557
{
563
- From : trafficSource ,
558
+ From : t . buildPeersFromSourceRangeCIDRs ( ctx , trafficSource ) ,
564
559
Ports : []elbv2api.NetworkingPort {
565
560
{
566
561
Port : & tgPort ,
@@ -570,9 +565,21 @@ func (t *defaultModelBuildTask) buildTargetGroupBindingNetworkingLegacy(ctx cont
570
565
},
571
566
},
572
567
}
573
- if hcIngressRules := t .buildHealthCheckNetworkingIngressRules (trafficSource , loadBalancerSubnetsSourceRanges , tgPort , hcPort , tgProtocol ,
574
- customSourceRangesConfigured ); len (hcIngressRules ) > 0 {
575
- tgbNetworking .Ingress = append (tgbNetworking .Ingress , hcIngressRules ... )
568
+ if healthCheckSourceCIDRs := t .buildHealthCheckSourceCIDRs (trafficSource , loadBalancerSubnetCIDRs , tgPort , hcPort ,
569
+ tgProtocol , defaultRangeUsed ); len (healthCheckSourceCIDRs ) > 0 {
570
+ networkingHealthCheckPort := hcPort
571
+ if hcPort .String () == healthCheckPortTrafficPort {
572
+ networkingHealthCheckPort = tgPort
573
+ }
574
+ tgbNetworking .Ingress = append (tgbNetworking .Ingress , elbv2model.NetworkingIngressRule {
575
+ From : t .buildPeersFromSourceRangeCIDRs (ctx , healthCheckSourceCIDRs ),
576
+ Ports : []elbv2api.NetworkingPort {
577
+ {
578
+ Port : & networkingHealthCheckPort ,
579
+ Protocol : & healthCheckProtocol ,
580
+ },
581
+ },
582
+ })
576
583
}
577
584
return tgbNetworking , nil
578
585
}
@@ -597,28 +604,18 @@ func (t *defaultModelBuildTask) getDefaultIPSourceRanges(ctx context.Context, ta
597
604
return defaultSourceRanges , nil
598
605
}
599
606
600
- func (t * defaultModelBuildTask ) getLoadBalancerSubnetsSourceRanges (targetGroupIPAddressType elbv2model.TargetGroupIPAddressType ) []elbv2model. NetworkingPeer {
601
- var subnetCIDRRanges []elbv2model. NetworkingPeer
607
+ func (t * defaultModelBuildTask ) getLoadBalancerSubnetsSourceRanges (targetGroupIPAddressType elbv2model.TargetGroupIPAddressType ) []string {
608
+ var subnetCIDRs []string
602
609
for _ , subnet := range t .ec2Subnets {
603
610
if targetGroupIPAddressType == elbv2model .TargetGroupIPAddressTypeIPv4 {
604
- subnetCIDRRanges = append (subnetCIDRRanges , elbv2model.NetworkingPeer {
605
- IPBlock : & elbv2api.IPBlock {
606
- CIDR : aws .StringValue (subnet .CidrBlock ),
607
- },
608
- })
611
+ subnetCIDRs = append (subnetCIDRs , aws .StringValue (subnet .CidrBlock ))
609
612
} else {
610
613
for _ , ipv6CIDRBlockAssoc := range subnet .Ipv6CidrBlockAssociationSet {
611
- subnetCIDRRanges = append (subnetCIDRRanges , elbv2model.NetworkingPeer {
612
- IPBlock : & elbv2api.IPBlock {
613
- CIDR : aws .StringValue (ipv6CIDRBlockAssoc .Ipv6CidrBlock ),
614
- },
615
- })
616
-
614
+ subnetCIDRs = append (subnetCIDRs , aws .StringValue (ipv6CIDRBlockAssoc .Ipv6CidrBlock ))
617
615
}
618
616
}
619
617
}
620
-
621
- return subnetCIDRRanges
618
+ return subnetCIDRs
622
619
}
623
620
624
621
func (t * defaultModelBuildTask ) buildTargetGroupIPAddressType (_ context.Context , svc * corev1.Service ) (elbv2model.TargetGroupIPAddressType , error ) {
@@ -654,36 +651,23 @@ func (t *defaultModelBuildTask) buildTargetGroupBindingNodeSelector(_ context.Co
654
651
}, nil
655
652
}
656
653
657
- func (t * defaultModelBuildTask ) buildHealthCheckNetworkingIngressRules (trafficSource , hcSource []elbv2model. NetworkingPeer , tgPort , hcPort intstr.IntOrString ,
658
- tgProtocol corev1.Protocol , customSourceRanges bool ) []elbv2model. NetworkingIngressRule {
654
+ func (t * defaultModelBuildTask ) buildHealthCheckSourceCIDRs (trafficSource , subnetCIDRs []string , tgPort , hcPort intstr.IntOrString ,
655
+ tgProtocol corev1.Protocol , defaultRangeUsed bool ) []string {
659
656
if tgProtocol != corev1 .ProtocolUDP &&
660
657
(hcPort .String () == healthCheckPortTrafficPort || hcPort .IntValue () == tgPort .IntValue ()) {
661
658
if ! t .preserveClientIP {
662
- return []elbv2model. NetworkingIngressRule {}
659
+ return nil
663
660
}
664
- if ! customSourceRanges {
665
- return []elbv2model. NetworkingIngressRule {}
661
+ if defaultRangeUsed {
662
+ return nil
666
663
}
667
664
for _ , src := range trafficSource {
668
- if src . IPBlock . CIDR == "0.0.0.0/0" || src . IPBlock . CIDR == "::/0" {
669
- return []elbv2model. NetworkingIngressRule {}
665
+ if src == "0.0.0.0/0" || src == "::/0" {
666
+ return nil
670
667
}
671
668
}
672
669
}
673
- var healthCheckPorts []elbv2api.NetworkingPort
674
- networkingProtocolTCP := elbv2api .NetworkingProtocolTCP
675
- networkingHealthCheckPort := hcPort
676
- if hcPort .String () == healthCheckPortTrafficPort {
677
- networkingHealthCheckPort = tgPort
678
- }
679
- healthCheckPorts = append (healthCheckPorts , elbv2api.NetworkingPort {
680
- Port : & networkingHealthCheckPort ,
681
- Protocol : & networkingProtocolTCP ,
682
- })
683
- return []elbv2model.NetworkingIngressRule {{
684
- From : hcSource ,
685
- Ports : healthCheckPorts ,
686
- }}
670
+ return subnetCIDRs
687
671
}
688
672
689
673
func (t * defaultModelBuildTask ) buildManageSecurityGroupRulesFlagLegacy (_ context.Context ) (bool , error ) {
0 commit comments