Skip to content

Commit 413a29d

Browse files
[release-1.14] Watch only our own OIDC-related secrets (#8071)
Filter OIDC secrets Signed-off-by: Pierangelo Di Pilato <[email protected]> Co-authored-by: Pierangelo Di Pilato <[email protected]>
1 parent 5f92164 commit 413a29d

File tree

5 files changed

+53
-25
lines changed

5 files changed

+53
-25
lines changed

pkg/auth/serviceaccount.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ import (
2121
"fmt"
2222
"strings"
2323

24-
"knative.dev/eventing/pkg/apis/feature"
24+
"k8s.io/apimachinery/pkg/api/equality"
2525
duckv1 "knative.dev/pkg/apis/duck/v1"
2626
"knative.dev/pkg/kmeta"
2727
pkgreconciler "knative.dev/pkg/reconciler"
2828

29+
"knative.dev/eventing/pkg/apis/feature"
30+
2931
"go.uber.org/zap"
3032
v1 "k8s.io/api/core/v1"
3133
apierrs "k8s.io/apimachinery/pkg/api/errors"
@@ -38,10 +40,10 @@ import (
3840
)
3941

4042
const (
41-
//OIDCLabelKey is used to filter out all the informers that related to OIDC work
42-
OIDCLabelKey = "oidc"
43+
// OIDCLabelKey is used to filter out all the informers that related to OIDC work
44+
OIDCLabelKey = "eventing.knative.dev/oidc"
4345

44-
// OIDCTokenRoleLabelSelector is the label selector for the OIDC token creator role and rolebinding informers
46+
// OIDCLabelSelector is the label selector for the OIDC resources
4547
OIDCLabelSelector = OIDCLabelKey
4648
)
4749

@@ -87,28 +89,38 @@ func EnsureOIDCServiceAccountExistsForResource(ctx context.Context, serviceAccou
8789
saName := GetOIDCServiceAccountNameForResource(gvk, objectMeta)
8890
sa, err := serviceAccountLister.ServiceAccounts(objectMeta.Namespace).Get(saName)
8991

92+
expected := GetOIDCServiceAccountForResource(gvk, objectMeta)
93+
9094
// If the resource doesn't exist, we'll create it.
9195
if apierrs.IsNotFound(err) {
9296
logging.FromContext(ctx).Debugw("Creating OIDC service account", zap.Error(err))
9397

94-
expected := GetOIDCServiceAccountForResource(gvk, objectMeta)
95-
9698
_, err = kubeclient.CoreV1().ServiceAccounts(objectMeta.Namespace).Create(ctx, expected, metav1.CreateOptions{})
9799
if err != nil {
98-
return fmt.Errorf("could not create OIDC service account %s/%s for %s: %w", objectMeta.Name, objectMeta.Namespace, gvk.Kind, err)
100+
return fmt.Errorf("could not create OIDC service account %s/%s for %s: %w", objectMeta.Namespace, objectMeta.Name, gvk.Kind, err)
99101
}
100102

101103
return nil
102104
}
103-
104105
if err != nil {
105-
return fmt.Errorf("could not get OIDC service account %s/%s for %s: %w", objectMeta.Name, objectMeta.Namespace, gvk.Kind, err)
106+
return fmt.Errorf("could not get OIDC service account %s/%s for %s: %w", objectMeta.Namespace, objectMeta.Name, gvk.Kind, err)
106107
}
107-
108108
if !metav1.IsControlledBy(&sa.ObjectMeta, &objectMeta) {
109109
return fmt.Errorf("service account %s not owned by %s %s", sa.Name, gvk.Kind, objectMeta.Name)
110110
}
111111

112+
if !equality.Semantic.DeepDerivative(expected, sa) {
113+
expected.ResourceVersion = sa.ResourceVersion
114+
115+
_, err = kubeclient.CoreV1().ServiceAccounts(objectMeta.Namespace).Update(ctx, expected, metav1.UpdateOptions{})
116+
if err != nil {
117+
return fmt.Errorf("could not update OIDC service account %s/%s for %s: %w", objectMeta.Namespace, objectMeta.Name, gvk.Kind, err)
118+
}
119+
120+
return nil
121+
122+
}
123+
112124
return nil
113125
}
114126

pkg/reconciler/sinkbinding/controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import (
4444
"knative.dev/pkg/apis/duck"
4545
kubeclient "knative.dev/pkg/client/injection/kube/client"
4646
configmapinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/filtered"
47-
secretinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/secret"
47+
secretinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/secret/filtered"
4848
serviceaccountinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/serviceaccount/filtered"
4949
"knative.dev/pkg/configmap"
5050
"knative.dev/pkg/controller"
@@ -80,7 +80,7 @@ func NewController(
8080
psInformerFactory := podspecable.Get(ctx)
8181
namespaceInformer := namespace.Get(ctx)
8282
oidcServiceaccountInformer := serviceaccountinformer.Get(ctx, auth.OIDCLabelSelector)
83-
secretInformer := secretinformer.Get(ctx)
83+
secretInformer := secretinformer.Get(ctx, auth.OIDCLabelSelector)
8484
trustBundleConfigMapInformer := configmapinformer.Get(ctx, eventingtls.TrustBundleLabelSelector)
8585
trustBundleConfigMapLister := trustBundleConfigMapInformer.Lister()
8686

pkg/reconciler/sinkbinding/sinkbinding.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,9 @@ func (s *SinkBindingSubResourcesReconciler) renewOIDCTokenSecret(ctx context.Con
193193

194194
apiVersion := fmt.Sprintf("%s/%s", v1.SchemeGroupVersion.Group, v1.SchemeGroupVersion.Version)
195195
applyConfig := new(applyconfigurationcorev1.SecretApplyConfiguration).
196+
WithLabels(map[string]string{
197+
auth.OIDCLabelKey: "enabled",
198+
}).
196199
WithName(secretName).
197200
WithNamespace(sb.Namespace).
198201
WithType(corev1.SecretTypeOpaque).

vendor/knative.dev/pkg/client/injection/kube/informers/core/v1/secret/secret.go renamed to vendor/knative.dev/pkg/client/injection/kube/informers/core/v1/secret/filtered/secret.go

Lines changed: 25 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/modules.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1277,7 +1277,7 @@ knative.dev/pkg/client/injection/kube/informers/core/v1/endpoints/fake
12771277
knative.dev/pkg/client/injection/kube/informers/core/v1/namespace
12781278
knative.dev/pkg/client/injection/kube/informers/core/v1/namespace/fake
12791279
knative.dev/pkg/client/injection/kube/informers/core/v1/pod
1280-
knative.dev/pkg/client/injection/kube/informers/core/v1/secret
1280+
knative.dev/pkg/client/injection/kube/informers/core/v1/secret/filtered
12811281
knative.dev/pkg/client/injection/kube/informers/core/v1/service
12821282
knative.dev/pkg/client/injection/kube/informers/core/v1/service/fake
12831283
knative.dev/pkg/client/injection/kube/informers/core/v1/serviceaccount

0 commit comments

Comments
 (0)