mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 03:33:56 +00:00
FIXUP: cmd/kube-apiserver/app/options: split apart controlplane part
This commit is contained in:
parent
1b3779baa0
commit
764da8a01d
@ -47,13 +47,13 @@ import (
|
|||||||
apiregistrationclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1"
|
apiregistrationclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1"
|
||||||
informers "k8s.io/kube-aggregator/pkg/client/informers/externalversions/apiregistration/v1"
|
informers "k8s.io/kube-aggregator/pkg/client/informers/externalversions/apiregistration/v1"
|
||||||
"k8s.io/kube-aggregator/pkg/controllers/autoregister"
|
"k8s.io/kube-aggregator/pkg/controllers/autoregister"
|
||||||
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
controlplaneapiserver "k8s.io/kubernetes/pkg/controlplane/apiserver/options"
|
||||||
"k8s.io/kubernetes/pkg/controlplane/controller/crdregistration"
|
"k8s.io/kubernetes/pkg/controlplane/controller/crdregistration"
|
||||||
)
|
)
|
||||||
|
|
||||||
func createAggregatorConfig(
|
func createAggregatorConfig(
|
||||||
kubeAPIServerConfig genericapiserver.Config,
|
kubeAPIServerConfig genericapiserver.Config,
|
||||||
commandOptions *options.ServerRunOptions,
|
commandOptions controlplaneapiserver.CompletedOptions,
|
||||||
externalInformers kubeexternalinformers.SharedInformerFactory,
|
externalInformers kubeexternalinformers.SharedInformerFactory,
|
||||||
serviceResolver aggregatorapiserver.ServiceResolver,
|
serviceResolver aggregatorapiserver.ServiceResolver,
|
||||||
proxyTransport *http.Transport,
|
proxyTransport *http.Transport,
|
||||||
|
@ -77,14 +77,14 @@ func NewConfig(opts options.CompletedOptions) (*Config, error) {
|
|||||||
}
|
}
|
||||||
c.ControlPlane = controlPlane
|
c.ControlPlane = controlPlane
|
||||||
|
|
||||||
apiExtensions, err := apiserver.CreateAPIExtensionsConfig(*controlPlane.GenericConfig, controlPlane.ExtraConfig.VersionedInformers, pluginInitializer, opts.ServerRunOptions, opts.MasterCount,
|
apiExtensions, err := apiserver.CreateAPIExtensionsConfig(*controlPlane.GenericConfig, controlPlane.ExtraConfig.VersionedInformers, pluginInitializer, opts.CompletedOptions, opts.MasterCount,
|
||||||
serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(controlPlane.ExtraConfig.ProxyTransport, controlPlane.GenericConfig.EgressSelector, controlPlane.GenericConfig.LoopbackClientConfig, controlPlane.GenericConfig.TracerProvider))
|
serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(controlPlane.ExtraConfig.ProxyTransport, controlPlane.GenericConfig.EgressSelector, controlPlane.GenericConfig.LoopbackClientConfig, controlPlane.GenericConfig.TracerProvider))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
c.ApiExtensions = apiExtensions
|
c.ApiExtensions = apiExtensions
|
||||||
|
|
||||||
aggregator, err := createAggregatorConfig(*controlPlane.GenericConfig, opts.ServerRunOptions, controlPlane.ExtraConfig.VersionedInformers, serviceResolver, controlPlane.ExtraConfig.ProxyTransport, pluginInitializer)
|
aggregator, err := createAggregatorConfig(*controlPlane.GenericConfig, opts.CompletedOptions, controlPlane.ExtraConfig.VersionedInformers, serviceResolver, controlPlane.ExtraConfig.ProxyTransport, pluginInitializer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ type CompletedOptions struct {
|
|||||||
|
|
||||||
// Complete set default ServerRunOptions.
|
// Complete set default ServerRunOptions.
|
||||||
// Should be called after kube-apiserver flags parsed.
|
// Should be called after kube-apiserver flags parsed.
|
||||||
func Complete(opts *ServerRunOptions) (CompletedOptions, error) {
|
func (opts *ServerRunOptions) Complete() (CompletedOptions, error) {
|
||||||
if opts == nil {
|
if opts == nil {
|
||||||
return CompletedOptions{completedOptions: &completedOptions{}}, nil
|
return CompletedOptions{completedOptions: &completedOptions{}}, nil
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestAddFlags(t *testing.T) {
|
func TestAddFlags(t *testing.T) {
|
||||||
fs := pflag.NewFlagSet("addflagstest", pflag.ContinueOnError)
|
fs := pflag.NewFlagSet("addflagstest", pflag.PanicOnError)
|
||||||
s := NewServerRunOptions()
|
s := NewServerRunOptions()
|
||||||
for _, f := range s.Flags().FlagSets {
|
for _, f := range s.Flags().FlagSets {
|
||||||
fs.AddFlagSet(f)
|
fs.AddFlagSet(f)
|
||||||
|
@ -29,7 +29,7 @@ import (
|
|||||||
|
|
||||||
// TODO: Longer term we should read this from some config store, rather than a flag.
|
// TODO: Longer term we should read this from some config store, rather than a flag.
|
||||||
// validateClusterIPFlags is expected to be called after Complete()
|
// validateClusterIPFlags is expected to be called after Complete()
|
||||||
func validateClusterIPFlags(options *ServerRunOptions) []error {
|
func validateClusterIPFlags(options Extra) []error {
|
||||||
var errs []error
|
var errs []error
|
||||||
// maxCIDRBits is used to define the maximum CIDR size for the cluster ip(s)
|
// maxCIDRBits is used to define the maximum CIDR size for the cluster ip(s)
|
||||||
maxCIDRBits := 20
|
maxCIDRBits := 20
|
||||||
@ -89,7 +89,7 @@ func validateMaxCIDRRange(cidr net.IPNet, maxCIDRBits int, cidrFlag string) erro
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateServiceNodePort(options *ServerRunOptions) []error {
|
func validateServiceNodePort(options Extra) []error {
|
||||||
var errs []error
|
var errs []error
|
||||||
|
|
||||||
if options.KubernetesServiceNodePort < 0 || options.KubernetesServiceNodePort > 65535 {
|
if options.KubernetesServiceNodePort < 0 || options.KubernetesServiceNodePort > 65535 {
|
||||||
@ -103,12 +103,12 @@ func validateServiceNodePort(options *ServerRunOptions) []error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Validate checks ServerRunOptions and return a slice of found errs.
|
// Validate checks ServerRunOptions and return a slice of found errs.
|
||||||
func (s *ServerRunOptions) Validate() []error {
|
func (s CompletedOptions) Validate() []error {
|
||||||
var errs []error
|
var errs []error
|
||||||
|
|
||||||
errs = append(errs, s.Options.Validate()...)
|
errs = append(errs, s.CompletedOptions.Validate()...)
|
||||||
errs = append(errs, validateClusterIPFlags(s)...)
|
errs = append(errs, validateClusterIPFlags(s.Extra)...)
|
||||||
errs = append(errs, validateServiceNodePort(s)...)
|
errs = append(errs, validateServiceNodePort(s.Extra)...)
|
||||||
|
|
||||||
return errs
|
return errs
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ func TestClusterServiceIPRange(t *testing.T) {
|
|||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.MultiCIDRServiceAllocator, tc.gate)()
|
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.MultiCIDRServiceAllocator, tc.gate)()
|
||||||
|
|
||||||
errs := validateClusterIPFlags(tc.options)
|
errs := validateClusterIPFlags(tc.options.Extra)
|
||||||
if len(errs) > 0 && !tc.expectErrors {
|
if len(errs) > 0 && !tc.expectErrors {
|
||||||
t.Errorf("expected no errors, errors found %+v", errs)
|
t.Errorf("expected no errors, errors found %+v", errs)
|
||||||
}
|
}
|
||||||
@ -200,7 +200,7 @@ func TestValidateServiceNodePort(t *testing.T) {
|
|||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
errs := validateServiceNodePort(tc.options)
|
errs := validateServiceNodePort(tc.options.Extra)
|
||||||
if errs != nil && !tc.expectErrors {
|
if errs != nil && !tc.expectErrors {
|
||||||
t.Errorf("expected no errors, error found %+v", errs)
|
t.Errorf("expected no errors, error found %+v", errs)
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ cluster's shared state through which all other components interact.`,
|
|||||||
cliflag.PrintFlags(fs)
|
cliflag.PrintFlags(fs)
|
||||||
|
|
||||||
// set default options
|
// set default options
|
||||||
completedOptions, err := options.Complete(s)
|
completedOptions, err := s.Complete()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -217,7 +217,7 @@ func CreateKubeAPIServerConfig(opts options.CompletedOptions) (
|
|||||||
proxyTransport := CreateProxyTransport()
|
proxyTransport := CreateProxyTransport()
|
||||||
|
|
||||||
genericConfig, versionedInformers, storageFactory, err := controlplaneapiserver.BuildGenericConfig(
|
genericConfig, versionedInformers, storageFactory, err := controlplaneapiserver.BuildGenericConfig(
|
||||||
opts.ServerRunOptions,
|
opts.CompletedOptions,
|
||||||
[]*runtime.Scheme{legacyscheme.Scheme, extensionsapiserver.Scheme, aggregatorscheme.Scheme},
|
[]*runtime.Scheme{legacyscheme.Scheme, extensionsapiserver.Scheme, aggregatorscheme.Scheme},
|
||||||
generatedopenapi.GetOpenAPIDefinitions,
|
generatedopenapi.GetOpenAPIDefinitions,
|
||||||
)
|
)
|
||||||
|
@ -236,7 +236,7 @@ func StartTestServer(t Logger, instanceOptions *TestServerInstanceOptions, custo
|
|||||||
s.Authentication.ServiceAccounts.Issuers = []string{"https://foo.bar.example.com"}
|
s.Authentication.ServiceAccounts.Issuers = []string{"https://foo.bar.example.com"}
|
||||||
s.Authentication.ServiceAccounts.KeyFiles = []string{saSigningKeyFile.Name()}
|
s.Authentication.ServiceAccounts.KeyFiles = []string{saSigningKeyFile.Name()}
|
||||||
|
|
||||||
completedOptions, err := options.Complete(s)
|
completedOptions, err := s.Complete()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, fmt.Errorf("failed to set default ServerRunOptions: %v", err)
|
return result, fmt.Errorf("failed to set default ServerRunOptions: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -30,14 +30,14 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/util/webhook"
|
"k8s.io/apiserver/pkg/util/webhook"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
|
|
||||||
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
controlplaneapiserver "k8s.io/kubernetes/pkg/controlplane/apiserver/options"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CreateAPIExtensionsConfig(
|
func CreateAPIExtensionsConfig(
|
||||||
kubeAPIServerConfig server.Config,
|
kubeAPIServerConfig server.Config,
|
||||||
kubeInformers informers.SharedInformerFactory,
|
kubeInformers informers.SharedInformerFactory,
|
||||||
pluginInitializers []admission.PluginInitializer,
|
pluginInitializers []admission.PluginInitializer,
|
||||||
commandOptions *options.ServerRunOptions,
|
commandOptions controlplaneapiserver.CompletedOptions,
|
||||||
masterCount int,
|
masterCount int,
|
||||||
serviceResolver webhook.ServiceResolver,
|
serviceResolver webhook.ServiceResolver,
|
||||||
authResolverWrapper webhook.AuthenticationInfoResolverWrapper,
|
authResolverWrapper webhook.AuthenticationInfoResolverWrapper,
|
||||||
|
@ -40,9 +40,9 @@ import (
|
|||||||
"k8s.io/component-base/version"
|
"k8s.io/component-base/version"
|
||||||
openapicommon "k8s.io/kube-openapi/pkg/common"
|
openapicommon "k8s.io/kube-openapi/pkg/common"
|
||||||
|
|
||||||
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/controlplane"
|
"k8s.io/kubernetes/pkg/controlplane"
|
||||||
|
controlplaneapiserver "k8s.io/kubernetes/pkg/controlplane/apiserver/options"
|
||||||
"k8s.io/kubernetes/pkg/kubeapiserver"
|
"k8s.io/kubernetes/pkg/kubeapiserver"
|
||||||
"k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
|
"k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
|
||||||
rbacrest "k8s.io/kubernetes/pkg/registry/rbac/rest"
|
rbacrest "k8s.io/kubernetes/pkg/registry/rbac/rest"
|
||||||
@ -50,7 +50,7 @@ import (
|
|||||||
|
|
||||||
// BuildGenericConfig takes the master server options and produces the genericapiserver.Config associated with it
|
// BuildGenericConfig takes the master server options and produces the genericapiserver.Config associated with it
|
||||||
func BuildGenericConfig(
|
func BuildGenericConfig(
|
||||||
s *options.ServerRunOptions,
|
s controlplaneapiserver.CompletedOptions,
|
||||||
schemes []*runtime.Scheme,
|
schemes []*runtime.Scheme,
|
||||||
getOpenAPIDefinitions func(ref openapicommon.ReferenceCallback) map[string]openapicommon.OpenAPIDefinition,
|
getOpenAPIDefinitions func(ref openapicommon.ReferenceCallback) map[string]openapicommon.OpenAPIDefinition,
|
||||||
) (
|
) (
|
||||||
@ -167,7 +167,7 @@ func BuildGenericConfig(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BuildAuthorizer constructs the authorizer
|
// BuildAuthorizer constructs the authorizer
|
||||||
func BuildAuthorizer(s *options.ServerRunOptions, EgressSelector *egressselector.EgressSelector, versionedInformers clientgoinformers.SharedInformerFactory) (authorizer.Authorizer, authorizer.RuleResolver, error) {
|
func BuildAuthorizer(s controlplaneapiserver.CompletedOptions, EgressSelector *egressselector.EgressSelector, versionedInformers clientgoinformers.SharedInformerFactory) (authorizer.Authorizer, authorizer.RuleResolver, error) {
|
||||||
authorizationConfig := s.Authorization.ToAuthorizationConfig(versionedInformers)
|
authorizationConfig := s.Authorization.ToAuthorizationConfig(versionedInformers)
|
||||||
|
|
||||||
if EgressSelector != nil {
|
if EgressSelector != nil {
|
||||||
@ -182,7 +182,7 @@ func BuildAuthorizer(s *options.ServerRunOptions, EgressSelector *egressselector
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BuildPriorityAndFairness constructs the guts of the API Priority and Fairness filter
|
// BuildPriorityAndFairness constructs the guts of the API Priority and Fairness filter
|
||||||
func BuildPriorityAndFairness(s *options.ServerRunOptions, extclient clientgoclientset.Interface, versionedInformer clientgoinformers.SharedInformerFactory) (utilflowcontrol.Interface, error) {
|
func BuildPriorityAndFairness(s controlplaneapiserver.CompletedOptions, extclient clientgoclientset.Interface, versionedInformer clientgoinformers.SharedInformerFactory) (utilflowcontrol.Interface, error) {
|
||||||
if s.GenericServerRunOptions.MaxRequestsInFlight+s.GenericServerRunOptions.MaxMutatingRequestsInFlight <= 0 {
|
if s.GenericServerRunOptions.MaxRequestsInFlight+s.GenericServerRunOptions.MaxMutatingRequestsInFlight <= 0 {
|
||||||
return nil, fmt.Errorf("invalid configuration: MaxRequestsInFlight=%d and MaxMutatingRequestsInFlight=%d; they must add up to something positive", s.GenericServerRunOptions.MaxRequestsInFlight, s.GenericServerRunOptions.MaxMutatingRequestsInFlight)
|
return nil, fmt.Errorf("invalid configuration: MaxRequestsInFlight=%d and MaxMutatingRequestsInFlight=%d; they must add up to something positive", s.GenericServerRunOptions.MaxRequestsInFlight, s.GenericServerRunOptions.MaxMutatingRequestsInFlight)
|
||||||
}
|
}
|
||||||
|
@ -77,6 +77,7 @@ import (
|
|||||||
flowcontrolv1beta1 "k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta1"
|
flowcontrolv1beta1 "k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta1"
|
||||||
flowcontrolv1beta2 "k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta2"
|
flowcontrolv1beta2 "k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta2"
|
||||||
flowcontrolv1beta3 "k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta3"
|
flowcontrolv1beta3 "k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta3"
|
||||||
|
"k8s.io/kubernetes/pkg/controlplane/apiserver/options"
|
||||||
"k8s.io/kubernetes/pkg/controlplane/controller/apiserverleasegc"
|
"k8s.io/kubernetes/pkg/controlplane/controller/apiserverleasegc"
|
||||||
"k8s.io/kubernetes/pkg/controlplane/controller/clusterauthenticationtrust"
|
"k8s.io/kubernetes/pkg/controlplane/controller/clusterauthenticationtrust"
|
||||||
"k8s.io/kubernetes/pkg/controlplane/controller/legacytokentracking"
|
"k8s.io/kubernetes/pkg/controlplane/controller/legacytokentracking"
|
||||||
@ -295,7 +296,7 @@ func (c *Config) Complete() CompletedConfig {
|
|||||||
&c.ExtraConfig,
|
&c.ExtraConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceIPRange, apiServerServiceIP, err := ServiceIPRange(cfg.ExtraConfig.ServiceIPRange)
|
serviceIPRange, apiServerServiceIP, err := options.ServiceIPRange(cfg.ExtraConfig.ServiceIPRange)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Fatalf("Error determining service IP ranges: %v", err)
|
klog.Fatalf("Error determining service IP ranges: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ func (a *APIServer) Start() error {
|
|||||||
errCh := make(chan error)
|
errCh := make(chan error)
|
||||||
go func() {
|
go func() {
|
||||||
defer close(errCh)
|
defer close(errCh)
|
||||||
completedOptions, err := options.Complete(o)
|
completedOptions, err := o.Complete()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errCh <- fmt.Errorf("set apiserver default options error: %w", err)
|
errCh <- fmt.Errorf("set apiserver default options error: %w", err)
|
||||||
return
|
return
|
||||||
|
@ -88,23 +88,23 @@ func StartRealAPIServerOrDie(t *testing.T, configFuncs ...func(*options.ServerRu
|
|||||||
t.Fatalf("write file %s failed: %v", saSigningKeyFile.Name(), err)
|
t.Fatalf("write file %s failed: %v", saSigningKeyFile.Name(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeAPIServerOptions := options.NewServerRunOptions()
|
opts := options.NewServerRunOptions()
|
||||||
kubeAPIServerOptions.SecureServing.Listener = listener
|
opts.Options.SecureServing.Listener = listener
|
||||||
kubeAPIServerOptions.SecureServing.ServerCert.CertDirectory = certDir
|
opts.Options.SecureServing.ServerCert.CertDirectory = certDir
|
||||||
kubeAPIServerOptions.ServiceAccountSigningKeyFile = saSigningKeyFile.Name()
|
opts.Options.ServiceAccountSigningKeyFile = saSigningKeyFile.Name()
|
||||||
kubeAPIServerOptions.Etcd.StorageConfig.Transport.ServerList = []string{framework.GetEtcdURL()}
|
opts.Options.Etcd.StorageConfig.Transport.ServerList = []string{framework.GetEtcdURL()}
|
||||||
kubeAPIServerOptions.Etcd.DefaultStorageMediaType = runtime.ContentTypeJSON // force json we can easily interpret the result in etcd
|
opts.Options.Etcd.DefaultStorageMediaType = runtime.ContentTypeJSON // force json we can easily interpret the result in etcd
|
||||||
kubeAPIServerOptions.ServiceClusterIPRanges = defaultServiceClusterIPRange.String()
|
opts.ServiceClusterIPRanges = defaultServiceClusterIPRange.String()
|
||||||
kubeAPIServerOptions.Authentication.APIAudiences = []string{"https://foo.bar.example.com"}
|
opts.Options.Authentication.APIAudiences = []string{"https://foo.bar.example.com"}
|
||||||
kubeAPIServerOptions.Authentication.ServiceAccounts.Issuers = []string{"https://foo.bar.example.com"}
|
opts.Options.Authentication.ServiceAccounts.Issuers = []string{"https://foo.bar.example.com"}
|
||||||
kubeAPIServerOptions.Authentication.ServiceAccounts.KeyFiles = []string{saSigningKeyFile.Name()}
|
opts.Options.Authentication.ServiceAccounts.KeyFiles = []string{saSigningKeyFile.Name()}
|
||||||
kubeAPIServerOptions.Authorization.Modes = []string{"RBAC"}
|
opts.Options.Authorization.Modes = []string{"RBAC"}
|
||||||
kubeAPIServerOptions.Admission.GenericAdmission.DisablePlugins = []string{"ServiceAccount"}
|
opts.Options.Admission.GenericAdmission.DisablePlugins = []string{"ServiceAccount"}
|
||||||
kubeAPIServerOptions.APIEnablement.RuntimeConfig["api/all"] = "true"
|
opts.Options.APIEnablement.RuntimeConfig["api/all"] = "true"
|
||||||
for _, f := range configFuncs {
|
for _, f := range configFuncs {
|
||||||
f(kubeAPIServerOptions)
|
f(opts)
|
||||||
}
|
}
|
||||||
completedOptions, err := options.Complete(kubeAPIServerOptions)
|
completedOptions, err := opts.Complete()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -127,30 +127,30 @@ func StartTestServer(ctx context.Context, t testing.TB, setup TestServerSetup) (
|
|||||||
t.Fatalf("write file %s failed: %v", saSigningKeyFile.Name(), err)
|
t.Fatalf("write file %s failed: %v", saSigningKeyFile.Name(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeAPIServerOptions := options.NewServerRunOptions()
|
opts := options.NewServerRunOptions()
|
||||||
kubeAPIServerOptions.SecureServing.Listener = listener
|
opts.SecureServing.Listener = listener
|
||||||
kubeAPIServerOptions.SecureServing.BindAddress = netutils.ParseIPSloppy("127.0.0.1")
|
opts.SecureServing.BindAddress = netutils.ParseIPSloppy("127.0.0.1")
|
||||||
kubeAPIServerOptions.SecureServing.ServerCert.CertDirectory = certDir
|
opts.SecureServing.ServerCert.CertDirectory = certDir
|
||||||
kubeAPIServerOptions.ServiceAccountSigningKeyFile = saSigningKeyFile.Name()
|
opts.ServiceAccountSigningKeyFile = saSigningKeyFile.Name()
|
||||||
kubeAPIServerOptions.Etcd.StorageConfig.Prefix = path.Join("/", uuid.New().String(), "registry")
|
opts.Etcd.StorageConfig.Prefix = path.Join("/", uuid.New().String(), "registry")
|
||||||
kubeAPIServerOptions.Etcd.StorageConfig.Transport.ServerList = []string{GetEtcdURL()}
|
opts.Etcd.StorageConfig.Transport.ServerList = []string{GetEtcdURL()}
|
||||||
kubeAPIServerOptions.ServiceClusterIPRanges = defaultServiceClusterIPRange.String()
|
opts.ServiceClusterIPRanges = defaultServiceClusterIPRange.String()
|
||||||
kubeAPIServerOptions.Authentication.RequestHeader.UsernameHeaders = []string{"X-Remote-User"}
|
opts.Authentication.RequestHeader.UsernameHeaders = []string{"X-Remote-User"}
|
||||||
kubeAPIServerOptions.Authentication.RequestHeader.GroupHeaders = []string{"X-Remote-Group"}
|
opts.Authentication.RequestHeader.GroupHeaders = []string{"X-Remote-Group"}
|
||||||
kubeAPIServerOptions.Authentication.RequestHeader.ExtraHeaderPrefixes = []string{"X-Remote-Extra-"}
|
opts.Authentication.RequestHeader.ExtraHeaderPrefixes = []string{"X-Remote-Extra-"}
|
||||||
kubeAPIServerOptions.Authentication.RequestHeader.AllowedNames = []string{"kube-aggregator"}
|
opts.Authentication.RequestHeader.AllowedNames = []string{"kube-aggregator"}
|
||||||
kubeAPIServerOptions.Authentication.RequestHeader.ClientCAFile = proxyCACertFile.Name()
|
opts.Authentication.RequestHeader.ClientCAFile = proxyCACertFile.Name()
|
||||||
kubeAPIServerOptions.Authentication.APIAudiences = []string{"https://foo.bar.example.com"}
|
opts.Authentication.APIAudiences = []string{"https://foo.bar.example.com"}
|
||||||
kubeAPIServerOptions.Authentication.ServiceAccounts.Issuers = []string{"https://foo.bar.example.com"}
|
opts.Authentication.ServiceAccounts.Issuers = []string{"https://foo.bar.example.com"}
|
||||||
kubeAPIServerOptions.Authentication.ServiceAccounts.KeyFiles = []string{saSigningKeyFile.Name()}
|
opts.Authentication.ServiceAccounts.KeyFiles = []string{saSigningKeyFile.Name()}
|
||||||
kubeAPIServerOptions.Authentication.ClientCert.ClientCA = clientCACertFile.Name()
|
opts.Authentication.ClientCert.ClientCA = clientCACertFile.Name()
|
||||||
kubeAPIServerOptions.Authorization.Modes = []string{"Node", "RBAC"}
|
opts.Authorization.Modes = []string{"Node", "RBAC"}
|
||||||
|
|
||||||
if setup.ModifyServerRunOptions != nil {
|
if setup.ModifyServerRunOptions != nil {
|
||||||
setup.ModifyServerRunOptions(kubeAPIServerOptions)
|
setup.ModifyServerRunOptions(opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
completedOptions, err := options.Complete(kubeAPIServerOptions)
|
completedOptions, err := opts.Complete()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user