Skip to content

Commit 85a1db4

Browse files
committed
refactor special secret input and validation
1 parent 426716b commit 85a1db4

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

internal/k8s/controller.go

Lines changed: 32 additions & 14 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,31 +1768,35 @@ 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) {
1771+
func (lbc *LoadBalancerController) validationTLSSpecialSecret(secret *api_v1.Secret, secretName string) {
17581772
var specialSecretsToUpdate []string
17591773
secretNsName := secret.Namespace + "/" + secret.Name
1774+
17601775
err := secrets.ValidateTLSSecret(secret)
17611776
if err != nil {
17621777
nl.Errorf(lbc.Logger, "Couldn't validate the special Secret %v: %v", secretNsName, err)
17631778
lbc.recorder.Eventf(secret, api_v1.EventTypeWarning, "Rejected", "the special Secret %v was rejected, using the previous version: %v", secretNsName, err)
17641779
return
17651780
}
1766-
1767-
if secretNsName == lbc.defaultServerSecret {
1768-
specialSecretsToUpdate = append(specialSecretsToUpdate, configs.DefaultServerSecretName)
1769-
}
1770-
if secretNsName == lbc.wildcardTLSSecret {
1771-
specialSecretsToUpdate = append(specialSecretsToUpdate, configs.WildcardSecretName)
1772-
}
1781+
specialSecretsToUpdate = append(specialSecretsToUpdate, secretName)
17731782

17741783
err = lbc.configurator.AddOrUpdateSpecialTLSSecrets(secret, specialSecretsToUpdate)
17751784
if err != nil {
17761785
nl.Errorf(lbc.Logger, "Error when updating the special Secret %v: %v", secretNsName, err)
17771786
lbc.recorder.Eventf(secret, api_v1.EventTypeWarning, "UpdatedWithError", "the special Secret %v was updated, but not applied: %v", secretNsName, err)
17781787
return
17791788
}
1789+
}
1790+
1791+
func (lbc *LoadBalancerController) handleSpecialSecretUpdate(secret *api_v1.Secret) {
1792+
switch secret.Name {
1793+
case lbc.specialSecrets.defaultServerSecret:
1794+
lbc.validationTLSSpecialSecret(secret, configs.DefaultServerSecretName)
1795+
case lbc.specialSecrets.wildcardTLSSecret:
1796+
lbc.validationTLSSpecialSecret(secret, configs.WildcardSecretName)
1797+
}
17801798

1781-
lbc.recorder.Eventf(secret, api_v1.EventTypeNormal, "Updated", "the special Secret %v was updated", secretNsName)
1799+
lbc.recorder.Eventf(secret, api_v1.EventTypeNormal, "Updated", "the special Secret %v was updated", secret.Namespace+"/"+secret.Name)
17821800
}
17831801

17841802
func getStatusFromEventTitle(eventTitle string) string {

0 commit comments

Comments
 (0)