diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 5cf1d9a578f..f5356f81d31 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -242,6 +242,11 @@ func (s *APIServer) Run(_ []string) error { _, enableV1 := s.RuntimeConfig["api/v1"] + disableLegacyAPIs := false + legacyAPIFlagValue, ok := s.RuntimeConfig["api/legacy"] + if ok && legacyAPIFlagValue == "false" { + disableLegacyAPIs = true + } // TODO: expose same flags as client.BindClientConfigFlags but for a server clientConfig := &client.Config{ Host: net.JoinHostPort(s.InsecureBindAddress.String(), strconv.Itoa(s.InsecurePort)), @@ -324,6 +329,7 @@ func (s *APIServer) Run(_ []string) error { SupportsBasicAuth: len(s.BasicAuthFile) > 0, Authorizer: authorizer, AdmissionControl: admissionController, + DisableLegacyAPIs: disableLegacyAPIs, DisableV1Beta3: disableV1beta3, EnableV1: enableV1, MasterServiceNamespace: s.MasterServiceNamespace, diff --git a/pkg/master/master.go b/pkg/master/master.go index 4389aad53cc..00486794076 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -91,6 +91,8 @@ type Config struct { EnableUISupport bool // allow downstream consumers to disable swagger EnableSwaggerSupport bool + // allow v1beta1 and v1beta2 to be conditionally disabled + DisableLegacyAPIs bool // allow v1beta3 to be conditionally disabled DisableV1Beta3 bool // allow v1 to be conditionally enabled @@ -159,6 +161,7 @@ type Master struct { authorizer authorizer.Authorizer admissionControl admission.Interface masterCount int + legacyAPIs bool v1beta3 bool v1 bool requestContextMapper api.RequestContextMapper @@ -303,6 +306,7 @@ func New(c *Config) *Master { authenticator: c.Authenticator, authorizer: c.Authorizer, admissionControl: c.AdmissionControl, + legacyAPIs: !c.DisableLegacyAPIs, v1beta3: !c.DisableV1Beta3, v1: c.EnableV1, requestContextMapper: c.RequestContextMapper, @@ -457,12 +461,16 @@ func (m *Master) init(c *Config) { "componentStatuses": componentstatus.NewStorage(func() map[string]apiserver.Server { return m.getServersToValidate(c, false) }), } - apiVersions := []string{"v1beta1", "v1beta2"} - if err := m.api_v1beta1().InstallREST(m.handlerContainer); err != nil { - glog.Fatalf("Unable to setup API v1beta1: %v", err) - } - if err := m.api_v1beta2().InstallREST(m.handlerContainer); err != nil { - glog.Fatalf("Unable to setup API v1beta2: %v", err) + apiVersions := []string{} + if m.legacyAPIs { + if err := m.api_v1beta1().InstallREST(m.handlerContainer); err != nil { + glog.Fatalf("Unable to setup API v1beta1: %v", err) + } + apiVersions = append(apiVersions, "v1beta1") + if err := m.api_v1beta2().InstallREST(m.handlerContainer); err != nil { + glog.Fatalf("Unable to setup API v1beta2: %v", err) + } + apiVersions = append(apiVersions, "v1beta2") } if m.v1beta3 { if err := m.api_v1beta3().InstallREST(m.handlerContainer); err != nil {