Skip to content

Commit 63944db

Browse files
authored
certificate: Reconcile only created secrets (#60)
If two cert-managers are running at a cluster they will each other secrets since the kube-admission-webhook annotation is there. This change filter the secrets and only reconcile the ones with the CA cert name from webhook config and the services owned by them. Signed-off-by: Quique Llorente <[email protected]>
1 parent 9eb3bc7 commit 63944db

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

pkg/certificate/controller.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,48 @@ func (m *Manager) add(mgr manager.Manager, r reconcile.Reconciler) error {
4343
return object.GetName() == m.webhookName
4444
}
4545

46+
isCASecret := func(object client.Object) bool {
47+
return object.GetName() == m.caSecretKey().Name
48+
}
49+
50+
isServiceSecret := func(object client.Object) bool {
51+
webhookConf, err := m.readyWebhookConfiguration()
52+
if err != nil {
53+
m.log.Info(fmt.Sprintf("failed checking if it's a generated secret: failed getting webhook configuration: %v", err))
54+
return false
55+
}
56+
57+
services, err := m.getServicesFromConfiguration(webhookConf)
58+
if err != nil {
59+
m.log.Info(fmt.Sprintf("failed checking if it's a generated secret: failed getting webhook configuration services: %v", err))
60+
return false
61+
}
62+
63+
for service, _ := range services {
64+
if object.GetName() == service.Name {
65+
return true
66+
}
67+
}
68+
return false
69+
}
70+
71+
isGeneratedSecret := func(object client.Object) bool {
72+
return isCASecret(object) || isServiceSecret(object)
73+
}
74+
4675
// Watch only events for selected m.webhookName
4776
onEventForThisWebhook := predicate.Funcs{
4877
CreateFunc: func(createEvent event.CreateEvent) bool {
49-
return isWebhookConfig(createEvent.Object) || isAnnotatedResource(createEvent.Object)
78+
return isWebhookConfig(createEvent.Object) || (isAnnotatedResource(createEvent.Object) && isGeneratedSecret(createEvent.Object))
5079
},
5180
DeleteFunc: func(deleteEvent event.DeleteEvent) bool {
52-
return isAnnotatedResource(deleteEvent.Object)
81+
return isAnnotatedResource(deleteEvent.Object) && isGeneratedSecret(deleteEvent.Object)
5382
},
5483
UpdateFunc: func(updateEvent event.UpdateEvent) bool {
55-
return isWebhookConfig(updateEvent.ObjectOld) || isAnnotatedResource(updateEvent.ObjectOld)
84+
return isWebhookConfig(updateEvent.ObjectOld) || (isAnnotatedResource(updateEvent.ObjectOld) && isGeneratedSecret(updateEvent.ObjectOld))
5685
},
5786
GenericFunc: func(genericEvent event.GenericEvent) bool {
58-
return isWebhookConfig(genericEvent.Object) || isAnnotatedResource(genericEvent.Object)
87+
return isWebhookConfig(genericEvent.Object) || (isAnnotatedResource(genericEvent.Object) && isGeneratedSecret(genericEvent.Object))
5988
},
6089
}
6190

0 commit comments

Comments
 (0)