@@ -89,6 +89,7 @@ func newListenerConfiguratorFactory(
89
89
protectedPorts ProtectedPorts ,
90
90
) * listenerConfiguratorFactory {
91
91
sharedPortConflictResolver := createPortConflictResolver ()
92
+ sharedOverlappingTLSConfigResolver := createOverlappingTLSConfigResolver ()
92
93
93
94
return & listenerConfiguratorFactory {
94
95
unsupportedProtocol : & listenerConfigurator {
@@ -123,6 +124,7 @@ func newListenerConfiguratorFactory(
123
124
},
124
125
conflictResolvers : []listenerConflictResolver {
125
126
sharedPortConflictResolver ,
127
+ sharedOverlappingTLSConfigResolver ,
126
128
},
127
129
externalReferenceResolvers : []listenerExternalReferenceResolver {
128
130
createExternalReferencesForTLSSecretsResolver (gw .Namespace , secretResolver , refGrantResolver ),
@@ -137,6 +139,7 @@ func newListenerConfiguratorFactory(
137
139
},
138
140
conflictResolvers : []listenerConflictResolver {
139
141
sharedPortConflictResolver ,
142
+ sharedOverlappingTLSConfigResolver ,
140
143
},
141
144
externalReferenceResolvers : []listenerExternalReferenceResolver {},
142
145
},
@@ -591,3 +594,38 @@ func haveOverlap(hostname1, hostname2 *v1.Hostname) bool {
591
594
}
592
595
return matchesWildcard (h1 , h2 )
593
596
}
597
+
598
+ func createOverlappingTLSConfigResolver () listenerConflictResolver {
599
+ listenersByPort := make (map [v1.PortNumber ][]* Listener )
600
+
601
+ return func (l * Listener ) {
602
+ port := l .Source .Port
603
+
604
+ // Only check TLS-enabled listeners (HTTPS/TLS)
605
+ if l .Source .Protocol != v1 .HTTPSProtocolType && l .Source .Protocol != v1 .TLSProtocolType {
606
+ return
607
+ }
608
+
609
+ // Check for overlaps with existing listeners on this port
610
+ for _ , existingListener := range listenersByPort [port ] {
611
+ // Only check against other TLS-enabled listeners
612
+ if existingListener .Source .Protocol != v1 .HTTPSProtocolType &&
613
+ existingListener .Source .Protocol != v1 .TLSProtocolType {
614
+ continue
615
+ }
616
+
617
+ // Check for hostname overlap
618
+ if haveOverlap (l .Source .Hostname , existingListener .Source .Hostname ) {
619
+ // Set condition on both listeners
620
+ cond := conditions .NewListenerOverlappingTLSConfig (
621
+ v1 .ListenerReasonOverlappingHostnames ,
622
+ conditions .ListenerMessageOverlappingHostnames ,
623
+ )
624
+ l .Conditions = append (l .Conditions , cond )
625
+ existingListener .Conditions = append (existingListener .Conditions , cond )
626
+ }
627
+ }
628
+
629
+ listenersByPort [port ] = append (listenersByPort [port ], l )
630
+ }
631
+ }
0 commit comments