k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/cmd/kube-apiserver/app/config.go (about) 1 /* 2 Copyright 2023 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package app 18 19 import ( 20 apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" 21 "k8s.io/apimachinery/pkg/runtime" 22 "k8s.io/apiserver/pkg/util/webhook" 23 aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" 24 aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" 25 26 "k8s.io/kubernetes/cmd/kube-apiserver/app/options" 27 "k8s.io/kubernetes/pkg/api/legacyscheme" 28 "k8s.io/kubernetes/pkg/controlplane" 29 controlplaneapiserver "k8s.io/kubernetes/pkg/controlplane/apiserver" 30 generatedopenapi "k8s.io/kubernetes/pkg/generated/openapi" 31 ) 32 33 type Config struct { 34 Options options.CompletedOptions 35 36 Aggregator *aggregatorapiserver.Config 37 KubeAPIs *controlplane.Config 38 ApiExtensions *apiextensionsapiserver.Config 39 40 ExtraConfig 41 } 42 43 type ExtraConfig struct { 44 } 45 46 type completedConfig struct { 47 Options options.CompletedOptions 48 49 Aggregator aggregatorapiserver.CompletedConfig 50 KubeAPIs controlplane.CompletedConfig 51 ApiExtensions apiextensionsapiserver.CompletedConfig 52 53 ExtraConfig 54 } 55 56 type CompletedConfig struct { 57 // Embed a private pointer that cannot be instantiated outside of this package. 58 *completedConfig 59 } 60 61 func (c *Config) Complete() (CompletedConfig, error) { 62 return CompletedConfig{&completedConfig{ 63 Options: c.Options, 64 65 Aggregator: c.Aggregator.Complete(), 66 KubeAPIs: c.KubeAPIs.Complete(), 67 ApiExtensions: c.ApiExtensions.Complete(), 68 69 ExtraConfig: c.ExtraConfig, 70 }}, nil 71 } 72 73 // NewConfig creates all the resources for running kube-apiserver, but runs none of them. 74 func NewConfig(opts options.CompletedOptions) (*Config, error) { 75 c := &Config{ 76 Options: opts, 77 } 78 79 genericConfig, versionedInformers, storageFactory, err := controlplaneapiserver.BuildGenericConfig( 80 opts.CompletedOptions, 81 []*runtime.Scheme{legacyscheme.Scheme, apiextensionsapiserver.Scheme, aggregatorscheme.Scheme}, 82 controlplane.DefaultAPIResourceConfigSource(), 83 generatedopenapi.GetOpenAPIDefinitions, 84 ) 85 if err != nil { 86 return nil, err 87 } 88 89 kubeAPIs, serviceResolver, pluginInitializer, err := CreateKubeAPIServerConfig(opts, genericConfig, versionedInformers, storageFactory) 90 if err != nil { 91 return nil, err 92 } 93 c.KubeAPIs = kubeAPIs 94 95 apiExtensions, err := controlplaneapiserver.CreateAPIExtensionsConfig(*kubeAPIs.ControlPlane.Generic, kubeAPIs.ControlPlane.VersionedInformers, pluginInitializer, opts.CompletedOptions, opts.MasterCount, 96 serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(kubeAPIs.ControlPlane.ProxyTransport, kubeAPIs.ControlPlane.Generic.EgressSelector, kubeAPIs.ControlPlane.Generic.LoopbackClientConfig, kubeAPIs.ControlPlane.Generic.TracerProvider)) 97 if err != nil { 98 return nil, err 99 } 100 c.ApiExtensions = apiExtensions 101 102 aggregator, err := controlplaneapiserver.CreateAggregatorConfig(*kubeAPIs.ControlPlane.Generic, opts.CompletedOptions, kubeAPIs.ControlPlane.VersionedInformers, serviceResolver, kubeAPIs.ControlPlane.ProxyTransport, kubeAPIs.ControlPlane.Extra.PeerProxy, pluginInitializer) 103 if err != nil { 104 return nil, err 105 } 106 c.Aggregator = aggregator 107 108 return c, nil 109 }