Skip to content

Commit a29cbfb

Browse files
authored
revert trustbundle propagation in sb lifecycle Do (#8985)
* revert trustbundle propagation in sb lifecycle Do * see if we can set the bundle CMs directly for apiserversource * update apiserversource_test since we now update the RA immediately * better names for the "bundle" variables * pass the propagated trust bundles directly to the integration Deployment * refactor MakeDeploymentSpec so we don't pass both the lister and the list
1 parent e88c518 commit a29cbfb

7 files changed

Lines changed: 50 additions & 65 deletions

File tree

pkg/apis/sources/v1/sinkbinding_lifecycle.go

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"strings"
2424

2525
"go.uber.org/zap"
26-
"k8s.io/client-go/kubernetes"
2726
corev1listers "k8s.io/client-go/listers/core/v1"
2827

2928
corev1 "k8s.io/api/core/v1"
@@ -215,30 +214,13 @@ func (sb *SinkBinding) Do(ctx context.Context, ps *duckv1.WithPod) {
215214
Value: ceOverrides,
216215
})
217216
}
218-
gvk := schema.GroupVersionKind{
219-
Group: SchemeGroupVersion.Group,
220-
Version: SchemeGroupVersion.Version,
221-
Kind: "SinkBinding",
222-
}
223-
bundles, err := eventingtls.PropagateTrustBundles(ctx, getKubeClient(ctx), GetTrustBundleConfigMapLister(ctx), gvk, sb)
217+
218+
pss, err := eventingtls.AddTrustBundleVolumes(GetTrustBundleConfigMapLister(ctx), sb, &ps.Spec.Template.Spec)
224219
if err != nil {
225-
logging.FromContext(ctx).Errorw("Failed to propagate trust bundles", zap.Error(err))
226-
}
227-
if len(bundles) > 0 {
228-
pss, err := eventingtls.AddTrustBundleVolumesFromConfigMaps(bundles, &ps.Spec.Template.Spec)
229-
if err != nil {
230-
logging.FromContext(ctx).Errorw("Failed to add trust bundle volumes from configmaps %s/%s: %+v", zap.Error(err))
231-
return
232-
}
233-
ps.Spec.Template.Spec = *pss
234-
} else {
235-
pss, err := eventingtls.AddTrustBundleVolumes(GetTrustBundleConfigMapLister(ctx), sb, &ps.Spec.Template.Spec)
236-
if err != nil {
237-
logging.FromContext(ctx).Errorw("Failed to add trust bundle volumes %s/%s: %+v", zap.Error(err))
238-
return
239-
}
240-
ps.Spec.Template.Spec = *pss
220+
logging.FromContext(ctx).Errorw("Failed to add trust bundle volumes %s/%s: %+v", zap.Error(err))
221+
return
241222
}
223+
ps.Spec.Template.Spec = *pss
242224

