Skip to content

Commit 299d025

Browse files
Use in secret rotation
1 parent ccd4672 commit 299d025

File tree

7 files changed

+19
-62
lines changed

7 files changed

+19
-62
lines changed

cmd/secrets-store-csi-driver/main.go

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ import (
2727

2828
secretsstorev1 "sigs.k8s.io/secrets-store-csi-driver/apis/v1"
2929
"sigs.k8s.io/secrets-store-csi-driver/controllers"
30-
"sigs.k8s.io/secrets-store-csi-driver/pkg/k8s"
3130
"sigs.k8s.io/secrets-store-csi-driver/pkg/metrics"
32-
"sigs.k8s.io/secrets-store-csi-driver/pkg/rotation"
3331
secretsstore "sigs.k8s.io/secrets-store-csi-driver/pkg/secrets-store"
3432
"sigs.k8s.io/secrets-store-csi-driver/pkg/version"
3533

@@ -39,7 +37,6 @@ import (
3937
"k8s.io/apimachinery/pkg/fields"
4038
"k8s.io/apimachinery/pkg/labels"
4139
"k8s.io/apimachinery/pkg/runtime"
42-
"k8s.io/client-go/kubernetes"
4340
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
4441
"k8s.io/client-go/rest"
4542
"k8s.io/klog/v2"
@@ -60,8 +57,8 @@ var (
6057
// https://github.com/kubernetes-sigs/secrets-store-csi-driver/issues/823.
6158
additionalProviderPaths = flag.String("additional-provider-volume-paths", "/etc/kubernetes/secrets-store-csi-providers", "Comma separated list of additional paths to communicate with providers")
6259
metricsAddr = flag.String("metrics-addr", ":8095", "The address the metric endpoint binds to")
63-
enableSecretRotation = flag.Bool("enable-secret-rotation", false, "Enable secret rotation feature [alpha]")
64-
rotationPollInterval = flag.Duration("rotation-poll-interval", 2*time.Minute, "Secret rotation poll interval duration")
60+
enableSecretRotation = flag.Bool("enable-secret-rotation", false, "[Deprecated] Enable secret rotation feature [alpha]")
61+
_ = flag.Duration("rotation-poll-interval", 2*time.Minute, "[Deprecated] Secret rotation poll interval duration")
6562
enableProfile = flag.Bool("enable-pprof", false, "enable pprof profiling")
6663
profilePort = flag.Int("pprof-port", 6065, "port for pprof profiling")
6764
maxCallRecvMsgSize = flag.Int("max-call-recv-msg-size", 1024*1024*4, "maximum size in bytes of gRPC response from plugins")
@@ -203,26 +200,12 @@ func mainErr() error {
203200
reconciler.RunPatcher(ctx)
204201
}()
205202

206-
// token request client
207-
kubeClient := kubernetes.NewForConfigOrDie(cfg)
208-
tokenClient := k8s.NewTokenClient(kubeClient, *driverName, 10*time.Minute)
209-
210-
if err = tokenClient.Run(ctx.Done()); err != nil {
211-
klog.ErrorS(err, "failed to run token client")
212-
return err
213-
}
214-
215203
// Secret rotation
216204
if *enableSecretRotation {
217-
rec, err := rotation.NewReconciler(*driverName, mgr.GetCache(), scheme, *rotationPollInterval, providerClients, tokenClient)
218-
if err != nil {
219-
klog.ErrorS(err, "failed to initialize rotation reconciler")
220-
return err
221-
}
222-
go rec.Run(ctx.Done())
205+
klog.Warning("--enable-secret-rotation and --rotation-poll-interval are deprecated, use RequiresRepublish instead.")
223206
}
224207

225-
driver := secretsstore.NewSecretsStoreDriver(*driverName, *nodeID, *endpoint, providerClients, mgr.GetClient(), mgr.GetAPIReader(), tokenClient)
208+
driver := secretsstore.NewSecretsStoreDriver(*driverName, *nodeID, *endpoint, providerClients, mgr.GetClient(), mgr.GetAPIReader())
226209
driver.Run(ctx)
227210

228211
return nil

deploy/csidriver.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ spec:
77
attachRequired: false
88
volumeLifecycleModes:
99
- Ephemeral
10+
requiresRepublish: true

pkg/rotation/reconciler.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ func NewReconciler(driverName string,
9393
client client.Reader,
9494
s *runtime.Scheme,
9595
rotationPollInterval time.Duration,
96-
providerClients *secretsstore.PluginClientBuilder,
97-
tokenClient *k8s.TokenClient) (*Reconciler, error) {
96+
providerClients *secretsstore.PluginClientBuilder) (*Reconciler, error) {
9897
config, err := buildConfig()
9998
if err != nil {
10099
return nil, err
@@ -105,7 +104,7 @@ func NewReconciler(driverName string,
105104
eventBroadcaster := record.NewBroadcaster()
106105
eventBroadcaster.StartRecordingToSink(&clientcorev1.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")})
107106
recorder := eventBroadcaster.NewRecorder(s, corev1.EventSource{Component: "csi-secrets-store-rotation"})
108-
secretStore, err := k8s.New(kubeClient, 5*time.Second)
107+
secretStore, err := k8s.New(kubeClient, 5*time.Minute)
109108
if err != nil {
110109
return nil, err
111110
}
@@ -125,7 +124,6 @@ func NewReconciler(driverName string,
125124
// cache store Pod,
126125
cache: client,
127126
secretStore: secretStore,
128-
tokenClient: tokenClient,
129127

130128
driverName: driverName,
131129
}, nil

pkg/secrets-store/nodeserver.go

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,10 @@ import (
2626
"time"
2727

2828
internalerrors "sigs.k8s.io/secrets-store-csi-driver/pkg/errors"
29-
"sigs.k8s.io/secrets-store-csi-driver/pkg/k8s"
30-
"sigs.k8s.io/secrets-store-csi-driver/pkg/util/fileutil"
3129

3230
"github.com/container-storage-interface/spec/lib/go/csi"
3331
"google.golang.org/grpc/codes"
3432
"google.golang.org/grpc/status"
35-
"k8s.io/apimachinery/pkg/types"
3633
"k8s.io/klog/v2"
3734
mount "k8s.io/mount-utils"
3835
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -47,7 +44,6 @@ type nodeServer struct {
4744
// This should be used sparingly and only when the client does not fit the use case.
4845
reader client.Reader
4946
providerClients *PluginClientBuilder
50-
tokenClient *k8s.TokenClient
5147
}
5248

5349
const (
@@ -73,7 +69,7 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
7369
startTime := time.Now()
7470
var parameters map[string]string
7571
var providerName string
76-
var podName, podNamespace, podUID, serviceAccountName string
72+
var podName, podNamespace, podUID string
7773
var targetPath string
7874
var mounted bool
7975
errorReason := internalerrors.FailedToMount
@@ -120,7 +116,6 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
120116
podName = attrib[CSIPodName]
121117
podNamespace = attrib[CSIPodNamespace]
122118
podUID = attrib[CSIPodUID]
123-
serviceAccountName = attrib[CSIPodServiceAccountName]
124119

125120
mounted, err = ns.ensureMountPoint(targetPath)
126121
if err != nil {
@@ -135,10 +130,10 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
135130
return nil, status.Errorf(codes.Internal, "failed to check if target path %s is mount point, err: %v", targetPath, err)
136131
}
137132
}
138-
if mounted {
139-
klog.InfoS("target path is already mounted", "targetPath", targetPath, "pod", klog.ObjectRef{Namespace: podNamespace, Name: podName})
140-
return &csi.NodePublishVolumeResponse{}, nil
141-
}
133+
// if mounted {
134+
// klog.InfoS("target path is already mounted", "targetPath", targetPath, "pod", klog.ObjectRef{Namespace: podNamespace, Name: podName})
135+
// return &csi.NodePublishVolumeResponse{}, nil
136+
// }
142137

143138
klog.V(2).InfoS("node publish volume", "target", targetPath, "volumeId", volumeID, "mount flags", mountFlags)
144139

@@ -190,14 +185,8 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
190185
// and send it to the provider in the parameters.
191186
if parameters[CSIPodServiceAccountTokens] == "" {
192187
// Inject pod service account token into volume attributes
193-
serviceAccountTokenAttrs, err := ns.tokenClient.PodServiceAccountTokenAttrs(podNamespace, podName, serviceAccountName, types.UID(podUID))
194-
if err != nil {
195-
klog.ErrorS(err, "failed to get service account token attrs", "pod", klog.ObjectRef{Namespace: podNamespace, Name: podName})
196-
return nil, err
197-
}
198-
for k, v := range serviceAccountTokenAttrs {
199-
parameters[k] = v
200-
}
188+
klog.Error("csi.storage.k8s.io/serviceAccount.tokens is not populated, set RequiresRepublish")
189+
201190
}
202191

203192
// ensure it's read-only
@@ -296,13 +285,6 @@ func (ns *nodeServer) NodeUnpublishVolume(ctx context.Context, req *csi.NodeUnpu
296285
return nil, status.Error(codes.Internal, err.Error())
297286
}
298287

299-
podUID := fileutil.GetPodUIDFromTargetPath(targetPath)
300-
if podUID != "" {
301-
// delete service account token from cache as the pod is deleted
302-
// to ensure the cache isn't growing indefinitely
303-
ns.tokenClient.DeleteServiceAccountToken(types.UID(podUID))
304-
}
305-
306288
klog.InfoS("node unpublish volume complete", "targetPath", targetPath, "time", time.Since(startTime))
307289
return &csi.NodeUnpublishVolumeResponse{}, nil
308290
}

pkg/secrets-store/nodeserver_test.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ import (
2121
"os"
2222
"path/filepath"
2323
"testing"
24-
"time"
2524

2625
secretsstorev1 "sigs.k8s.io/secrets-store-csi-driver/apis/v1"
27-
"sigs.k8s.io/secrets-store-csi-driver/pkg/k8s"
2826
"sigs.k8s.io/secrets-store-csi-driver/pkg/secrets-store/mocks"
2927
providerfake "sigs.k8s.io/secrets-store-csi-driver/provider/fake"
3028

@@ -33,7 +31,6 @@ import (
3331
"google.golang.org/grpc/status"
3432
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3533
"k8s.io/apimachinery/pkg/runtime/schema"
36-
fakeclient "k8s.io/client-go/kubernetes/fake"
3734
"k8s.io/client-go/kubernetes/scheme"
3835
mount "k8s.io/mount-utils"
3936
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -56,7 +53,7 @@ func testNodeServer(t *testing.T, client client.Client, reporter StatsReporter)
5653
t.Cleanup(server.Stop)
5754

5855
providerClients := NewPluginClientBuilder([]string{socketPath})
59-
return newNodeServer("testnode", mount.NewFakeMounter([]mount.MountPoint{}), providerClients, client, client, reporter, k8s.NewTokenClient(fakeclient.NewSimpleClientset(), "test-driver", 1*time.Second))
56+
return newNodeServer("testnode", mount.NewFakeMounter([]mount.MountPoint{}), providerClients, client, client, reporter)
6057
}
6158

6259
func TestNodePublishVolume_Errors(t *testing.T) {

pkg/secrets-store/secrets-store.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"context"
2121
"os"
2222

23-
"sigs.k8s.io/secrets-store-csi-driver/pkg/k8s"
2423
"sigs.k8s.io/secrets-store-csi-driver/pkg/version"
2524

2625
"k8s.io/klog/v2"
@@ -41,16 +40,15 @@ type SecretsStore struct {
4140
func NewSecretsStoreDriver(driverName, nodeID, endpoint string,
4241
providerClients *PluginClientBuilder,
4342
client client.Client,
44-
reader client.Reader,
45-
tokenClient *k8s.TokenClient) *SecretsStore {
43+
reader client.Reader) *SecretsStore {
4644
klog.InfoS("Initializing Secrets Store CSI Driver", "driver", driverName, "version", version.BuildVersion, "buildTime", version.BuildTime)
4745

4846
sr, err := NewStatsReporter()
4947
if err != nil {
5048
klog.ErrorS(err, "failed to initialize stats reporter")
5149
os.Exit(1)
5250
}
53-
ns, err := newNodeServer(nodeID, mount.New(""), providerClients, client, reader, sr, tokenClient)
51+
ns, err := newNodeServer(nodeID, mount.New(""), providerClients, client, reader, sr)
5452
if err != nil {
5553
klog.ErrorS(err, "failed to initialize node server")
5654
os.Exit(1)
@@ -69,16 +67,14 @@ func newNodeServer(nodeID string,
6967
providerClients *PluginClientBuilder,
7068
client client.Client,
7169
reader client.Reader,
72-
statsReporter StatsReporter,
73-
tokenClient *k8s.TokenClient) (*nodeServer, error) {
70+
statsReporter StatsReporter) (*nodeServer, error) {
7471
return &nodeServer{
7572
mounter: mounter,
7673
reporter: statsReporter,
7774
nodeID: nodeID,
7875
client: client,
7976
reader: reader,
8077
providerClients: providerClients,
81-
tokenClient: tokenClient,
8278
}, nil
8379
}
8480

test/sanity/sanity_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const (
3636
)
3737

3838
func TestSanity(t *testing.T) {
39-
driver := secretsstore.NewSecretsStoreDriver("secrets-store.csi.k8s.io", "somenodeid", endpoint, nil, nil, nil, nil)
39+
driver := secretsstore.NewSecretsStoreDriver("secrets-store.csi.k8s.io", "somenodeid", endpoint, nil, nil, nil)
4040
go func() {
4141
driver.Run(context.Background())
4242
}()

0 commit comments

Comments
 (0)