@@ -883,6 +883,7 @@ func (lbc *LoadBalancerController) updateAllConfigs() {
883883 var isNGINXConfigValid bool
884884 var mgmtConfigHasWarnings bool
885885 var mgmtErr error
886+ var reloadNginx bool
886887
887888 if lbc .configMap != nil {
888889 cfgParams , isNGINXConfigValid = configs .ParseConfigMap (ctx , lbc .configMap , lbc .isNginxPlus , lbc .appProtectEnabled , lbc .appProtectDosEnabled , lbc .configuration .isTLSPassthroughEnabled , lbc .recorder )
@@ -892,6 +893,15 @@ func (lbc *LoadBalancerController) updateAllConfigs() {
892893 if mgmtErr != nil {
893894 nl .Errorf (lbc .Logger , "configmap %s/%s: %v" , lbc .mgmtConfigMap .GetNamespace (), lbc .mgmtConfigMap .GetName (), mgmtErr )
894895 }
896+ // update special license secret in mgmtConfigParams
897+ if mgmtCfgParams .Secrets .License != "" {
898+ secret , err := lbc .client .CoreV1 ().Secrets (lbc .mgmtConfigMap .GetNamespace ()).Get (context .TODO (), mgmtCfgParams .Secrets .License , meta_v1.GetOptions {})
899+ if err != nil {
900+ nl .Errorf (lbc .Logger , "secret %s/%s: %v" , lbc .mgmtConfigMap .GetNamespace (), mgmtCfgParams .Secrets .License , err )
901+ }
902+ lbc .specialSecrets .licenseSecret = fmt .Sprintf ("%s/%s" , secret .Namespace , secret .Name )
903+ lbc .handleSpecialSecretUpdate (secret , reloadNginx )
904+ }
895905 // update special CA secret in mgmtConfigParams
896906 if mgmtCfgParams .Secrets .TrustedCert != "" {
897907 secret , err := lbc .client .CoreV1 ().Secrets (lbc .mgmtConfigMap .GetNamespace ()).Get (context .TODO (), mgmtCfgParams .Secrets .TrustedCert , meta_v1.GetOptions {})
@@ -901,6 +911,17 @@ func (lbc *LoadBalancerController) updateAllConfigs() {
901911 if _ , hasCRL := secret .Data [configs .CACrlKey ]; hasCRL {
902912 mgmtCfgParams .Secrets .TrustedCRL = secret .Name
903913 }
914+ lbc .specialSecrets .trustedCertSecret = fmt .Sprintf ("%s/%s" , secret .Namespace , secret .Name )
915+ lbc .handleSpecialSecretUpdate (secret , reloadNginx )
916+ }
917+ // update special ClientAuth secret in mgmtConfigParams
918+ if mgmtCfgParams .Secrets .ClientAuth != "" {
919+ secret , err := lbc .client .CoreV1 ().Secrets (lbc .mgmtConfigMap .GetNamespace ()).Get (context .TODO (), mgmtCfgParams .Secrets .ClientAuth , meta_v1.GetOptions {})
920+ if err != nil {
921+ nl .Errorf (lbc .Logger , "secret %s/%s: %v" , lbc .mgmtConfigMap .GetNamespace (), mgmtCfgParams .Secrets .ClientAuth , err )
922+ }
923+ lbc .specialSecrets .clientAuthSecret = fmt .Sprintf ("%s/%s" , secret .Namespace , secret .Name )
924+ lbc .handleSpecialSecretUpdate (secret , reloadNginx )
904925 }
905926 }
906927
@@ -1769,7 +1790,8 @@ func (lbc *LoadBalancerController) syncSecret(task task) {
17691790 lbc .secretStore .AddOrUpdateSecret (secret )
17701791
17711792 if lbc .isSpecialSecret (key ) {
1772- lbc .handleSpecialSecretUpdate (secret )
1793+ reloadNginx := true
1794+ lbc .handleSpecialSecretUpdate (secret , reloadNginx )
17731795 // we don't return here in case the special secret is also used in resources.
17741796 }
17751797
@@ -1828,25 +1850,22 @@ func (lbc *LoadBalancerController) handleSecretUpdate(secret *api_v1.Secret, res
18281850 warnings , addOrUpdateErr = lbc .configurator .AddOrUpdateResources (resourceExes , ! lbc .configurator .DynamicSSLReloadEnabled ())
18291851 if addOrUpdateErr != nil {
18301852 nl .Errorf (lbc .Logger , "Error when updating Secret %v: %v" , secretNsName , addOrUpdateErr )
1831- lbc .recorder .Eventf (secret , api_v1 .EventTypeWarning , "UpdatedWithError" , "%v was updated, but not applied: %v" , secretNsName , addOrUpdateErr )
1853+ lbc .recorder .Eventf (lbc . metadata . pod , api_v1 .EventTypeWarning , "UpdatedWithError" , "%v was updated, but not applied: %v" , secretNsName , addOrUpdateErr )
18321854 }
18331855
18341856 lbc .updateResourcesStatusAndEvents (resources , warnings , addOrUpdateErr )
18351857}
18361858
1837- func (lbc * LoadBalancerController ) validationTLSSpecialSecret (secret * api_v1.Secret , secretName string , secretList * []string ) {
1838- secretNsName := generateSecretNSName (secret )
1839-
1859+ func (lbc * LoadBalancerController ) validationTLSSpecialSecret (secret * api_v1.Secret , secretName string , secretList * []string ) error {
18401860 err := secrets .ValidateTLSSecret (secret )
18411861 if err != nil {
1842- nl .Errorf (lbc .Logger , "Couldn't validate the special Secret %v: %v" , secretNsName , err )
1843- lbc .recorder .Eventf (secret , api_v1 .EventTypeWarning , "Rejected" , "the special Secret %v was rejected, using the previous version: %v" , secretNsName , err )
1844- return
1862+ return err
18451863 }
18461864 * secretList = append (* secretList , secretName )
1865+ return nil
18471866}
18481867
1849- func (lbc * LoadBalancerController ) handleSpecialSecretUpdate (secret * api_v1.Secret ) {
1868+ func (lbc * LoadBalancerController ) handleSpecialSecretUpdate (secret * api_v1.Secret , reload bool ) {
18501869 var specialTLSSecretsToUpdate []string
18511870 secretNsName := generateSecretNSName (secret )
18521871
@@ -1860,6 +1879,12 @@ func (lbc *LoadBalancerController) handleSpecialSecretUpdate(secret *api_v1.Secr
18601879 return
18611880 }
18621881
1882+ // When the MGMT Configmap updates, we don't need to reload here, we are reloading in updateAllConfigs().
1883+ if ! reload {
1884+ lbc .recorder .Eventf (lbc .metadata .pod , api_v1 .EventTypeNormal , "SecretUpdated" , "the special Secret %v was updated" , secretNsName )
1885+ return
1886+ }
1887+
18631888 // reload nginx when the TLS special secrets are updated
18641889 switch secretNsName {
18651890 case lbc .specialSecrets .licenseSecret :
@@ -1881,7 +1906,7 @@ func (lbc *LoadBalancerController) handleSpecialSecretUpdate(secret *api_v1.Secr
18811906 }
18821907 }
18831908
1884- lbc .recorder .Eventf (secret , api_v1 .EventTypeNormal , "Updated " , "the special Secret %v was updated" , secretNsName )
1909+ lbc .recorder .Eventf (lbc . metadata . pod , api_v1 .EventTypeNormal , "SecretUpdated " , "the special Secret %v was updated" , secretNsName )
18851910}
18861911
18871912// writeSpecialSecrets generates content and writes the secret to disk
@@ -1904,10 +1929,20 @@ func (lbc *LoadBalancerController) writeSpecialSecrets(secret *api_v1.Secret, se
19041929
19051930func (lbc * LoadBalancerController ) specialSecretValidation (secretNsName string , secret * api_v1.Secret , specialTLSSecretsToUpdate * []string ) bool {
19061931 if secretNsName == lbc .specialSecrets .defaultServerSecret {
1907- lbc .validationTLSSpecialSecret (secret , configs .DefaultServerSecretFileName , specialTLSSecretsToUpdate )
1932+ err := lbc .validationTLSSpecialSecret (secret , configs .DefaultServerSecretFileName , specialTLSSecretsToUpdate )
1933+ if err != nil {
1934+ nl .Errorf (lbc .Logger , "Couldn't validate the special Secret %v: %v" , secretNsName , err )
1935+ lbc .recorder .Eventf (lbc .metadata .pod , api_v1 .EventTypeWarning , "Rejected" , "the special Secret %v was rejected, using the previous version: %v" , secretNsName , err )
1936+ return false
1937+ }
19081938 }
19091939 if secretNsName == lbc .specialSecrets .wildcardTLSSecret {
1910- lbc .validationTLSSpecialSecret (secret , configs .WildcardSecretFileName , specialTLSSecretsToUpdate )
1940+ err := lbc .validationTLSSpecialSecret (secret , configs .WildcardSecretFileName , specialTLSSecretsToUpdate )
1941+ if err != nil {
1942+ nl .Errorf (lbc .Logger , "Couldn't validate the special Secret %v: %v" , secretNsName , err )
1943+ lbc .recorder .Eventf (lbc .metadata .pod , api_v1 .EventTypeWarning , "Rejected" , "the special Secret %v was rejected, using the previous version: %v" , secretNsName , err )
1944+ return false
1945+ }
19111946 }
19121947 if secretNsName == lbc .specialSecrets .licenseSecret {
19131948 err := secrets .ValidateLicenseSecret (secret )
@@ -1926,7 +1961,12 @@ func (lbc *LoadBalancerController) specialSecretValidation(secretNsName string,
19261961 }
19271962 }
19281963 if secretNsName == lbc .specialSecrets .clientAuthSecret {
1929- lbc .validationTLSSpecialSecret (secret , configs .ClientAuthCertSecretFileName , specialTLSSecretsToUpdate )
1964+ err := lbc .validationTLSSpecialSecret (secret , configs .ClientAuthCertSecretFileName , specialTLSSecretsToUpdate )
1965+ if err != nil {
1966+ nl .Errorf (lbc .Logger , "Couldn't validate the special Secret %v: %v" , secretNsName , err )
1967+ lbc .recorder .Eventf (lbc .metadata .pod , api_v1 .EventTypeWarning , "Rejected" , "the special Secret %v was rejected, using the previous version: %v" , secretNsName , err )
1968+ return false
1969+ }
19301970 }
19311971 return true
19321972}
0 commit comments