mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-19 00:31:00 +00:00
apiserver: separate apiserver specific configs into ExtraConfig
This commit is contained in:
parent
eda3db550b
commit
7d09148ad7
@ -77,11 +77,13 @@ func createAggregatorConfig(kubeAPIServerConfig genericapiserver.Config, command
|
|||||||
|
|
||||||
aggregatorConfig := &aggregatorapiserver.Config{
|
aggregatorConfig := &aggregatorapiserver.Config{
|
||||||
GenericConfig: &genericConfig,
|
GenericConfig: &genericConfig,
|
||||||
|
ExtraConfig: aggregatorapiserver.ExtraConfig{
|
||||||
CoreKubeInformers: externalInformers,
|
CoreKubeInformers: externalInformers,
|
||||||
ProxyClientCert: certBytes,
|
ProxyClientCert: certBytes,
|
||||||
ProxyClientKey: keyBytes,
|
ProxyClientKey: keyBytes,
|
||||||
ServiceResolver: serviceResolver,
|
ServiceResolver: serviceResolver,
|
||||||
ProxyTransport: proxyTransport,
|
ProxyTransport: proxyTransport,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return aggregatorConfig, nil
|
return aggregatorConfig, nil
|
||||||
|
@ -41,11 +41,12 @@ func createAPIExtensionsConfig(kubeAPIServerConfig genericapiserver.Config, comm
|
|||||||
|
|
||||||
apiextensionsConfig := &apiextensionsapiserver.Config{
|
apiextensionsConfig := &apiextensionsapiserver.Config{
|
||||||
GenericConfig: &genericConfig,
|
GenericConfig: &genericConfig,
|
||||||
|
ExtraConfig: apiextensionsapiserver.ExtraConfig{
|
||||||
CRDRESTOptionsGetter: apiextensionscmd.NewCRDRESTOptionsGetter(etcdOptions),
|
CRDRESTOptionsGetter: apiextensionscmd.NewCRDRESTOptionsGetter(etcdOptions),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return apiextensionsConfig, nil
|
return apiextensionsConfig, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func createAPIExtensionsServer(apiextensionsConfig *apiextensionsapiserver.Config, delegateAPIServer genericapiserver.DelegationTarget) (*apiextensionsapiserver.CustomResourceDefinitions, error) {
|
func createAPIExtensionsServer(apiextensionsConfig *apiextensionsapiserver.Config, delegateAPIServer genericapiserver.DelegationTarget) (*apiextensionsapiserver.CustomResourceDefinitions, error) {
|
||||||
|
@ -172,8 +172,8 @@ func CreateServerChain(runOptions *options.ServerRunOptions, stopCh <-chan struc
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
aggregatorConfig.ProxyTransport = proxyTransport
|
aggregatorConfig.ExtraConfig.ProxyTransport = proxyTransport
|
||||||
aggregatorConfig.ServiceResolver = serviceResolver
|
aggregatorConfig.ExtraConfig.ServiceResolver = serviceResolver
|
||||||
aggregatorServer, err := createAggregatorServer(aggregatorConfig, kubeAPIServer.GenericAPIServer, apiExtensionsServer.Informers)
|
aggregatorServer, err := createAggregatorServer(aggregatorConfig, kubeAPIServer.GenericAPIServer, apiExtensionsServer.Informers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// we don't need special handling for innerStopCh because the aggregator server doesn't create any go routines
|
// we don't need special handling for innerStopCh because the aggregator server doesn't create any go routines
|
||||||
@ -312,7 +312,7 @@ func CreateKubeAPIServerConfig(s *options.ServerRunOptions, nodeTunneler tunnele
|
|||||||
|
|
||||||
config := &master.Config{
|
config := &master.Config{
|
||||||
GenericConfig: genericConfig,
|
GenericConfig: genericConfig,
|
||||||
|
ExtraConfig: master.ExtraConfig{
|
||||||
ClientCARegistrationHook: master.ClientCARegistrationHook{
|
ClientCARegistrationHook: master.ClientCARegistrationHook{
|
||||||
ClientCA: clientCA,
|
ClientCA: clientCA,
|
||||||
RequestHeaderUsernameHeaders: s.Authentication.RequestHeader.UsernameHeaders,
|
RequestHeaderUsernameHeaders: s.Authentication.RequestHeader.UsernameHeaders,
|
||||||
@ -341,11 +341,12 @@ func CreateKubeAPIServerConfig(s *options.ServerRunOptions, nodeTunneler tunnele
|
|||||||
KubernetesServiceNodePort: s.KubernetesServiceNodePort,
|
KubernetesServiceNodePort: s.KubernetesServiceNodePort,
|
||||||
|
|
||||||
MasterCount: s.MasterCount,
|
MasterCount: s.MasterCount,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if nodeTunneler != nil {
|
if nodeTunneler != nil {
|
||||||
// Use the nodeTunneler's dialer to connect to the kubelet
|
// Use the nodeTunneler's dialer to connect to the kubelet
|
||||||
config.KubeletClientConfig.Dial = nodeTunneler.Dial
|
config.ExtraConfig.KubeletClientConfig.Dial = nodeTunneler.Dial
|
||||||
}
|
}
|
||||||
|
|
||||||
return config, sharedInformers, versionedInformers, insecureServingOptions, serviceResolver, nil
|
return config, sharedInformers, versionedInformers, insecureServingOptions, serviceResolver, nil
|
||||||
|
@ -82,28 +82,28 @@ func (c *Config) NewBootstrapController(legacyRESTStorage corerest.LegacyRESTSto
|
|||||||
ServiceClient: serviceClient,
|
ServiceClient: serviceClient,
|
||||||
NamespaceClient: nsClient,
|
NamespaceClient: nsClient,
|
||||||
|
|
||||||
EndpointReconciler: c.EndpointReconcilerConfig.Reconciler,
|
EndpointReconciler: c.ExtraConfig.EndpointReconcilerConfig.Reconciler,
|
||||||
EndpointInterval: c.EndpointReconcilerConfig.Interval,
|
EndpointInterval: c.ExtraConfig.EndpointReconcilerConfig.Interval,
|
||||||
|
|
||||||
SystemNamespaces: []string{metav1.NamespaceSystem, metav1.NamespacePublic},
|
SystemNamespaces: []string{metav1.NamespaceSystem, metav1.NamespacePublic},
|
||||||
SystemNamespacesInterval: 1 * time.Minute,
|
SystemNamespacesInterval: 1 * time.Minute,
|
||||||
|
|
||||||
ServiceClusterIPRegistry: legacyRESTStorage.ServiceClusterIPAllocator,
|
ServiceClusterIPRegistry: legacyRESTStorage.ServiceClusterIPAllocator,
|
||||||
ServiceClusterIPRange: c.ServiceIPRange,
|
ServiceClusterIPRange: c.ExtraConfig.ServiceIPRange,
|
||||||
ServiceClusterIPInterval: 3 * time.Minute,
|
ServiceClusterIPInterval: 3 * time.Minute,
|
||||||
|
|
||||||
ServiceNodePortRegistry: legacyRESTStorage.ServiceNodePortAllocator,
|
ServiceNodePortRegistry: legacyRESTStorage.ServiceNodePortAllocator,
|
||||||
ServiceNodePortRange: c.ServiceNodePortRange,
|
ServiceNodePortRange: c.ExtraConfig.ServiceNodePortRange,
|
||||||
ServiceNodePortInterval: 3 * time.Minute,
|
ServiceNodePortInterval: 3 * time.Minute,
|
||||||
|
|
||||||
PublicIP: c.GenericConfig.PublicAddress,
|
PublicIP: c.GenericConfig.PublicAddress,
|
||||||
|
|
||||||
ServiceIP: c.APIServerServiceIP,
|
ServiceIP: c.ExtraConfig.APIServerServiceIP,
|
||||||
ServicePort: c.APIServerServicePort,
|
ServicePort: c.ExtraConfig.APIServerServicePort,
|
||||||
ExtraServicePorts: c.ExtraServicePorts,
|
ExtraServicePorts: c.ExtraConfig.ExtraServicePorts,
|
||||||
ExtraEndpointPorts: c.ExtraEndpointPorts,
|
ExtraEndpointPorts: c.ExtraConfig.ExtraEndpointPorts,
|
||||||
PublicServicePort: c.GenericConfig.ReadWritePort,
|
PublicServicePort: c.GenericConfig.ReadWritePort,
|
||||||
KubernetesServiceNodePort: c.KubernetesServiceNodePort,
|
KubernetesServiceNodePort: c.ExtraConfig.KubernetesServiceNodePort,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,9 +85,7 @@ const (
|
|||||||
DefaultEndpointReconcilerInterval = 10 * time.Second
|
DefaultEndpointReconcilerInterval = 10 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type ExtraConfig struct {
|
||||||
GenericConfig *genericapiserver.Config
|
|
||||||
|
|
||||||
ClientCARegistrationHook ClientCARegistrationHook
|
ClientCARegistrationHook ClientCARegistrationHook
|
||||||
|
|
||||||
APIResourceConfigSource serverstorage.APIResourceConfigSource
|
APIResourceConfigSource serverstorage.APIResourceConfigSource
|
||||||
@ -135,6 +133,11 @@ type Config struct {
|
|||||||
MasterCount int
|
MasterCount int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
GenericConfig *genericapiserver.Config
|
||||||
|
ExtraConfig ExtraConfig
|
||||||
|
}
|
||||||
|
|
||||||
// EndpointReconcilerConfig holds the endpoint reconciler and endpoint reconciliation interval to be
|
// EndpointReconcilerConfig holds the endpoint reconciler and endpoint reconciliation interval to be
|
||||||
// used by the master.
|
// used by the master.
|
||||||
type EndpointReconcilerConfig struct {
|
type EndpointReconcilerConfig struct {
|
||||||
@ -157,42 +160,42 @@ type completedConfig struct {
|
|||||||
func (c *Config) Complete() completedConfig {
|
func (c *Config) Complete() completedConfig {
|
||||||
c.GenericConfig.Complete()
|
c.GenericConfig.Complete()
|
||||||
|
|
||||||
serviceIPRange, apiServerServiceIP, err := DefaultServiceIPRange(c.ServiceIPRange)
|
serviceIPRange, apiServerServiceIP, err := DefaultServiceIPRange(c.ExtraConfig.ServiceIPRange)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("Error determining service IP ranges: %v", err)
|
glog.Fatalf("Error determining service IP ranges: %v", err)
|
||||||
}
|
}
|
||||||
if c.ServiceIPRange.IP == nil {
|
if c.ExtraConfig.ServiceIPRange.IP == nil {
|
||||||
c.ServiceIPRange = serviceIPRange
|
c.ExtraConfig.ServiceIPRange = serviceIPRange
|
||||||
}
|
}
|
||||||
if c.APIServerServiceIP == nil {
|
if c.ExtraConfig.APIServerServiceIP == nil {
|
||||||
c.APIServerServiceIP = apiServerServiceIP
|
c.ExtraConfig.APIServerServiceIP = apiServerServiceIP
|
||||||
}
|
}
|
||||||
|
|
||||||
discoveryAddresses := discovery.DefaultAddresses{DefaultAddress: c.GenericConfig.ExternalAddress}
|
discoveryAddresses := discovery.DefaultAddresses{DefaultAddress: c.GenericConfig.ExternalAddress}
|
||||||
discoveryAddresses.CIDRRules = append(discoveryAddresses.CIDRRules,
|
discoveryAddresses.CIDRRules = append(discoveryAddresses.CIDRRules,
|
||||||
discovery.CIDRRule{IPRange: c.ServiceIPRange, Address: net.JoinHostPort(c.APIServerServiceIP.String(), strconv.Itoa(c.APIServerServicePort))})
|
discovery.CIDRRule{IPRange: c.ExtraConfig.ServiceIPRange, Address: net.JoinHostPort(c.ExtraConfig.APIServerServiceIP.String(), strconv.Itoa(c.ExtraConfig.APIServerServicePort))})
|
||||||
c.GenericConfig.DiscoveryAddresses = discoveryAddresses
|
c.GenericConfig.DiscoveryAddresses = discoveryAddresses
|
||||||
|
|
||||||
if c.ServiceNodePortRange.Size == 0 {
|
if c.ExtraConfig.ServiceNodePortRange.Size == 0 {
|
||||||
// TODO: Currently no way to specify an empty range (do we need to allow this?)
|
// TODO: Currently no way to specify an empty range (do we need to allow this?)
|
||||||
// We should probably allow this for clouds that don't require NodePort to do load-balancing (GCE)
|
// We should probably allow this for clouds that don't require NodePort to do load-balancing (GCE)
|
||||||
// but then that breaks the strict nestedness of ServiceType.
|
// but then that breaks the strict nestedness of ServiceType.
|
||||||
// Review post-v1
|
// Review post-v1
|
||||||
c.ServiceNodePortRange = options.DefaultServiceNodePortRange
|
c.ExtraConfig.ServiceNodePortRange = options.DefaultServiceNodePortRange
|
||||||
glog.Infof("Node port range unspecified. Defaulting to %v.", c.ServiceNodePortRange)
|
glog.Infof("Node port range unspecified. Defaulting to %v.", c.ExtraConfig.ServiceNodePortRange)
|
||||||
}
|
}
|
||||||
|
|
||||||
// enable swagger UI only if general UI support is on
|
// enable swagger UI only if general UI support is on
|
||||||
c.GenericConfig.EnableSwaggerUI = c.GenericConfig.EnableSwaggerUI && c.EnableUISupport
|
c.GenericConfig.EnableSwaggerUI = c.GenericConfig.EnableSwaggerUI && c.ExtraConfig.EnableUISupport
|
||||||
|
|
||||||
if c.EndpointReconcilerConfig.Interval == 0 {
|
if c.ExtraConfig.EndpointReconcilerConfig.Interval == 0 {
|
||||||
c.EndpointReconcilerConfig.Interval = DefaultEndpointReconcilerInterval
|
c.ExtraConfig.EndpointReconcilerConfig.Interval = DefaultEndpointReconcilerInterval
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.EndpointReconcilerConfig.Reconciler == nil {
|
if c.ExtraConfig.EndpointReconcilerConfig.Reconciler == nil {
|
||||||
// use a default endpoint reconciler if nothing is set
|
// use a default endpoint reconciler if nothing is set
|
||||||
endpointClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
|
endpointClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
|
||||||
c.EndpointReconcilerConfig.Reconciler = NewMasterCountEndpointReconciler(c.MasterCount, endpointClient)
|
c.ExtraConfig.EndpointReconcilerConfig.Reconciler = NewMasterCountEndpointReconciler(c.ExtraConfig.MasterCount, endpointClient)
|
||||||
}
|
}
|
||||||
|
|
||||||
// this has always been hardcoded true in the past
|
// this has always been hardcoded true in the past
|
||||||
@ -211,7 +214,7 @@ func (c *Config) SkipComplete() completedConfig {
|
|||||||
// Certain config fields must be specified, including:
|
// Certain config fields must be specified, including:
|
||||||
// KubeletClientConfig
|
// KubeletClientConfig
|
||||||
func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*Master, error) {
|
func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*Master, error) {
|
||||||
if reflect.DeepEqual(c.KubeletClientConfig, kubeletclient.KubeletClientConfig{}) {
|
if reflect.DeepEqual(c.ExtraConfig.KubeletClientConfig, kubeletclient.KubeletClientConfig{}) {
|
||||||
return nil, fmt.Errorf("Master.New() called with empty config.KubeletClientConfig")
|
return nil, fmt.Errorf("Master.New() called with empty config.KubeletClientConfig")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,10 +223,10 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.EnableUISupport {
|
if c.ExtraConfig.EnableUISupport {
|
||||||
routes.UIRedirect{}.Install(s.Handler.NonGoRestfulMux)
|
routes.UIRedirect{}.Install(s.Handler.NonGoRestfulMux)
|
||||||
}
|
}
|
||||||
if c.EnableLogsSupport {
|
if c.ExtraConfig.EnableLogsSupport {
|
||||||
routes.Logs{}.Install(s.Handler.GoRestfulContainer)
|
routes.Logs{}.Install(s.Handler.GoRestfulContainer)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,14 +235,14 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// install legacy rest storage
|
// install legacy rest storage
|
||||||
if c.APIResourceConfigSource.AnyResourcesForVersionEnabled(apiv1.SchemeGroupVersion) {
|
if c.ExtraConfig.APIResourceConfigSource.AnyResourcesForVersionEnabled(apiv1.SchemeGroupVersion) {
|
||||||
legacyRESTStorageProvider := corerest.LegacyRESTStorageProvider{
|
legacyRESTStorageProvider := corerest.LegacyRESTStorageProvider{
|
||||||
StorageFactory: c.StorageFactory,
|
StorageFactory: c.ExtraConfig.StorageFactory,
|
||||||
ProxyTransport: c.ProxyTransport,
|
ProxyTransport: c.ExtraConfig.ProxyTransport,
|
||||||
KubeletClientConfig: c.KubeletClientConfig,
|
KubeletClientConfig: c.ExtraConfig.KubeletClientConfig,
|
||||||
EventTTL: c.EventTTL,
|
EventTTL: c.ExtraConfig.EventTTL,
|
||||||
ServiceIPRange: c.ServiceIPRange,
|
ServiceIPRange: c.ExtraConfig.ServiceIPRange,
|
||||||
ServiceNodePortRange: c.ServiceNodePortRange,
|
ServiceNodePortRange: c.ExtraConfig.ServiceNodePortRange,
|
||||||
LoopbackClientConfig: c.GenericConfig.LoopbackClientConfig,
|
LoopbackClientConfig: c.GenericConfig.LoopbackClientConfig,
|
||||||
}
|
}
|
||||||
m.InstallLegacyAPI(c.Config, c.Config.GenericConfig.RESTOptionsGetter, legacyRESTStorageProvider)
|
m.InstallLegacyAPI(c.Config, c.Config.GenericConfig.RESTOptionsGetter, legacyRESTStorageProvider)
|
||||||
@ -270,13 +273,13 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
|
|||||||
appsrest.RESTStorageProvider{},
|
appsrest.RESTStorageProvider{},
|
||||||
admissionregistrationrest.RESTStorageProvider{},
|
admissionregistrationrest.RESTStorageProvider{},
|
||||||
}
|
}
|
||||||
m.InstallAPIs(c.Config.APIResourceConfigSource, c.Config.GenericConfig.RESTOptionsGetter, restStorageProviders...)
|
m.InstallAPIs(c.ExtraConfig.APIResourceConfigSource, c.GenericConfig.RESTOptionsGetter, restStorageProviders...)
|
||||||
|
|
||||||
if c.Tunneler != nil {
|
if c.ExtraConfig.Tunneler != nil {
|
||||||
m.installTunneler(c.Tunneler, corev1client.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig).Nodes())
|
m.installTunneler(c.ExtraConfig.Tunneler, corev1client.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig).Nodes())
|
||||||
}
|
}
|
||||||
|
|
||||||
m.GenericAPIServer.AddPostStartHookOrDie("ca-registration", c.ClientCARegistrationHook.PostStartHook)
|
m.GenericAPIServer.AddPostStartHookOrDie("ca-registration", c.ExtraConfig.ClientCARegistrationHook.PostStartHook)
|
||||||
|
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
@ -287,7 +290,7 @@ func (m *Master) InstallLegacyAPI(c *Config, restOptionsGetter generic.RESTOptio
|
|||||||
glog.Fatalf("Error building core storage: %v", err)
|
glog.Fatalf("Error building core storage: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.EnableCoreControllers {
|
if c.ExtraConfig.EnableCoreControllers {
|
||||||
coreClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
|
coreClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
|
||||||
bootstrapController := c.NewBootstrapController(legacyRESTStorage, coreClient, coreClient)
|
bootstrapController := c.NewBootstrapController(legacyRESTStorage, coreClient, coreClient)
|
||||||
m.GenericAPIServer.AddPostStartHookOrDie("bootstrap-controller", bootstrapController.PostStartHook)
|
m.GenericAPIServer.AddPostStartHookOrDie("bootstrap-controller", bootstrapController.PostStartHook)
|
||||||
|
@ -71,9 +71,11 @@ func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertion
|
|||||||
|
|
||||||
config := &Config{
|
config := &Config{
|
||||||
GenericConfig: genericapiserver.NewConfig(api.Codecs),
|
GenericConfig: genericapiserver.NewConfig(api.Codecs),
|
||||||
|
ExtraConfig: ExtraConfig{
|
||||||
APIResourceConfigSource: DefaultAPIResourceConfigSource(),
|
APIResourceConfigSource: DefaultAPIResourceConfigSource(),
|
||||||
APIServerServicePort: 443,
|
APIServerServicePort: 443,
|
||||||
MasterCount: 1,
|
MasterCount: 1,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
resourceEncoding := serverstorage.NewDefaultResourceEncodingConfig(api.Registry)
|
resourceEncoding := serverstorage.NewDefaultResourceEncodingConfig(api.Registry)
|
||||||
@ -95,16 +97,16 @@ func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertion
|
|||||||
|
|
||||||
kubeVersion := kubeversion.Get()
|
kubeVersion := kubeversion.Get()
|
||||||
config.GenericConfig.Version = &kubeVersion
|
config.GenericConfig.Version = &kubeVersion
|
||||||
config.StorageFactory = storageFactory
|
config.ExtraConfig.StorageFactory = storageFactory
|
||||||
config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
|
config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
|
||||||
config.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4")
|
config.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4")
|
||||||
config.GenericConfig.LegacyAPIGroupPrefixes = sets.NewString("/api")
|
config.GenericConfig.LegacyAPIGroupPrefixes = sets.NewString("/api")
|
||||||
config.GenericConfig.RequestContextMapper = genericapirequest.NewRequestContextMapper()
|
config.GenericConfig.RequestContextMapper = genericapirequest.NewRequestContextMapper()
|
||||||
config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
|
config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
|
||||||
config.GenericConfig.EnableMetrics = true
|
config.GenericConfig.EnableMetrics = true
|
||||||
config.EnableCoreControllers = false
|
config.ExtraConfig.EnableCoreControllers = false
|
||||||
config.KubeletClientConfig = kubeletclient.KubeletClientConfig{Port: 10250}
|
config.ExtraConfig.KubeletClientConfig = kubeletclient.KubeletClientConfig{Port: 10250}
|
||||||
config.ProxyTransport = utilnet.SetTransportDefaults(&http.Transport{
|
config.ExtraConfig.ProxyTransport = utilnet.SetTransportDefaults(&http.Transport{
|
||||||
Dial: func(network, addr string) (net.Conn, error) { return nil, nil },
|
Dial: func(network, addr string) (net.Conn, error) { return nil, nil },
|
||||||
TLSClientConfig: &tls.Config{},
|
TLSClientConfig: &tls.Config{},
|
||||||
})
|
})
|
||||||
@ -126,12 +128,12 @@ func TestLegacyRestStorageStrategies(t *testing.T) {
|
|||||||
defer etcdserver.Terminate(t)
|
defer etcdserver.Terminate(t)
|
||||||
|
|
||||||
storageProvider := corerest.LegacyRESTStorageProvider{
|
storageProvider := corerest.LegacyRESTStorageProvider{
|
||||||
StorageFactory: masterCfg.StorageFactory,
|
StorageFactory: masterCfg.ExtraConfig.StorageFactory,
|
||||||
ProxyTransport: masterCfg.ProxyTransport,
|
ProxyTransport: masterCfg.ExtraConfig.ProxyTransport,
|
||||||
KubeletClientConfig: masterCfg.KubeletClientConfig,
|
KubeletClientConfig: masterCfg.ExtraConfig.KubeletClientConfig,
|
||||||
EventTTL: masterCfg.EventTTL,
|
EventTTL: masterCfg.ExtraConfig.EventTTL,
|
||||||
ServiceIPRange: masterCfg.ServiceIPRange,
|
ServiceIPRange: masterCfg.ExtraConfig.ServiceIPRange,
|
||||||
ServiceNodePortRange: masterCfg.ServiceNodePortRange,
|
ServiceNodePortRange: masterCfg.ExtraConfig.ServiceNodePortRange,
|
||||||
LoopbackClientConfig: masterCfg.GenericConfig.LoopbackClientConfig,
|
LoopbackClientConfig: masterCfg.GenericConfig.LoopbackClientConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +164,7 @@ func TestCertificatesRestStorageStrategies(t *testing.T) {
|
|||||||
defer etcdserver.Terminate(t)
|
defer etcdserver.Terminate(t)
|
||||||
|
|
||||||
certStorageProvider := certificatesrest.RESTStorageProvider{}
|
certStorageProvider := certificatesrest.RESTStorageProvider{}
|
||||||
apiGroupInfo, _ := certStorageProvider.NewRESTStorage(masterCfg.APIResourceConfigSource, masterCfg.GenericConfig.RESTOptionsGetter)
|
apiGroupInfo, _ := certStorageProvider.NewRESTStorage(masterCfg.ExtraConfig.APIResourceConfigSource, masterCfg.GenericConfig.RESTOptionsGetter)
|
||||||
|
|
||||||
exceptions := registrytest.StrategyExceptions{
|
exceptions := registrytest.StrategyExceptions{
|
||||||
HasExportStrategy: []string{
|
HasExportStrategy: []string{
|
||||||
@ -205,8 +207,8 @@ func limitedAPIResourceConfigSource() *serverstorage.ResourceConfig {
|
|||||||
// newLimitedMaster only enables the core group, the extensions group, the batch group, and the autoscaling group.
|
// newLimitedMaster only enables the core group, the extensions group, the batch group, and the autoscaling group.
|
||||||
func newLimitedMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
func newLimitedMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
||||||
etcdserver, config, assert := setUp(t)
|
etcdserver, config, assert := setUp(t)
|
||||||
config.APIResourceConfigSource = limitedAPIResourceConfigSource()
|
config.ExtraConfig.APIResourceConfigSource = limitedAPIResourceConfigSource()
|
||||||
master, err := config.Complete().New(genericapiserver.EmptyDelegate)
|
master, err := config.Complete(sharedInformers).New(genericapiserver.EmptyDelegate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error in bringing up the master: %v", err)
|
t.Fatalf("Error in bringing up the master: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -78,10 +78,14 @@ func init() {
|
|||||||
Scheme.AddUnversionedTypes(unversionedVersion, unversionedTypes...)
|
Scheme.AddUnversionedTypes(unversionedVersion, unversionedTypes...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ExtraConfig struct {
|
||||||
|
CRDRESTOptionsGetter genericregistry.RESTOptionsGetter
|
||||||
|
}
|
||||||
type Config struct {
|
type Config struct {
|
||||||
GenericConfig *genericapiserver.Config
|
GenericConfig *genericapiserver.Config
|
||||||
|
ExtraConfig ExtraConfig
|
||||||
|
}
|
||||||
|
|
||||||
CRDRESTOptionsGetter genericregistry.RESTOptionsGetter
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type CustomResourceDefinitions struct {
|
type CustomResourceDefinitions struct {
|
||||||
@ -173,7 +177,7 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
|
|||||||
s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Lister(),
|
s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Lister(),
|
||||||
s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(),
|
s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions(),
|
||||||
delegateHandler,
|
delegateHandler,
|
||||||
c.CRDRESTOptionsGetter,
|
c.ExtraConfig.CRDRESTOptionsGetter,
|
||||||
c.GenericConfig.AdmissionControl,
|
c.GenericConfig.AdmissionControl,
|
||||||
)
|
)
|
||||||
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", crdHandler)
|
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", crdHandler)
|
||||||
|
@ -101,7 +101,9 @@ func (o CustomResourceDefinitionsServerOptions) Config() (*apiserver.Config, err
|
|||||||
|
|
||||||
config := &apiserver.Config{
|
config := &apiserver.Config{
|
||||||
GenericConfig: serverConfig,
|
GenericConfig: serverConfig,
|
||||||
|
ExtraConfig: apiserver.ExtraConfig{
|
||||||
CRDRESTOptionsGetter: NewCRDRESTOptionsGetter(*o.RecommendedOptions.Etcd),
|
CRDRESTOptionsGetter: NewCRDRESTOptionsGetter(*o.RecommendedOptions.Etcd),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return config, nil
|
return config, nil
|
||||||
}
|
}
|
||||||
|
@ -457,7 +457,7 @@ func TestEtcdStorage(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getPrefixFromConfig(t *testing.T, config *extensionsapiserver.Config) string {
|
func getPrefixFromConfig(t *testing.T, config *extensionsapiserver.Config) string {
|
||||||
extensionsOptionsGetter, ok := config.CRDRESTOptionsGetter.(extensionsapiserver.CRDRESTOptionsGetter)
|
extensionsOptionsGetter, ok := config.ExtraConfig.CRDRESTOptionsGetter.(extensionsapiserver.CRDRESTOptionsGetter)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Fatal("can't obtain etcd prefix: unable to cast config.CRDRESTOptionsGetter to extensionsapiserver.CRDRESTOptionsGetter")
|
t.Fatal("can't obtain etcd prefix: unable to cast config.CRDRESTOptionsGetter to extensionsapiserver.CRDRESTOptionsGetter")
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,9 @@ func DefaultServerConfig() (*extensionsapiserver.Config, error) {
|
|||||||
|
|
||||||
config := &extensionsapiserver.Config{
|
config := &extensionsapiserver.Config{
|
||||||
GenericConfig: genericConfig,
|
GenericConfig: genericConfig,
|
||||||
|
ExtraConfig: extensionsapiserver.ExtraConfig{
|
||||||
CRDRESTOptionsGetter: customResourceDefinitionRESTOptionsGetter,
|
CRDRESTOptionsGetter: customResourceDefinitionRESTOptionsGetter,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return config, nil
|
return config, nil
|
||||||
|
@ -70,9 +70,7 @@ func init() {
|
|||||||
// legacyAPIServiceName is the fixed name of the only non-groupified API version
|
// legacyAPIServiceName is the fixed name of the only non-groupified API version
|
||||||
const legacyAPIServiceName = "v1."
|
const legacyAPIServiceName = "v1."
|
||||||
|
|
||||||
type Config struct {
|
type ExtraConfig struct {
|
||||||
GenericConfig *genericapiserver.Config
|
|
||||||
|
|
||||||
// CoreKubeInformers is used to watch kube resources
|
// CoreKubeInformers is used to watch kube resources
|
||||||
CoreKubeInformers kubeinformers.SharedInformerFactory
|
CoreKubeInformers kubeinformers.SharedInformerFactory
|
||||||
|
|
||||||
@ -89,6 +87,11 @@ type Config struct {
|
|||||||
ServiceResolver ServiceResolver
|
ServiceResolver ServiceResolver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
GenericConfig *genericapiserver.RecommendedConfig
|
||||||
|
ExtraConfig ExtraConfig
|
||||||
|
}
|
||||||
|
|
||||||
// APIAggregator contains state for a Kubernetes cluster master/api server.
|
// APIAggregator contains state for a Kubernetes cluster master/api server.
|
||||||
type APIAggregator struct {
|
type APIAggregator struct {
|
||||||
GenericAPIServer *genericapiserver.GenericAPIServer
|
GenericAPIServer *genericapiserver.GenericAPIServer
|
||||||
@ -168,14 +171,14 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
|
|||||||
GenericAPIServer: genericServer,
|
GenericAPIServer: genericServer,
|
||||||
delegateHandler: delegationTarget.UnprotectedHandler(),
|
delegateHandler: delegationTarget.UnprotectedHandler(),
|
||||||
contextMapper: c.GenericConfig.RequestContextMapper,
|
contextMapper: c.GenericConfig.RequestContextMapper,
|
||||||
proxyClientCert: c.ProxyClientCert,
|
proxyClientCert: c.ExtraConfig.ProxyClientCert,
|
||||||
proxyClientKey: c.ProxyClientKey,
|
proxyClientKey: c.ExtraConfig.ProxyClientKey,
|
||||||
proxyTransport: c.ProxyTransport,
|
proxyTransport: c.ExtraConfig.ProxyTransport,
|
||||||
proxyHandlers: map[string]*proxyHandler{},
|
proxyHandlers: map[string]*proxyHandler{},
|
||||||
handledGroups: sets.String{},
|
handledGroups: sets.String{},
|
||||||
lister: informerFactory.Apiregistration().InternalVersion().APIServices().Lister(),
|
lister: informerFactory.Apiregistration().InternalVersion().APIServices().Lister(),
|
||||||
APIRegistrationInformers: informerFactory,
|
APIRegistrationInformers: informerFactory,
|
||||||
serviceResolver: c.ServiceResolver,
|
serviceResolver: c.ExtraConfig.ServiceResolver,
|
||||||
}
|
}
|
||||||
|
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, registry, Scheme, metav1.ParameterCodec, Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, registry, Scheme, metav1.ParameterCodec, Codecs)
|
||||||
@ -198,17 +201,17 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
|
|||||||
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
|
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
|
||||||
s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)
|
s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)
|
||||||
|
|
||||||
apiserviceRegistrationController := NewAPIServiceRegistrationController(informerFactory.Apiregistration().InternalVersion().APIServices(), c.CoreKubeInformers.Core().V1().Services(), s)
|
apiserviceRegistrationController := NewAPIServiceRegistrationController(informerFactory.Apiregistration().InternalVersion().APIServices(), c.ExtraConfig.CoreKubeInformers.Core().V1().Services(), s)
|
||||||
availableController := statuscontrollers.NewAvailableConditionController(
|
availableController := statuscontrollers.NewAvailableConditionController(
|
||||||
informerFactory.Apiregistration().InternalVersion().APIServices(),
|
informerFactory.Apiregistration().InternalVersion().APIServices(),
|
||||||
c.CoreKubeInformers.Core().V1().Services(),
|
c.ExtraConfig.CoreKubeInformers.Core().V1().Services(),
|
||||||
c.CoreKubeInformers.Core().V1().Endpoints(),
|
c.ExtraConfig.CoreKubeInformers.Core().V1().Endpoints(),
|
||||||
apiregistrationClient.Apiregistration(),
|
apiregistrationClient.Apiregistration(),
|
||||||
)
|
)
|
||||||
|
|
||||||
s.GenericAPIServer.AddPostStartHook("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error {
|
s.GenericAPIServer.AddPostStartHook("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error {
|
||||||
informerFactory.Start(context.StopCh)
|
informerFactory.Start(context.StopCh)
|
||||||
c.CoreKubeInformers.Start(context.StopCh)
|
c.ExtraConfig.CoreKubeInformers.Start(context.StopCh)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
s.GenericAPIServer.AddPostStartHook("apiservice-registration-controller", func(context genericapiserver.PostStartHookContext) error {
|
s.GenericAPIServer.AddPostStartHook("apiservice-registration-controller", func(context genericapiserver.PostStartHookContext) error {
|
||||||
|
@ -152,15 +152,17 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error {
|
|||||||
|
|
||||||
config := apiserver.Config{
|
config := apiserver.Config{
|
||||||
GenericConfig: serverConfig,
|
GenericConfig: serverConfig,
|
||||||
|
ExtraConfig: apiserver.ExtraConfig{
|
||||||
CoreKubeInformers: kubeInformers,
|
CoreKubeInformers: kubeInformers,
|
||||||
ServiceResolver: serviceResolver,
|
ServiceResolver: serviceResolver,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
config.ProxyClientCert, err = ioutil.ReadFile(o.ProxyClientCertFile)
|
config.ExtraConfig.ProxyClientCert, err = ioutil.ReadFile(o.ProxyClientCertFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
config.ProxyClientKey, err = ioutil.ReadFile(o.ProxyClientKeyFile)
|
config.ExtraConfig.ProxyClientKey, err = ioutil.ReadFile(o.ProxyClientKeyFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -61,10 +61,15 @@ func init() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ExtraConfig struct {
|
||||||
|
// Place you custom config here.
|
||||||
|
}
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
GenericConfig *genericapiserver.Config
|
GenericConfig *genericapiserver.Config
|
||||||
// SharedInformerFactory provides shared informers for resources
|
// SharedInformerFactory provides shared informers for resources
|
||||||
SharedInformerFactory informers.SharedInformerFactory
|
SharedInformerFactory informers.SharedInformerFactory
|
||||||
|
ExtraConfig ExtraConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
// WardleServer contains state for a Kubernetes cluster master/api server.
|
// WardleServer contains state for a Kubernetes cluster master/api server.
|
||||||
|
@ -126,6 +126,7 @@ func (o WardleServerOptions) Config() (*apiserver.Config, error) {
|
|||||||
config := &apiserver.Config{
|
config := &apiserver.Config{
|
||||||
GenericConfig: serverConfig,
|
GenericConfig: serverConfig,
|
||||||
SharedInformerFactory: informerFactory,
|
SharedInformerFactory: informerFactory,
|
||||||
|
ExtraConfig: apiserver.ExtraConfig{},
|
||||||
}
|
}
|
||||||
return config, nil
|
return config, nil
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ import (
|
|||||||
|
|
||||||
func setup(t *testing.T) (*httptest.Server, clientset.Interface, framework.CloseFunc) {
|
func setup(t *testing.T) (*httptest.Server, clientset.Interface, framework.CloseFunc) {
|
||||||
masterConfig := framework.NewIntegrationTestMasterConfig()
|
masterConfig := framework.NewIntegrationTestMasterConfig()
|
||||||
masterConfig.EnableCoreControllers = false
|
masterConfig.ExtraConfig.EnableCoreControllers = false
|
||||||
_, s, closeFn := framework.RunAMaster(masterConfig)
|
_, s, closeFn := framework.RunAMaster(masterConfig)
|
||||||
|
|
||||||
clientSet, err := clientset.NewForConfig(&restclient.Config{Host: s.URL})
|
clientSet, err := clientset.NewForConfig(&restclient.Config{Host: s.URL})
|
||||||
|
@ -75,7 +75,7 @@ type testRESTOptionsGetter struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (getter *testRESTOptionsGetter) GetRESTOptions(resource schema.GroupResource) (generic.RESTOptions, error) {
|
func (getter *testRESTOptionsGetter) GetRESTOptions(resource schema.GroupResource) (generic.RESTOptions, error) {
|
||||||
storageConfig, err := getter.config.StorageFactory.NewConfig(resource)
|
storageConfig, err := getter.config.ExtraConfig.StorageFactory.NewConfig(resource)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return generic.RESTOptions{}, fmt.Errorf("failed to get storage: %v", err)
|
return generic.RESTOptions{}, fmt.Errorf("failed to get storage: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -690,7 +690,7 @@ func startRealMasterOrDie(t *testing.T, certDir string) (*allClient, clientv3.KV
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeAPIServerConfig.APIResourceConfigSource = &allResourceSource{} // force enable all resources
|
kubeAPIServerConfig.ExtraConfig.APIResourceConfigSource = &allResourceSource{} // force enable all resources
|
||||||
|
|
||||||
kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.EmptyDelegate, sharedInformers)
|
kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.EmptyDelegate, sharedInformers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -358,21 +358,23 @@ func NewMasterConfig() *master.Config {
|
|||||||
|
|
||||||
return &master.Config{
|
return &master.Config{
|
||||||
GenericConfig: genericConfig,
|
GenericConfig: genericConfig,
|
||||||
|
ExtraConfig: master.ExtraConfig{
|
||||||
APIResourceConfigSource: master.DefaultAPIResourceConfigSource(),
|
APIResourceConfigSource: master.DefaultAPIResourceConfigSource(),
|
||||||
StorageFactory: storageFactory,
|
StorageFactory: storageFactory,
|
||||||
EnableCoreControllers: true,
|
EnableCoreControllers: true,
|
||||||
KubeletClientConfig: kubeletclient.KubeletClientConfig{Port: 10250},
|
KubeletClientConfig: kubeletclient.KubeletClientConfig{Port: 10250},
|
||||||
APIServerServicePort: 443,
|
APIServerServicePort: 443,
|
||||||
MasterCount: 1,
|
MasterCount: 1,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the master config appropriate for most integration tests.
|
// Returns the master config appropriate for most integration tests.
|
||||||
func NewIntegrationTestMasterConfig() *master.Config {
|
func NewIntegrationTestMasterConfig() *master.Config {
|
||||||
masterConfig := NewMasterConfig()
|
masterConfig := NewMasterConfig()
|
||||||
masterConfig.EnableCoreControllers = true
|
masterConfig.ExtraConfig.EnableCoreControllers = true
|
||||||
masterConfig.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4")
|
masterConfig.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4")
|
||||||
masterConfig.APIResourceConfigSource = master.DefaultAPIResourceConfigSource()
|
masterConfig.ExtraConfig.APIResourceConfigSource = master.DefaultAPIResourceConfigSource()
|
||||||
return masterConfig
|
return masterConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -548,7 +548,7 @@ func TestServiceAlloc(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("bad cidr: %v", err)
|
t.Fatalf("bad cidr: %v", err)
|
||||||
}
|
}
|
||||||
cfg.ServiceIPRange = *cidr
|
cfg.ExtraConfig.ServiceIPRange = *cidr
|
||||||
_, s, closeFn := framework.RunAMaster(cfg)
|
_, s, closeFn := framework.RunAMaster(cfg)
|
||||||
defer closeFn()
|
defer closeFn()
|
||||||
|
|
||||||
|
@ -30,9 +30,11 @@ func TestMasterExportsSymbols(t *testing.T) {
|
|||||||
GenericConfig: &genericapiserver.Config{
|
GenericConfig: &genericapiserver.Config{
|
||||||
EnableMetrics: true,
|
EnableMetrics: true,
|
||||||
},
|
},
|
||||||
|
ExtraConfig: master.ExtraConfig{
|
||||||
EnableCoreControllers: false,
|
EnableCoreControllers: false,
|
||||||
EnableUISupport: false,
|
EnableUISupport: false,
|
||||||
EnableLogsSupport: false,
|
EnableLogsSupport: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
_ = &master.Master{
|
_ = &master.Master{
|
||||||
GenericAPIServer: &genericapiserver.GenericAPIServer{},
|
GenericAPIServer: &genericapiserver.GenericAPIServer{},
|
||||||
|
Loading…
Reference in New Issue
Block a user