@@ -87,31 +87,35 @@ func newReconciledNormal(namespace, name string) reconciler.Event {
8787
8888func (r * Reconciler ) ReconcileKind (ctx context.Context , sink * sinks.IntegrationSink ) reconciler.Event {
8989 featureFlags := feature .FromContext (ctx )
90+ logger := logging .FromContext (ctx )
9091
91- if featureFlags .IsPermissiveTransportEncryption () || featureFlags .IsStrictTransportEncryption () {
92- _ , err := r .reconcileCMCertificate (ctx , sink )
93- if err != nil {
94- logging .FromContext (ctx ).Errorw ("Error reconciling Certificate" , zap .Error (err ))
95- return err
96- }
92+ logger .Debugw ("Reconciling IntegrationSink Certificate" )
93+ _ , err := r .reconcileIntegrationSinkCertificate (ctx , sink )
94+ if err != nil {
95+ logging .FromContext (ctx ).Errorw ("Error reconciling Certificate" , zap .Error (err ))
96+ return err
9797 }
9898
99- _ , err := r .reconcileDeployment (ctx , sink , featureFlags )
99+ logger .Debugw ("Reconciling IntegrationSink Deployment" )
100+ _ , err = r .reconcileDeployment (ctx , sink , featureFlags )
100101 if err != nil {
101102 logging .FromContext (ctx ).Errorw ("Error reconciling Pod" , zap .Error (err ))
102103 return err
103104 }
104105
106+ logger .Debugw ("Reconciling IntegrationSink Service" )
105107 _ , err = r .reconcileService (ctx , sink )
106108 if err != nil {
107109 logging .FromContext (ctx ).Errorw ("Error reconciling Service" , zap .Error (err ))
108110 return err
109111 }
110112
113+ logger .Debugw ("Reconciling IntegrationSink address" )
111114 if err := r .reconcileAddress (ctx , sink ); err != nil {
112115 return fmt .Errorf ("failed to reconcile address: %w" , err )
113116 }
114117
118+ logger .Debugw ("Updating IntegrationSink status with EventPolicies" )
115119 err = auth .UpdateStatusWithEventPolicies (featureFlags , & sink .Status .AppliedEventPoliciesStatus , & sink .Status , r .eventPolicyLister , sinks .SchemeGroupVersion .WithKind ("IntegrationSink" ), sink .ObjectMeta )
116120 if err != nil {
117121 return fmt .Errorf ("could not update IntegrationSink status with EventPolicies: %v" , err )
@@ -171,19 +175,20 @@ func (r *Reconciler) reconcileService(ctx context.Context, sink *sinks.Integrati
171175 return svc , nil
172176}
173177
174- func (r * Reconciler ) reconcileCMCertificate (ctx context.Context , sink * sinks.IntegrationSink ) (* cmv1.Certificate , error ) {
178+ func (r * Reconciler ) reconcileIntegrationSinkCertificate (ctx context.Context , sink * sinks.IntegrationSink ) (* cmv1.Certificate , error ) {
175179
176- expected := certificates .MakeCertificate (sink , certificates .WithDNSNames (
177- network .GetServiceHostname (resources .DeploymentName (sink .GetName ()), sink .GetNamespace ()),
178- fmt .Sprintf ("%s.%s.svc" , resources .DeploymentName (sink .GetName ()), sink .GetNamespace ()),
179- ))
180+ if f := feature .FromContext (ctx ); ! f .IsStrictTransportEncryption () && ! f .IsPermissiveTransportEncryption () {
181+ return nil , r .deleteIntegrationSinkCertificate (ctx , sink )
182+ }
180183
181- lister := r .cmCertificateLister .Load ()
182- if lister == nil || * lister == nil {
184+ expected := integrationSinkCertificate (sink )
185+
186+ cmCertificateLister := r .cmCertificateLister .Load ()
187+ if cmCertificateLister == nil || * cmCertificateLister == nil {
183188 return nil , fmt .Errorf ("no cert-manager certificate lister created yet, this should rarely happen and recover" )
184189 }
185190
186- cert , err := (* lister ).Certificates (sink .Namespace ).Get (expected .Name )
191+ cert , err := (* cmCertificateLister ).Certificates (sink .Namespace ).Get (expected .Name )
187192 if apierrors .IsNotFound (err ) {
188193 cert , err := r .certManagerClient .CertmanagerV1 ().Certificates (sink .Namespace ).Create (ctx , expected , metav1.CreateOptions {})
189194 if err != nil {
@@ -201,6 +206,31 @@ func (r *Reconciler) reconcileCMCertificate(ctx context.Context, sink *sinks.Int
201206 return cert , nil
202207}
203208
209+ func (r * Reconciler ) deleteIntegrationSinkCertificate (ctx context.Context , sink * sinks.IntegrationSink ) error {
210+ certificate := integrationSinkCertificate (sink )
211+
212+ cmCertificateLister := r .cmCertificateLister .Load ()
213+ if cmCertificateLister != nil && * cmCertificateLister != nil {
214+ _ , err := (* cmCertificateLister ).Certificates (certificate .GetNamespace ()).Get (certificate .GetName ())
215+ if apierrors .IsNotFound (err ) {
216+ return nil
217+ }
218+ if err != nil {
219+ return fmt .Errorf ("failed to get certificate %s/%s: %w" , certificate .GetNamespace (), certificate .GetName (), err )
220+ }
221+ }
222+
223+ err := r .certManagerClient .CertmanagerV1 ().Certificates (certificate .GetNamespace ()).Delete (ctx , certificate .GetName (), metav1.DeleteOptions {})
224+ if apierrors .IsNotFound (err ) {
225+ return nil
226+ }
227+ if err != nil {
228+ return fmt .Errorf ("failed to delete certificate %s/%s: %w" , certificate .GetNamespace (), certificate .GetName (), err )
229+ }
230+ controller .GetEventRecorder (ctx ).Event (sink , corev1 .EventTypeNormal , "IntegrationSinkCertificateDeleted" , certificate .GetName ())
231+ return nil
232+ }
233+
204234func (r * Reconciler ) reconcileAddress (ctx context.Context , sink * sinks.IntegrationSink ) error {
205235
206236 featureFlags := feature .FromContext (ctx )
@@ -303,3 +333,12 @@ func (r *Reconciler) podSpecChanged(oldPodSpec corev1.PodSpec, newPodSpec corev1
303333 }
304334 return false
305335}
336+
337+ func integrationSinkCertificate (sink * sinks.IntegrationSink ) * cmv1.Certificate {
338+ return certificates .MakeCertificate (sink ,
339+ certificates .WithDNSNames (
340+ network .GetServiceHostname (resources .DeploymentName (sink .Name ), sink .Namespace ),
341+ fmt .Sprintf ("%s.%s.svc" , resources .DeploymentName (sink .Name ), sink .Namespace ),
342+ ),
343+ )
344+ }
0 commit comments