@@ -103,6 +103,11 @@ type podEndpoint struct {
103103 configs.MeshPodOwner
104104}
105105
106+ type specialSecrets struct {
107+ defaultServerSecret string
108+ wildcardTLSSecret string
109+ }
110+
106111// LoadBalancerController watches Kubernetes API and
107112// reconfigures NGINX via NginxController when needed
108113type LoadBalancerController struct {
@@ -131,7 +136,7 @@ type LoadBalancerController struct {
131136 appProtectEnabled bool
132137 appProtectDosEnabled bool
133138 recorder record.EventRecorder
134- defaultServerSecret string
139+ specialSecrets specialSecrets
135140 ingressClass string
136141 statusUpdater * statusUpdater
137142 leaderElector * leaderelection.LeaderElector
@@ -142,7 +147,6 @@ type LoadBalancerController struct {
142147 namespaceList []string
143148 secretNamespaceList []string
144149 controllerNamespace string
145- wildcardTLSSecret string
146150 areCustomResourcesEnabled bool
147151 enableOIDC bool
148152 metricsCollector collectors.ControllerCollector
@@ -226,14 +230,18 @@ type NewLoadBalancerControllerInput struct {
226230
227231// NewLoadBalancerController creates a controller
228232func NewLoadBalancerController (input NewLoadBalancerControllerInput ) * LoadBalancerController {
233+ specialSecrets := specialSecrets {
234+ defaultServerSecret : input .DefaultServerSecret ,
235+ wildcardTLSSecret : input .WildcardTLSSecret ,
236+ }
229237 lbc := & LoadBalancerController {
230238 client : input .KubeClient ,
231239 confClient : input .ConfClient ,
232240 dynClient : input .DynClient ,
233241 restConfig : input .RestConfig ,
234242 Logger : nl .LoggerFromContext (input .LoggerContext ),
235243 configurator : input .NginxConfigurator ,
236- defaultServerSecret : input . DefaultServerSecret ,
244+ specialSecrets : specialSecrets ,
237245 appProtectEnabled : input .AppProtectEnabled ,
238246 appProtectDosEnabled : input .AppProtectDosEnabled ,
239247 isNginxPlus : input .IsNginxPlus ,
@@ -245,7 +253,6 @@ func NewLoadBalancerController(input NewLoadBalancerControllerInput) *LoadBalanc
245253 namespaceList : input .Namespace ,
246254 secretNamespaceList : input .SecretNamespace ,
247255 controllerNamespace : input .ControllerNamespace ,
248- wildcardTLSSecret : input .WildcardTLSSecret ,
249256 areCustomResourcesEnabled : input .AreCustomResourcesEnabled ,
250257 enableOIDC : input .EnableOIDC ,
251258 metricsCollector : input .MetricsCollector ,
@@ -1726,7 +1733,14 @@ func removeDuplicateResources(resources []Resource) []Resource {
17261733}
17271734
17281735func (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+ }
17301744}
17311745
17321746func (lbc * LoadBalancerController ) handleRegularSecretDeletion (resources []Resource ) {
@@ -1754,30 +1768,36 @@ func (lbc *LoadBalancerController) handleSecretUpdate(secret *api_v1.Secret, res
17541768 lbc .updateResourcesStatusAndEvents (resources , warnings , addOrUpdateErr )
17551769}
17561770
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 ) {
17591772 secretNsName := secret .Namespace + "/" + secret .Name
1773+
17601774 err := secrets .ValidateTLSSecret (secret )
17611775 if err != nil {
17621776 nl .Errorf (lbc .Logger , "Couldn't validate the special Secret %v: %v" , secretNsName , err )
17631777 lbc .recorder .Eventf (secret , api_v1 .EventTypeWarning , "Rejected" , "the special Secret %v was rejected, using the previous version: %v" , secretNsName , err )
17641778 return
17651779 }
1780+ * secretList = append (* secretList , secretName )
1781+ }
17661782
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
17721794 }
1773-
1774- err = lbc .configurator .AddOrUpdateSpecialTLSSecrets (secret , specialSecretsToUpdate )
1795+ err := lbc .configurator .AddOrUpdateSpecialTLSSecrets (secret , specialTLSSecretsToUpdate )
17751796 if err != nil {
17761797 nl .Errorf (lbc .Logger , "Error when updating the special Secret %v: %v" , secretNsName , err )
17771798 lbc .recorder .Eventf (secret , api_v1 .EventTypeWarning , "UpdatedWithError" , "the special Secret %v was updated, but not applied: %v" , secretNsName , err )
17781799 return
17791800 }
1780-
17811801 lbc .recorder .Eventf (secret , api_v1 .EventTypeNormal , "Updated" , "the special Secret %v was updated" , secretNsName )
17821802}
17831803
0 commit comments