Skip to content

Commit db68027

Browse files
authored
fix: trigger reconcile for Secret updates referenced by a BackendTLSP… (#4581)
fix: trigger reconcile for Secret updates referenced by a BackendTLSPolicy Signed-off-by: Arko Dasgupta <[email protected]>
1 parent efe625d commit db68027

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

internal/provider/kubernetes/indexers.go

+23-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const (
4040
backendSecurityPolicyIndex = "backendSecurityPolicyIndex"
4141
configMapCtpIndex = "configMapCtpIndex"
4242
secretCtpIndex = "secretCtpIndex"
43+
secretBtlsIndex = "secretBtlsIndex"
4344
configMapBtlsIndex = "configMapBtlsIndex"
4445
backendEnvoyExtensionPolicyIndex = "backendEnvoyExtensionPolicyIndex"
4546
backendEnvoyProxyTelemetryIndex = "backendEnvoyProxyTelemetryIndex"
@@ -702,14 +703,17 @@ func configMapRouteFilterIndexFunc(rawObj client.Object) []string {
702703
return configMapReferences
703704
}
704705

705-
// addBtlsIndexers adds indexing on BackendTLSPolicy, for ConfigMap objects that are
706+
// addBtlsIndexers adds indexing on BackendTLSPolicy, for ConfigMap and Secret objects that are
706707
// referenced in BackendTLSPolicy objects. This helps in querying for BackendTLSPolicies that are
707708
// affected by a particular ConfigMap CRUD.
708709
func addBtlsIndexers(ctx context.Context, mgr manager.Manager) error {
709710
if err := mgr.GetFieldIndexer().IndexField(ctx, &gwapiv1a3.BackendTLSPolicy{}, configMapBtlsIndex, configMapBtlsIndexFunc); err != nil {
710711
return err
711712
}
712713

714+
if err := mgr.GetFieldIndexer().IndexField(ctx, &gwapiv1a3.BackendTLSPolicy{}, secretBtlsIndex, secretBtlsIndexFunc); err != nil {
715+
return err
716+
}
713717
return nil
714718
}
715719

@@ -731,6 +735,24 @@ func configMapBtlsIndexFunc(rawObj client.Object) []string {
731735
return configMapReferences
732736
}
733737

738+
func secretBtlsIndexFunc(rawObj client.Object) []string {
739+
btls := rawObj.(*gwapiv1a3.BackendTLSPolicy)
740+
var secretReferences []string
741+
if btls.Spec.Validation.CACertificateRefs != nil {
742+
for _, caCertRef := range btls.Spec.Validation.CACertificateRefs {
743+
if string(caCertRef.Kind) == resource.KindSecret {
744+
secretReferences = append(secretReferences,
745+
types.NamespacedName{
746+
Namespace: btls.Namespace,
747+
Name: string(caCertRef.Name),
748+
}.String(),
749+
)
750+
}
751+
}
752+
}
753+
return secretReferences
754+
}
755+
734756
// addEnvoyExtensionPolicyIndexers adds indexing on EnvoyExtensionPolicy.
735757
// - For Service objects that are referenced in EnvoyExtensionPolicy objects via
736758
// `.spec.extProc.[*].service.backendObjectReference`. This helps in querying for

internal/provider/kubernetes/predicates.go

+22
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,28 @@ func (r *gatewayAPIReconciler) validateSecretForReconcile(obj client.Object) boo
172172
}
173173
}
174174

175+
if r.bTLSPolicyCRDExists {
176+
if r.isBackendTLSPolicyReferencingSecret(&nsName) {
177+
return true
178+
}
179+
}
180+
181+
return false
182+
}
183+
184+
func (r *gatewayAPIReconciler) isBackendTLSPolicyReferencingSecret(nsName *types.NamespacedName) bool {
185+
btlsList := &gwapiv1a3.BackendTLSPolicyList{}
186+
if err := r.client.List(context.Background(), btlsList, &client.ListOptions{
187+
FieldSelector: fields.OneTermEqualSelector(secretBtlsIndex, nsName.String()),
188+
}); err != nil {
189+
r.log.Error(err, "unable to find associated BackendTLSPolicy")
190+
return false
191+
}
192+
193+
if len(btlsList.Items) > 0 {
194+
return true
195+
}
196+
175197
return false
176198
}
177199

0 commit comments

Comments
 (0)