Skip to content

Commit 0db9f89

Browse files
authored
refactor special secret input and validation (#6808)
1 parent d2a70a4 commit 0db9f89

File tree

2 files changed

+36
-15
lines changed

2 files changed

+36
-15
lines changed

internal/configs/configurator.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,7 @@ func (cnf *Configurator) addOrUpdateTLSSecret(secret *api_v1.Secret) string {
925925
// AddOrUpdateSpecialTLSSecrets adds or updates a file with a TLS cert and a key from a Special TLS Secret (eg. DefaultServerSecret, WildcardTLSSecret).
926926
func (cnf *Configurator) AddOrUpdateSpecialTLSSecrets(secret *api_v1.Secret, secretNames []string) error {
927927
l := nl.LoggerFromContext(cnf.CfgParams.Context)
928+
nl.Debugf(l, "AddOrUpdateSpecialTLSSecrets: secrets [%v]", secretNames)
928929
data := GenerateCertAndKeyFileContent(secret)
929930

930931
for _, secretName := range secretNames {

internal/k8s/controller.go

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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
108113
type 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
228232
func 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

17281735
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+
}
17301744
}
17311745

17321746
func (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

Comments
 (0)