@@ -103,6 +103,11 @@ type podEndpoint struct {
103
103
configs.MeshPodOwner
104
104
}
105
105
106
+ type specialSecrets struct {
107
+ defaultServerSecret string
108
+ wildcardTLSSecret string
109
+ }
110
+
106
111
// LoadBalancerController watches Kubernetes API and
107
112
// reconfigures NGINX via NginxController when needed
108
113
type LoadBalancerController struct {
@@ -131,7 +136,7 @@ type LoadBalancerController struct {
131
136
appProtectEnabled bool
132
137
appProtectDosEnabled bool
133
138
recorder record.EventRecorder
134
- defaultServerSecret string
139
+ specialSecrets specialSecrets
135
140
ingressClass string
136
141
statusUpdater * statusUpdater
137
142
leaderElector * leaderelection.LeaderElector
@@ -142,7 +147,6 @@ type LoadBalancerController struct {
142
147
namespaceList []string
143
148
secretNamespaceList []string
144
149
controllerNamespace string
145
- wildcardTLSSecret string
146
150
areCustomResourcesEnabled bool
147
151
enableOIDC bool
148
152
metricsCollector collectors.ControllerCollector
@@ -226,14 +230,18 @@ type NewLoadBalancerControllerInput struct {
226
230
227
231
// NewLoadBalancerController creates a controller
228
232
func NewLoadBalancerController (input NewLoadBalancerControllerInput ) * LoadBalancerController {
233
+ specialSecrets := specialSecrets {
234
+ defaultServerSecret : input .DefaultServerSecret ,
235
+ wildcardTLSSecret : input .WildcardTLSSecret ,
236
+ }
229
237
lbc := & LoadBalancerController {
230
238
client : input .KubeClient ,
231
239
confClient : input .ConfClient ,
232
240
dynClient : input .DynClient ,
233
241
restConfig : input .RestConfig ,
234
242
Logger : nl .LoggerFromContext (input .LoggerContext ),
235
243
configurator : input .NginxConfigurator ,
236
- defaultServerSecret : input . DefaultServerSecret ,
244
+ specialSecrets : specialSecrets ,
237
245
appProtectEnabled : input .AppProtectEnabled ,
238
246
appProtectDosEnabled : input .AppProtectDosEnabled ,
239
247
isNginxPlus : input .IsNginxPlus ,
@@ -245,7 +253,6 @@ func NewLoadBalancerController(input NewLoadBalancerControllerInput) *LoadBalanc
245
253
namespaceList : input .Namespace ,
246
254
secretNamespaceList : input .SecretNamespace ,
247
255
controllerNamespace : input .ControllerNamespace ,
248
- wildcardTLSSecret : input .WildcardTLSSecret ,
249
256
areCustomResourcesEnabled : input .AreCustomResourcesEnabled ,
250
257
enableOIDC : input .EnableOIDC ,
251
258
metricsCollector : input .MetricsCollector ,
@@ -1726,7 +1733,14 @@ func removeDuplicateResources(resources []Resource) []Resource {
1726
1733
}
1727
1734
1728
1735
func (lbc * LoadBalancerController ) isSpecialSecret (secretName string ) bool {
1729
- return secretName == lbc .defaultServerSecret || secretName == lbc .wildcardTLSSecret
1736
+ switch secretName {
1737
+ case lbc .specialSecrets .defaultServerSecret :
1738
+ return true
1739
+ case lbc .specialSecrets .wildcardTLSSecret :
1740
+ return true
1741
+ default :
1742
+ return false
1743
+ }
1730
1744
}
1731
1745
1732
1746
func (lbc * LoadBalancerController ) handleRegularSecretDeletion (resources []Resource ) {
@@ -1754,30 +1768,36 @@ func (lbc *LoadBalancerController) handleSecretUpdate(secret *api_v1.Secret, res
1754
1768
lbc .updateResourcesStatusAndEvents (resources , warnings , addOrUpdateErr )
1755
1769
}
1756
1770
1757
- func (lbc * LoadBalancerController ) handleSpecialSecretUpdate (secret * api_v1.Secret ) {
1758
- var specialSecretsToUpdate []string
1771
+ func (lbc * LoadBalancerController ) validationTLSSpecialSecret (secret * api_v1.Secret , secretName string , secretList * []string ) {
1759
1772
secretNsName := secret .Namespace + "/" + secret .Name
1773
+
1760
1774
err := secrets .ValidateTLSSecret (secret )
1761
1775
if err != nil {
1762
1776
nl .Errorf (lbc .Logger , "Couldn't validate the special Secret %v: %v" , secretNsName , err )
1763
1777
lbc .recorder .Eventf (secret , api_v1 .EventTypeWarning , "Rejected" , "the special Secret %v was rejected, using the previous version: %v" , secretNsName , err )
1764
1778
return
1765
1779
}
1780
+ * secretList = append (* secretList , secretName )
1781
+ }
1766
1782
1767
- if secretNsName == lbc .defaultServerSecret {
1768
- specialSecretsToUpdate = append (specialSecretsToUpdate , configs .DefaultServerSecretName )
1769
- }
1770
- if secretNsName == lbc .wildcardTLSSecret {
1771
- specialSecretsToUpdate = append (specialSecretsToUpdate , configs .WildcardSecretName )
1783
+ func (lbc * LoadBalancerController ) handleSpecialSecretUpdate (secret * api_v1.Secret ) {
1784
+ var specialTLSSecretsToUpdate []string
1785
+ secretNsName := secret .Namespace + "/" + secret .Name
1786
+ switch secretNsName {
1787
+ case lbc .specialSecrets .defaultServerSecret :
1788
+ lbc .validationTLSSpecialSecret (secret , configs .DefaultServerSecretName , & specialTLSSecretsToUpdate )
1789
+ case lbc .specialSecrets .wildcardTLSSecret :
1790
+ lbc .validationTLSSpecialSecret (secret , configs .WildcardSecretName , & specialTLSSecretsToUpdate )
1791
+ default :
1792
+ nl .Warnf (lbc .Logger , "special secret not found" )
1793
+ return
1772
1794
}
1773
-
1774
- err = lbc .configurator .AddOrUpdateSpecialTLSSecrets (secret , specialSecretsToUpdate )
1795
+ err := lbc .configurator .AddOrUpdateSpecialTLSSecrets (secret , specialTLSSecretsToUpdate )
1775
1796
if err != nil {
1776
1797
nl .Errorf (lbc .Logger , "Error when updating the special Secret %v: %v" , secretNsName , err )
1777
1798
lbc .recorder .Eventf (secret , api_v1 .EventTypeWarning , "UpdatedWithError" , "the special Secret %v was updated, but not applied: %v" , secretNsName , err )
1778
1799
return
1779
1800
}
1780
-
1781
1801
lbc .recorder .Eventf (secret , api_v1 .EventTypeNormal , "Updated" , "the special Secret %v was updated" , secretNsName )
1782
1802
}
1783
1803
0 commit comments