243225
if sb.Status.OIDCTokenSecretName != nil {
244226
ps.Spec.Template.Spec.Volumes = append(ps.Spec.Template.Spec.Volumes, corev1.Volume{
@@ -348,20 +330,6 @@ func (sb *SinkBinding) Undo(ctx context.Context, ps *duckv1.WithPod) {
348330
}
349331
}
350332

351-
type kubeClientKey struct{}
352-
353-
func WithKubeClient(ctx context.Context, k kubernetes.Interface) context.Context {
354-
return context.WithValue(ctx, kubeClientKey{}, k)
355-
}
356-
357-
func getKubeClient(ctx context.Context) kubernetes.Interface {
358-
k := ctx.Value(kubeClientKey{})
359-
if k == nil {
360-
panic("No Kube client found in context.")
361-
}
362-
return k.(kubernetes.Interface)
363-
}
364-
365333
type configMapListerKey struct{}
366334

367335
func WithTrustBundleConfigMapLister(ctx context.Context, lister corev1listers.ConfigMapLister) context.Context {

pkg/apis/sources/v1/sinkbinding_lifecycle_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import (
3232
"knative.dev/pkg/apis"
3333
duckv1 "knative.dev/pkg/apis/duck/v1"
3434
"knative.dev/pkg/client/injection/ducks/duck/v1/addressable"
35-
kubeclient "knative.dev/pkg/client/injection/kube/client/fake"
3635
configmapinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/fake"
3736
fakedynamicclient "knative.dev/pkg/injection/clients/dynamicclient/fake"
3837
"knative.dev/pkg/resolver"
@@ -929,7 +928,6 @@ func TestSinkBindingDo(t *testing.T) {
929928
}
930929
ctx = WithURIResolver(ctx, r)
931930
ctx = WithTrustBundleConfigMapLister(ctx, configmapinformer.Get(ctx).Lister())
932-
ctx = WithKubeClient(ctx, kubeclient.Get(ctx))
933931

934932
for _, cm := range test.configMaps {
935933
_ = configmapinformer.Get(ctx).Informer().GetIndexer().Add(cm)

pkg/reconciler/apiserversource/apiserversource.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,14 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, source *v1.ApiServerSour
162162
}
163163
}
164164

165-
if err := r.propagateTrustBundles(ctx, source); err != nil {
165+
trustBundleConfigMaps, err := r.propagateTrustBundles(ctx, source)
166+
if err != nil {
166167
return err
167168
}
168169

169170
// An empty selector targets all namespaces.
170171
allNamespaces := isEmptySelector(source.Spec.NamespaceSelector)
171-
ra, err := r.createReceiveAdapter(ctx, source, sinkAddr, namespaces, allNamespaces)
172+
ra, err := r.createReceiveAdapter(ctx, source, sinkAddr, namespaces, allNamespaces, trustBundleConfigMaps)
172173
if err != nil {
173174
logging.FromContext(ctx).Errorw("Unable to create the receive adapter", zap.Error(err))
174175
return err
@@ -228,7 +229,7 @@ func isEmptySelector(selector *metav1.LabelSelector) bool {
228229
return false
229230
}
230231

231-
func (r *Reconciler) createReceiveAdapter(ctx context.Context, src *v1.ApiServerSource, sinkAddr *duckv1.Addressable, namespaces []string, allNamespaces bool) (*appsv1.Deployment, error) {
232+
func (r *Reconciler) createReceiveAdapter(ctx context.Context, src *v1.ApiServerSource, sinkAddr *duckv1.Addressable, namespaces []string, allNamespaces bool, trustBundleConfigMaps []*corev1.ConfigMap) (*appsv1.Deployment, error) {
232233
// TODO: missing.
233234
// if err := checkResourcesStatus(src); err != nil {
234235
// return nil, err
@@ -258,11 +259,20 @@ func (r *Reconciler) createReceiveAdapter(ctx context.Context, src *v1.ApiServer
258259
return nil, err
259260
}
260261

261-
podTemplate, err := eventingtls.AddTrustBundleVolumes(r.trustBundleConfigMapLister, src, &expected.Spec.Template.Spec)
262-
if err != nil {
263-
return nil, fmt.Errorf("failed to add trust bundle volumes: %w", err)
262+
if len(trustBundleConfigMaps) > 0 {
263+
podTemplate, err := eventingtls.AddTrustBundleVolumesFromConfigMaps(trustBundleConfigMaps, &expected.Spec.Template.Spec)
264+
if err != nil {
265+
return nil, fmt.Errorf("failed to add trust bundle volumes from configmaps: %w", err)
266+
}
267+
expected.Spec.Template.Spec = *podTemplate
268+
} else {
269+
podTemplate, err := eventingtls.AddTrustBundleVolumes(r.trustBundleConfigMapLister, src, &expected.Spec.Template.Spec)
270+
271+
if err != nil {
272+
return nil, fmt.Errorf("failed to add trust bundle volumes: %w", err)
273+
}
274+
expected.Spec.Template.Spec = *podTemplate
264275
}
265-
expected.Spec.Template.Spec = *podTemplate
266276

267277
ra, err := r.kubeClientSet.AppsV1().Deployments(src.Namespace).Get(ctx, expected.Name, metav1.GetOptions{})
268278
if apierrors.IsNotFound(err) {
@@ -472,12 +482,11 @@ func (r *Reconciler) createOIDCRoleBinding(ctx context.Context, source *v1.ApiSe
472482
return nil
473483
}
474484

475-
func (r *Reconciler) propagateTrustBundles(ctx context.Context, source *v1.ApiServerSource) error {
485+
func (r *Reconciler) propagateTrustBundles(ctx context.Context, source *v1.ApiServerSource) ([]*corev1.ConfigMap, error) {
476486
gvk := schema.GroupVersionKind{
477487
Group: v1.SchemeGroupVersion.Group,
478488
Version: v1.SchemeGroupVersion.Version,
479489
Kind: "ApiServerSource",
480490
}
481-
_, err := eventingtls.PropagateTrustBundles(ctx, r.kubeClientSet, r.trustBundleConfigMapLister, gvk, source)
482-
return err
491+
return eventingtls.PropagateTrustBundles(ctx, r.kubeClientSet, r.trustBundleConfigMapLister, gvk, source)
483492
}

pkg/reconciler/apiserversource/apiserversource_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,12 @@ func TestReconcile(t *testing.T) {
256256
}),
257257
),
258258
},
259+
WantUpdates: []clientgotesting.UpdateActionImpl{{
260+
Object: makeAvailableReceiveAdapter(t, withTrustBundle("bundle")),
261+
}},
259262
WantEvents: []string{
260263
Eventf(corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", sourceName),
264+
Eventf(corev1.EventTypeNormal, "ApiServerSourceDeploymentUpdated", `Deployment "apiserversource-test-apiserver-source-1234" updated`),
261265
},
262266
WantPatches: []clientgotesting.PatchActionImpl{
263267
patchFinalizers(sourceName, testNS),

pkg/reconciler/integration/sink/integrationsink.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,14 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, sink *sinks.IntegrationS
101101
logger := logging.FromContext(ctx)
102102

103103
logger.Debugw("Reconciling Trust Bundles")
104-
if err := r.reconcileIntegrationSinkTrustBundles(ctx, sink); err != nil {
104+
trustBundleConfigMaps, err := r.reconcileIntegrationSinkTrustBundles(ctx, sink)
105+
if err != nil {
105106
logger.Errorw("Error reconciling Trust Bundles", zap.Error(err))
106107
return err
107108
}
108109

109110
logger.Debugw("Reconciling IntegrationSink Certificate")
110-
_, err := r.reconcileIntegrationSinkCertificate(ctx, sink)
111+
_, err = r.reconcileIntegrationSinkCertificate(ctx, sink)
111112
if err != nil {
112113
logging.FromContext(ctx).Errorw("Error reconciling Certificate", zap.Error(err))
113114
return err
@@ -121,7 +122,7 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, sink *sinks.IntegrationS
121122
}
122123

123124
logger.Debugw("Reconciling IntegrationSink Deployment")
124-
_, err = r.reconcileDeployment(ctx, sink, r.authProxyImage, featureFlags)
125+
_, err = r.reconcileDeployment(ctx, sink, r.authProxyImage, featureFlags, trustBundleConfigMaps)
125126
if err != nil {
126127
logging.FromContext(ctx).Errorw("Error reconciling Pod", zap.Error(err))
127128
return err
@@ -148,8 +149,15 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, sink *sinks.IntegrationS
148149
return newReconciledNormal(sink.Namespace, sink.Name)
149150
}
150151

151-
func (r *Reconciler) reconcileDeployment(ctx context.Context, sink *sinks.IntegrationSink, authProxyImage string, featureFlags feature.Flags) (*v1.Deployment, error) {
152-
expected, err := resources.MakeDeploymentSpec(sink, authProxyImage, featureFlags, r.trustBundleConfigMapLister)
152+
func (r *Reconciler) reconcileDeployment(ctx context.Context, sink *sinks.IntegrationSink, authProxyImage string, featureFlags feature.Flags, trustBundleConfigMaps []*corev1.ConfigMap) (*v1.Deployment, error) {
153+
if len(trustBundleConfigMaps) == 0 {
154+
var err error
155+
trustBundleConfigMaps, err = r.trustBundleConfigMapLister.ConfigMaps(sink.Namespace).List(eventingtls.TrustBundleSelector)
156+
if err != nil {
157+
return nil, fmt.Errorf("failed to list trust bundle ConfigMaps: %w", err)
158+
}
159+
}
160+
expected, err := resources.MakeDeploymentSpec(sink, authProxyImage, featureFlags, trustBundleConfigMaps)
153161
if err != nil {
154162
return nil, fmt.Errorf("failed to create deployment template: %w", err)
155163
}
@@ -282,20 +290,21 @@ func (r *Reconciler) deleteIntegrationSinkCertificate(ctx context.Context, sink
282290
return nil
283291
}
284292

285-
func (r *Reconciler) reconcileIntegrationSinkTrustBundles(ctx context.Context, sink *sinks.IntegrationSink) error {
293+
func (r *Reconciler) reconcileIntegrationSinkTrustBundles(ctx context.Context, sink *sinks.IntegrationSink) ([]*corev1.ConfigMap, error) {
286294
gvk := schema.GroupVersionKind{
287295
Group: sinks.SchemeGroupVersion.Group,
288296
Version: sinks.SchemeGroupVersion.Version,
289297
Kind: "IntegrationSink",
290298
}
291299

292-
if _, err := eventingtls.PropagateTrustBundles(ctx, r.kubeClientSet, r.trustBundleConfigMapLister, gvk, sink); err != nil {
300+
trustBundleConfigMaps, err := eventingtls.PropagateTrustBundles(ctx, r.kubeClientSet, r.trustBundleConfigMapLister, gvk, sink)
301+
if err != nil {
293302
sink.Status.MarkFailedTrustBundlePropagation("FailedTrustBundlePropagation", err.Error())
294-
return err
303+
return nil, err
295304
}
296305
sink.Status.MarkTrustBundlePropagated()
297306

298-
return nil
307+
return trustBundleConfigMaps, nil
299308
}
300309

301310
func (r *Reconciler) reconcileAddress(ctx context.Context, sink *sinks.IntegrationSink) error {

pkg/reconciler/integration/sink/resources/container_image.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"k8s.io/apimachinery/pkg/labels"
2828
"k8s.io/apimachinery/pkg/types"
2929
"k8s.io/apimachinery/pkg/util/intstr"
30-
corev1listers "k8s.io/client-go/listers/core/v1"
3130
"k8s.io/utils/ptr"
3231
commonv1a1 "knative.dev/eventing/pkg/apis/common/integration/v1alpha1"
3332
"knative.dev/eventing/pkg/apis/feature"
@@ -46,7 +45,7 @@ const (
4645
AuthProxyRolebindingName = "eventing-auth-proxy"
4746
)
4847

49-
func MakeDeploymentSpec(sink *v1alpha1.IntegrationSink, authProxyImage string, featureFlags feature.Flags, trustBundleConfigmapLister corev1listers.ConfigMapLister) (*appsv1.Deployment, error) {
48+
func MakeDeploymentSpec(sink *v1alpha1.IntegrationSink, authProxyImage string, featureFlags feature.Flags, trustBundleConfigMaps []*corev1.ConfigMap) (*appsv1.Deployment, error) {
5049
probesPort := int32(8080)
5150
probesScheme := corev1.URISchemeHTTP
5251
if featureFlags.IsStrictTransportEncryption() {
@@ -202,7 +201,7 @@ func MakeDeploymentSpec(sink *v1alpha1.IntegrationSink, authProxyImage string, f
202201
})
203202

204203
// add trustbundles directly, so auth-proxies tokenverifier does not need the trustbundleconfigmap lister for oidc discovery
205-
podspec, err := eventingtls.AddTrustBundleVolumes(trustBundleConfigmapLister, deploy, &deploy.Spec.Template.Spec)
204+
podspec, err := eventingtls.AddTrustBundleVolumesFromConfigMaps(trustBundleConfigMaps, &deploy.Spec.Template.Spec)
206205
if err != nil {
207206
return nil, fmt.Errorf("failed to add trust bundle volumes: %w", err)
208207
}

pkg/reconciler/sinkbinding/controller.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,8 @@ func NewController(
150150
trustBundleConfigMapLister: trustBundleConfigMapLister,
151151
}
152152

153-
k8s := kubeclient.Get(ctx)
154153
c.WithContext = func(ctx context.Context, b psbinding.Bindable) (context.Context, error) {
155-
return v1.WithKubeClient(v1.WithTrustBundleConfigMapLister(v1.WithURIResolver(ctx, sbResolver), trustBundleConfigMapLister), k8s), nil
154+
return v1.WithTrustBundleConfigMapLister(v1.WithURIResolver(ctx, sbResolver), trustBundleConfigMapLister), nil
156155
}
157156
c.Tracker = impl.Tracker
158157
c.Factory = &duck.CachedInformerFactory{
@@ -226,10 +225,9 @@ func ListAll(ctx context.Context, handler cache.ResourceEventHandler) psbinding.
226225

227226
func WithContextFactory(ctx context.Context, lister corev1listers.ConfigMapLister, handler func(types.NamespacedName)) psbinding.BindableContext {
228227
r := resolver.NewURIResolverFromTracker(ctx, tracker.New(handler, controller.GetTrackerLease(ctx)))
229-
k := kubeclient.Get(ctx)
230228

231229
return func(ctx context.Context, b psbinding.Bindable) (context.Context, error) {
232-
return v1.WithKubeClient(v1.WithTrustBundleConfigMapLister(v1.WithURIResolver(ctx, r), lister), k), nil
230+
return v1.WithTrustBundleConfigMapLister(v1.WithURIResolver(ctx, r), lister), nil
233231
}
234232
}
235233

0 commit comments

Comments
 (0)