@@ -21,31 +21,24 @@ package app
21
21
22
22
import (
23
23
"context"
24
- "crypto/tls"
25
24
"fmt"
26
- "net/http"
27
25
"net/url"
28
26
"os"
29
27
30
28
"github.com/spf13/cobra"
31
29
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
32
- extensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver"
33
- "k8s.io/apimachinery/pkg/runtime"
34
30
utilerrors "k8s.io/apimachinery/pkg/util/errors"
35
- utilnet "k8s.io/apimachinery/pkg/util/net"
36
31
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
37
32
"k8s.io/apiserver/pkg/admission"
38
33
genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
39
34
genericapiserver "k8s.io/apiserver/pkg/server"
40
35
"k8s.io/apiserver/pkg/server/egressselector"
36
+ serverstorage "k8s.io/apiserver/pkg/server/storage"
41
37
utilfeature "k8s.io/apiserver/pkg/util/feature"
42
38
"k8s.io/apiserver/pkg/util/notfoundhandler"
43
39
"k8s.io/apiserver/pkg/util/webhook"
44
- "k8s.io/client-go/dynamic"
45
40
clientgoinformers "k8s.io/client-go/informers"
46
- clientset "k8s.io/client-go/kubernetes"
47
41
"k8s.io/client-go/rest"
48
- "k8s.io/client-go/util/keyutil"
49
42
cliflag "k8s.io/component-base/cli/flag"
50
43
"k8s.io/component-base/cli/globalflag"
51
44
"k8s.io/component-base/logs"
@@ -56,19 +49,12 @@ import (
56
49
"k8s.io/component-base/version/verflag"
57
50
"k8s.io/klog/v2"
58
51
aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver"
59
- aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme"
60
- controlplaneadmission "k8s.io/kubernetes/pkg/controlplane/apiserver/admission"
61
-
62
52
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
63
- "k8s.io/kubernetes/pkg/api/legacyscheme"
64
53
"k8s.io/kubernetes/pkg/capabilities"
65
54
"k8s.io/kubernetes/pkg/controlplane"
66
55
controlplaneapiserver "k8s.io/kubernetes/pkg/controlplane/apiserver"
67
56
"k8s.io/kubernetes/pkg/controlplane/reconcilers"
68
- "k8s.io/kubernetes/pkg/features"
69
- generatedopenapi "k8s.io/kubernetes/pkg/generated/openapi"
70
57
kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
71
- "k8s.io/kubernetes/pkg/serviceaccount"
72
58
)
73
59
74
60
func init () {
@@ -196,81 +182,38 @@ func CreateServerChain(config CompletedConfig) (*aggregatorapiserver.APIAggregat
196
182
return aggregatorServer , nil
197
183
}
198
184
199
- // CreateProxyTransport creates the dialer infrastructure to connect to the nodes.
200
- func CreateProxyTransport () * http.Transport {
201
- var proxyDialerFn utilnet.DialFunc
202
- // Proxying to pods and services is IP-based... don't expect to be able to verify the hostname
203
- proxyTLSClientConfig := & tls.Config {InsecureSkipVerify : true }
204
- proxyTransport := utilnet .SetTransportDefaults (& http.Transport {
205
- DialContext : proxyDialerFn ,
206
- TLSClientConfig : proxyTLSClientConfig ,
207
- })
208
- return proxyTransport
209
- }
210
-
211
185
// CreateKubeAPIServerConfig creates all the resources for running the API server, but runs none of them
212
- func CreateKubeAPIServerConfig (opts options.CompletedOptions ) (
186
+ func CreateKubeAPIServerConfig (
187
+ opts options.CompletedOptions ,
188
+ genericConfig * genericapiserver.Config ,
189
+ versionedInformers clientgoinformers.SharedInformerFactory ,
190
+ storageFactory * serverstorage.DefaultStorageFactory ,
191
+ ) (
213
192
* controlplane.Config ,
214
193
aggregatorapiserver.ServiceResolver ,
215
194
[]admission.PluginInitializer ,
216
195
error ,
217
196
) {
218
- proxyTransport := CreateProxyTransport ()
219
-
220
- genericConfig , versionedInformers , storageFactory , err := controlplaneapiserver .BuildGenericConfig (
221
- opts .CompletedOptions ,
222
- []* runtime.Scheme {legacyscheme .Scheme , extensionsapiserver .Scheme , aggregatorscheme .Scheme },
223
- controlplane .DefaultAPIResourceConfigSource (),
224
- generatedopenapi .GetOpenAPIDefinitions ,
225
- )
226
- if err != nil {
227
- return nil , nil , nil , fmt .Errorf ("failed to create generic config: %w" , err )
228
- }
229
-
230
- // generic controlplane admission initializers
231
- controlPlaneAdmissionConfig := & controlplaneadmission.Config {
232
- ExternalInformers : versionedInformers ,
233
- LoopbackClientConfig : genericConfig .LoopbackClientConfig ,
234
- }
235
- serviceResolver := buildServiceResolver (opts .EnableAggregatorRouting , genericConfig .LoopbackClientConfig .Host , versionedInformers )
236
- pluginInitializers , err := controlPlaneAdmissionConfig .New (proxyTransport , genericConfig .EgressSelector , serviceResolver , genericConfig .TracerProvider )
237
- if err != nil {
238
- return nil , nil , nil , fmt .Errorf ("failed to create admission plugin initializer: %w" , err )
239
- }
197
+ // global stuff
198
+ capabilities .Setup (opts .AllowPrivileged , opts .MaxConnectionBytesPerSec )
240
199
241
- // additional kube admission initializers
200
+ // additional admission initializers
242
201
kubeAdmissionConfig := & kubeapiserveradmission.Config {
243
202
CloudConfigFile : opts .CloudProvider .CloudConfigFile ,
244
203
}
245
204
kubeInitializers , err := kubeAdmissionConfig .New ()
246
205
if err != nil {
247
206
return nil , nil , nil , fmt .Errorf ("failed to create admission plugin initializer: %w" , err )
248
207
}
249
- pluginInitializers = append (pluginInitializers , kubeInitializers ... )
250
208
251
- capabilities .Setup (opts .AllowPrivileged , opts .MaxConnectionBytesPerSec )
252
-
253
- opts .Metrics .Apply ()
254
- serviceaccount .RegisterMetrics ()
209
+ serviceResolver := buildServiceResolver (opts .EnableAggregatorRouting , genericConfig .LoopbackClientConfig .Host , versionedInformers )
210
+ controlplaneConfig , admissionInitializers , err := controlplaneapiserver .CreateConfig (opts .CompletedOptions , genericConfig , versionedInformers , storageFactory , serviceResolver , kubeInitializers )
211
+ if err != nil {
212
+ return nil , nil , nil , err
213
+ }
255
214
256
215
config := & controlplane.Config {
257
- ControlPlane : controlplaneapiserver.Config {
258
- Generic : genericConfig ,
259
- Extra : controlplaneapiserver.Extra {
260
- APIResourceConfigSource : storageFactory .APIResourceConfigSource ,
261
- StorageFactory : storageFactory ,
262
- EventTTL : opts .EventTTL ,
263
- EnableLogsSupport : opts .EnableLogsHandler ,
264
- ProxyTransport : proxyTransport ,
265
- SystemNamespaces : opts .SystemNamespaces ,
266
-
267
- ServiceAccountIssuer : opts .ServiceAccountIssuer ,
268
- ServiceAccountMaxExpiration : opts .ServiceAccountTokenMaxExpiration ,
269
- ExtendExpiration : opts .Authentication .ServiceAccounts .ExtendExpiration ,
270
-
271
- VersionedInformers : versionedInformers ,
272
- },
273
- },
216
+ ControlPlane : * controlplaneConfig ,
274
217
Extra : controlplane.Extra {
275
218
KubeletClientConfig : opts .KubeletConfig ,
276
219
@@ -288,59 +231,6 @@ func CreateKubeAPIServerConfig(opts options.CompletedOptions) (
288
231
},
289
232
}
290
233
291
- if utilfeature .DefaultFeatureGate .Enabled (features .UnknownVersionInteroperabilityProxy ) {
292
- config .ControlPlane .PeerEndpointLeaseReconciler , err = controlplaneapiserver .CreatePeerEndpointLeaseReconciler (* genericConfig , storageFactory )
293
- if err != nil {
294
- return nil , nil , nil , err
295
- }
296
- // build peer proxy config only if peer ca file exists
297
- if opts .PeerCAFile != "" {
298
- config .ControlPlane .PeerProxy , err = controlplaneapiserver .BuildPeerProxy (versionedInformers , genericConfig .StorageVersionManager , opts .ProxyClientCertFile ,
299
- opts .ProxyClientKeyFile , opts .PeerCAFile , opts .PeerAdvertiseAddress , genericConfig .APIServerID , config .ControlPlane .Extra .PeerEndpointLeaseReconciler , config .ControlPlane .Generic .Serializer )
300
- if err != nil {
301
- return nil , nil , nil , err
302
- }
303
- }
304
- }
305
-
306
- clientCAProvider , err := opts .Authentication .ClientCert .GetClientCAContentProvider ()
307
- if err != nil {
308
- return nil , nil , nil , err
309
- }
310
- config .ControlPlane .ClusterAuthenticationInfo .ClientCA = clientCAProvider
311
-
312
- requestHeaderConfig , err := opts .Authentication .RequestHeader .ToAuthenticationRequestHeaderConfig ()
313
- if err != nil {
314
- return nil , nil , nil , err
315
- }
316
- if requestHeaderConfig != nil {
317
- config .ControlPlane .ClusterAuthenticationInfo .RequestHeaderCA = requestHeaderConfig .CAContentProvider
318
- config .ControlPlane .ClusterAuthenticationInfo .RequestHeaderAllowedNames = requestHeaderConfig .AllowedClientNames
319
- config .ControlPlane .ClusterAuthenticationInfo .RequestHeaderExtraHeaderPrefixes = requestHeaderConfig .ExtraHeaderPrefixes
320
- config .ControlPlane .ClusterAuthenticationInfo .RequestHeaderGroupHeaders = requestHeaderConfig .GroupHeaders
321
- config .ControlPlane .ClusterAuthenticationInfo .RequestHeaderUsernameHeaders = requestHeaderConfig .UsernameHeaders
322
- }
323
-
324
- // setup admission
325
- clientgoExternalClient , err := clientset .NewForConfig (genericConfig .LoopbackClientConfig )
326
- if err != nil {
327
- return nil , nil , nil , fmt .Errorf ("failed to create real client-go external client: %w" , err )
328
- }
329
- dynamicExternalClient , err := dynamic .NewForConfig (genericConfig .LoopbackClientConfig )
330
- if err != nil {
331
- return nil , nil , nil , fmt .Errorf ("failed to create real dynamic external client: %w" , err )
332
- }
333
- err = opts .Admission .ApplyTo (
334
- genericConfig ,
335
- versionedInformers ,
336
- clientgoExternalClient ,
337
- dynamicExternalClient ,
338
- utilfeature .DefaultFeatureGate ,
339
- pluginInitializers ... )
340
- if err != nil {
341
- return nil , nil , nil , fmt .Errorf ("failed to apply admission: %w" , err )
342
- }
343
-
344
234
if config .ControlPlane .Generic .EgressSelector != nil {
345
235
// Use the config.ControlPlane.Generic.EgressSelector lookup to find the dialer to connect to the kubelet
346
236
config .Extra .KubeletClientConfig .Lookup = config .ControlPlane .Generic .EgressSelector .Lookup
@@ -351,25 +241,12 @@ func CreateKubeAPIServerConfig(opts options.CompletedOptions) (
351
241
if err != nil {
352
242
return nil , nil , nil , err
353
243
}
354
- c := proxyTransport .Clone ()
244
+ c := config . ControlPlane . Extra . ProxyTransport .Clone ()
355
245
c .DialContext = dialer
356
246
config .ControlPlane .ProxyTransport = c
357
247
}
358
248
359
- // Load and set the public keys.
360
- var pubKeys []interface {}
361
- for _ , f := range opts .Authentication .ServiceAccounts .KeyFiles {
362
- keys , err := keyutil .PublicKeysFromFile (f )
363
- if err != nil {
364
- return nil , nil , nil , fmt .Errorf ("failed to parse key file %q: %v" , f , err )
365
- }
366
- pubKeys = append (pubKeys , keys ... )
367
- }
368
- config .ControlPlane .ServiceAccountIssuerURL = opts .Authentication .ServiceAccounts .Issuers [0 ]
369
- config .ControlPlane .ServiceAccountJWKSURI = opts .Authentication .ServiceAccounts .JWKSURI
370
- config .ControlPlane .ServiceAccountPublicKeys = pubKeys
371
-
372
- return config , serviceResolver , pluginInitializers , nil
249
+ return config , serviceResolver , admissionInitializers , nil
373
250
}
374
251
375
252
var testServiceResolver webhook.ServiceResolver
0 commit comments