@@ -883,6 +883,7 @@ func (lbc *LoadBalancerController) updateAllConfigs() {
883
883
var isNGINXConfigValid bool
884
884
var mgmtConfigHasWarnings bool
885
885
var mgmtErr error
886
+ var reloadNginx bool
886
887
887
888
if lbc .configMap != nil {
888
889
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() {
892
893
if mgmtErr != nil {
893
894
nl .Errorf (lbc .Logger , "configmap %s/%s: %v" , lbc .mgmtConfigMap .GetNamespace (), lbc .mgmtConfigMap .GetName (), mgmtErr )
894
895
}
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
+ }
895
905
// update special CA secret in mgmtConfigParams
896
906
if mgmtCfgParams .Secrets .TrustedCert != "" {
897
907
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() {
901
911
if _ , hasCRL := secret .Data [configs .CACrlKey ]; hasCRL {
902
912
mgmtCfgParams .Secrets .TrustedCRL = secret .Name
903
913
}
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 )
904
925
}
905
926
}
906
927
@@ -1769,7 +1790,8 @@ func (lbc *LoadBalancerController) syncSecret(task task) {
1769
1790
lbc .secretStore .AddOrUpdateSecret (secret )
1770
1791
1771
1792
if lbc .isSpecialSecret (key ) {
1772
- lbc .handleSpecialSecretUpdate (secret )
1793
+ reloadNginx := true
1794
+ lbc .handleSpecialSecretUpdate (secret , reloadNginx )
1773
1795
// we don't return here in case the special secret is also used in resources.
1774
1796
}
1775
1797
@@ -1828,25 +1850,22 @@ func (lbc *LoadBalancerController) handleSecretUpdate(secret *api_v1.Secret, res
1828
1850
warnings , addOrUpdateErr = lbc .configurator .AddOrUpdateResources (resourceExes , ! lbc .configurator .DynamicSSLReloadEnabled ())
1829
1851
if addOrUpdateErr != nil {
1830
1852
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 )
1832
1854
}
1833
1855
1834
1856
lbc .updateResourcesStatusAndEvents (resources , warnings , addOrUpdateErr )
1835
1857
}
1836
1858
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 {
1840
1860
err := secrets .ValidateTLSSecret (secret )
1841
1861
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
1845
1863
}
1846
1864
* secretList = append (* secretList , secretName )
1865
+ return nil
1847
1866
}
1848
1867
1849
- func (lbc * LoadBalancerController ) handleSpecialSecretUpdate (secret * api_v1.Secret ) {
1868
+ func (lbc * LoadBalancerController ) handleSpecialSecretUpdate (secret * api_v1.Secret , reload bool ) {
1850
1869
var specialTLSSecretsToUpdate []string
1851
1870
secretNsName := generateSecretNSName (secret )
1852
1871
@@ -1860,6 +1879,12 @@ func (lbc *LoadBalancerController) handleSpecialSecretUpdate(secret *api_v1.Secr
1860
1879
return
1861
1880
}
1862
1881
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
+
1863
1888
// reload nginx when the TLS special secrets are updated
1864
1889
switch secretNsName {
1865
1890
case lbc .specialSecrets .licenseSecret :
@@ -1881,7 +1906,7 @@ func (lbc *LoadBalancerController) handleSpecialSecretUpdate(secret *api_v1.Secr
1881
1906
}
1882
1907
}
1883
1908
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 )
1885
1910
}
1886
1911
1887
1912
// writeSpecialSecrets generates content and writes the secret to disk
@@ -1904,10 +1929,20 @@ func (lbc *LoadBalancerController) writeSpecialSecrets(secret *api_v1.Secret, se
1904
1929
1905
1930
func (lbc * LoadBalancerController ) specialSecretValidation (secretNsName string , secret * api_v1.Secret , specialTLSSecretsToUpdate * []string ) bool {
1906
1931
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
+ }
1908
1938
}
1909
1939
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
+ }
1911
1946
}
1912
1947
if secretNsName == lbc .specialSecrets .licenseSecret {
1913
1948
err := secrets .ValidateLicenseSecret (secret )
@@ -1926,7 +1961,12 @@ func (lbc *LoadBalancerController) specialSecretValidation(secretNsName string,
1926
1961
}
1927
1962
}
1928
1963
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
+ }
1930
1970
}
1931
1971
return true
1932
1972
}
0 commit comments