Skip to content

Commit 6fdacf0

Browse files
Add plugin and key-cache for ExternalJWTSigner integration
1 parent 4c487b0 commit 6fdacf0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+4536
-139
lines changed

cmd/kube-apiserver/app/options/completion.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package options
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"net"
2223
"strings"
@@ -45,27 +46,27 @@ type CompletedOptions struct {
4546

4647
// Complete set default ServerRunOptions.
4748
// Should be called after kube-apiserver flags parsed.
48-
func (opts *ServerRunOptions) Complete() (CompletedOptions, error) {
49-
if opts == nil {
49+
func (s *ServerRunOptions) Complete(ctx context.Context) (CompletedOptions, error) {
50+
if s == nil {
5051
return CompletedOptions{completedOptions: &completedOptions{}}, nil
5152
}
5253

53-
// process opts.ServiceClusterIPRange from list to Primary and Secondary
54+
// process s.ServiceClusterIPRange from list to Primary and Secondary
5455
// we process secondary only if provided by user
55-
apiServerServiceIP, primaryServiceIPRange, secondaryServiceIPRange, err := getServiceIPAndRanges(opts.ServiceClusterIPRanges)
56+
apiServerServiceIP, primaryServiceIPRange, secondaryServiceIPRange, err := getServiceIPAndRanges(s.ServiceClusterIPRanges)
5657
if err != nil {
5758
return CompletedOptions{}, err
5859
}
59-
controlplane, err := opts.Options.Complete([]string{"kubernetes.default.svc", "kubernetes.default", "kubernetes"}, []net.IP{apiServerServiceIP})
60+
controlplane, err := s.Options.Complete(ctx, []string{"kubernetes.default.svc", "kubernetes.default", "kubernetes"}, []net.IP{apiServerServiceIP})
6061
if err != nil {
6162
return CompletedOptions{}, err
6263
}
6364

6465
completed := completedOptions{
6566
CompletedOptions: controlplane,
66-
CloudProvider: opts.CloudProvider,
67+
CloudProvider: s.CloudProvider,
6768

68-
Extra: opts.Extra,
69+
Extra: s.Extra,
6970
}
7071

7172
completed.PrimaryServiceClusterIPRange = primaryServiceIPRange

cmd/kube-apiserver/app/server.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ func NewAPIServerCommand() *cobra.Command {
6767
_, featureGate := featuregate.DefaultComponentGlobalsRegistry.ComponentGlobalsOrRegister(
6868
featuregate.DefaultKubeComponent, utilversion.DefaultBuildEffectiveVersion(), utilfeature.DefaultMutableFeatureGate)
6969
s := options.NewServerRunOptions()
70+
ctx := genericapiserver.SetupSignalContext()
7071

7172
cmd := &cobra.Command{
7273
Use: "kube-apiserver",
@@ -97,7 +98,7 @@ cluster's shared state through which all other components interact.`,
9798
cliflag.PrintFlags(fs)
9899

99100
// set default options
100-
completedOptions, err := s.Complete()
101+
completedOptions, err := s.Complete(ctx)
101102
if err != nil {
102103
return err
103104
}
@@ -108,7 +109,7 @@ cluster's shared state through which all other components interact.`,
108109
}
109110
// add feature enablement metrics
110111
featureGate.AddMetrics()
111-
return Run(cmd.Context(), completedOptions)
112+
return Run(ctx, completedOptions)
112113
},
113114
Args: func(cmd *cobra.Command, args []string) error {
114115
for _, arg := range args {
@@ -119,7 +120,7 @@ cluster's shared state through which all other components interact.`,
119120
return nil
120121
},
121122
}
122-
cmd.SetContext(genericapiserver.SetupSignalContext())
123+
cmd.SetContext(ctx)
123124

124125
fs := cmd.Flags()
125126
namedFlagSets := s.Flags()

cmd/kube-apiserver/app/testing/testserver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ func StartTestServer(t ktesting.TB, instanceOptions *TestServerInstanceOptions,
390390
s.Authentication.ServiceAccounts.Issuers = []string{"https://foo.bar.example.com"}
391391
s.Authentication.ServiceAccounts.KeyFiles = []string{saSigningKeyFile.Name()}
392392

393-
completedOptions, err := s.Complete()
393+
completedOptions, err := s.Complete(tCtx)
394394
if err != nil {
395395
return result, fmt.Errorf("failed to set default ServerRunOptions: %v", err)
396396
}

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ require (
103103
k8s.io/csi-translation-lib v0.0.0
104104
k8s.io/dynamic-resource-allocation v0.0.0
105105
k8s.io/endpointslice v0.0.0
106+
k8s.io/externaljwt v0.0.0
106107
k8s.io/klog/v2 v2.130.1
107108
k8s.io/kms v0.0.0
108109
k8s.io/kube-aggregator v0.0.0
@@ -239,6 +240,7 @@ replace (
239240
k8s.io/csi-translation-lib => ./staging/src/k8s.io/csi-translation-lib
240241
k8s.io/dynamic-resource-allocation => ./staging/src/k8s.io/dynamic-resource-allocation
241242
k8s.io/endpointslice => ./staging/src/k8s.io/endpointslice
243+
k8s.io/externaljwt => ./staging/src/k8s.io/externaljwt
242244
k8s.io/kms => ./staging/src/k8s.io/kms
243245
k8s.io/kube-aggregator => ./staging/src/k8s.io/kube-aggregator
244246
k8s.io/kube-controller-manager => ./staging/src/k8s.io/kube-controller-manager

go.work

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use (
2323
./staging/src/k8s.io/csi-translation-lib
2424
./staging/src/k8s.io/dynamic-resource-allocation
2525
./staging/src/k8s.io/endpointslice
26+
./staging/src/k8s.io/externaljwt
2627
./staging/src/k8s.io/kms
2728
./staging/src/k8s.io/kube-aggregator
2829
./staging/src/k8s.io/kube-controller-manager

hack/unwanted-dependencies.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
"k8s.io/client-go",
112112
"k8s.io/code-generator",
113113
"k8s.io/cri-api",
114+
"k8s.io/externaljwt",
114115
"k8s.io/kms",
115116
"k8s.io/kube-aggregator",
116117
"k8s.io/kubelet",

hack/update-codegen.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,8 @@ function codegen::protobindings() {
785785

786786
"staging/src/k8s.io/kubelet/pkg/apis/pluginregistration"
787787
"pkg/kubelet/pluginmanager/pluginwatcher/example_plugin_apis"
788+
789+
"staging/src/k8s.io/externaljwt/apis"
788790
)
789791

790792
kube::log::status "Generating protobuf bindings for ${#apis[@]} targets"

pkg/apis/authentication/validation/validation.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,18 @@ limitations under the License.
1919
package validation
2020

2121
import (
22-
"time"
23-
2422
"k8s.io/apimachinery/pkg/util/validation/field"
2523
"k8s.io/kubernetes/pkg/apis/authentication"
2624
)
2725

26+
const MinTokenAgeSec = 10 * 60 // 10 minutes
27+
2828
// ValidateTokenRequest validates a TokenRequest.
2929
func ValidateTokenRequest(tr *authentication.TokenRequest) field.ErrorList {
3030
allErrs := field.ErrorList{}
3131
specPath := field.NewPath("spec")
3232

33-
const min = 10 * time.Minute
34-
if tr.Spec.ExpirationSeconds < int64(min.Seconds()) {
33+
if tr.Spec.ExpirationSeconds < MinTokenAgeSec {
3534
allErrs = append(allErrs, field.Invalid(specPath.Child("expirationSeconds"), tr.Spec.ExpirationSeconds, "may not specify a duration less than 10 minutes"))
3635
}
3736
if tr.Spec.ExpirationSeconds > 1<<32 {

pkg/controller/serviceaccount/tokens_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,9 @@ func (e *TokensController) generateTokenIfNeeded(logger klog.Logger, serviceAcco
409409

410410
// Generate the token
411411
if needsToken {
412-
token, err := e.token.GenerateToken(serviceaccount.LegacyClaims(*serviceAccount, *liveSecret))
412+
c, pc := serviceaccount.LegacyClaims(*serviceAccount, *liveSecret)
413+
// TODO: need to plumb context if using external signer ever becomes a posibility.
414+
token, err := e.token.GenerateToken(context.TODO(), c, pc)
413415
if err != nil {
414416
return false, err
415417
}

pkg/controller/serviceaccount/tokens_controller_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package serviceaccount
1818

1919
import (
20+
"context"
2021
"reflect"
2122
"testing"
2223
"time"
@@ -40,7 +41,7 @@ type testGenerator struct {
4041
Err error
4142
}
4243

43-
func (t *testGenerator) GenerateToken(sc *jwt.Claims, pc interface{}) (string, error) {
44+
func (t *testGenerator) GenerateToken(ctx context.Context, sc *jwt.Claims, pc interface{}) (string, error) {
4445
return t.Token, t.Err
4546
}
4647

0 commit comments

Comments
 (0)