remove deprecated validEgressSelectorNames 'master' (#102242)

* remove deprecated validEgressSelectorNames 'master'

Signed-off-by: pacoxu <paco.xu@daocloud.io>

* update gce configure: replace deprecated egress name 'master' with 'controlplane'

Signed-off-by: pacoxu <paco.xu@daocloud.io>

* add dup error for EgressSelection & fix converting alpha/beta to v1 name
This commit is contained in:
Paco Xu 2021-09-16 22:09:46 +08:00 committed by GitHub
parent 5d7ac70051
commit a48a2efbd4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 137 additions and 55 deletions

View File

@ -937,7 +937,7 @@ egressSelections:
transport: transport:
uds: uds:
udsName: /etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket udsName: /etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket
- name: master - name: controlplane
connection: connection:
proxyProtocol: Direct proxyProtocol: Direct
- name: etcd - name: etcd
@ -955,7 +955,7 @@ egressSelections:
transport: transport:
uds: uds:
udsName: /etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket udsName: /etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket
- name: master - name: controlplane
connection: connection:
proxyProtocol: Direct proxyProtocol: Direct
- name: etcd - name: etcd

View File

@ -62,8 +62,7 @@ type EgressSelectorConfiguration struct {
// EgressSelection provides the configuration for a single egress selection client. // EgressSelection provides the configuration for a single egress selection client.
type EgressSelection struct { type EgressSelection struct {
// Name is the name of the egress selection. // Name is the name of the egress selection.
// Currently supported values are "controlplane", "master", "etcd" and "cluster" // Currently supported values are "controlplane", "etcd" and "cluster"
// The "master" egress selector is deprecated in favor of "controlplane"
Name string Name string
// Connection is the exact information used to configure the egress selection // Connection is the exact information used to configure the egress selection

View File

@ -0,0 +1,32 @@
/*
Copyright 2021 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1alpha1
import (
conversion "k8s.io/apimachinery/pkg/conversion"
apiserver "k8s.io/apiserver/pkg/apis/apiserver"
)
func Convert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(in *EgressSelection, out *apiserver.EgressSelection, s conversion.Scope) error {
if err := autoConvert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(in, out, s); err != nil {
return err
}
if out.Name == "master" {
out.Name = "controlplane"
}
return nil
}

View File

@ -66,11 +66,6 @@ func RegisterConversions(s *runtime.Scheme) error {
}); err != nil { }); err != nil {
return err return err
} }
if err := s.AddGeneratedConversionFunc((*EgressSelection)(nil), (*apiserver.EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(a.(*EgressSelection), b.(*apiserver.EgressSelection), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*apiserver.EgressSelection)(nil), (*EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error { if err := s.AddGeneratedConversionFunc((*apiserver.EgressSelection)(nil), (*EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_apiserver_EgressSelection_To_v1alpha1_EgressSelection(a.(*apiserver.EgressSelection), b.(*EgressSelection), scope) return Convert_apiserver_EgressSelection_To_v1alpha1_EgressSelection(a.(*apiserver.EgressSelection), b.(*EgressSelection), scope)
}); err != nil { }); err != nil {
@ -136,6 +131,11 @@ func RegisterConversions(s *runtime.Scheme) error {
}); err != nil { }); err != nil {
return err return err
} }
if err := s.AddConversionFunc((*EgressSelection)(nil), (*apiserver.EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(a.(*EgressSelection), b.(*apiserver.EgressSelection), scope)
}); err != nil {
return err
}
return nil return nil
} }
@ -213,11 +213,6 @@ func autoConvert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(in *Egres
return nil return nil
} }
// Convert_v1alpha1_EgressSelection_To_apiserver_EgressSelection is an autogenerated conversion function.
func Convert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(in *EgressSelection, out *apiserver.EgressSelection, s conversion.Scope) error {
return autoConvert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(in, out, s)
}
func autoConvert_apiserver_EgressSelection_To_v1alpha1_EgressSelection(in *apiserver.EgressSelection, out *EgressSelection, s conversion.Scope) error { func autoConvert_apiserver_EgressSelection_To_v1alpha1_EgressSelection(in *apiserver.EgressSelection, out *EgressSelection, s conversion.Scope) error {
out.Name = in.Name out.Name = in.Name
if err := Convert_apiserver_Connection_To_v1alpha1_Connection(&in.Connection, &out.Connection, s); err != nil { if err := Convert_apiserver_Connection_To_v1alpha1_Connection(&in.Connection, &out.Connection, s); err != nil {
@ -232,7 +227,17 @@ func Convert_apiserver_EgressSelection_To_v1alpha1_EgressSelection(in *apiserver
} }
func autoConvert_v1alpha1_EgressSelectorConfiguration_To_apiserver_EgressSelectorConfiguration(in *EgressSelectorConfiguration, out *apiserver.EgressSelectorConfiguration, s conversion.Scope) error { func autoConvert_v1alpha1_EgressSelectorConfiguration_To_apiserver_EgressSelectorConfiguration(in *EgressSelectorConfiguration, out *apiserver.EgressSelectorConfiguration, s conversion.Scope) error {
out.EgressSelections = *(*[]apiserver.EgressSelection)(unsafe.Pointer(&in.EgressSelections)) if in.EgressSelections != nil {
in, out := &in.EgressSelections, &out.EgressSelections
*out = make([]apiserver.EgressSelection, len(*in))
for i := range *in {
if err := Convert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(&(*in)[i], &(*out)[i], s); err != nil {
return err
}
}
} else {
out.EgressSelections = nil
}
return nil return nil
} }
@ -242,7 +247,17 @@ func Convert_v1alpha1_EgressSelectorConfiguration_To_apiserver_EgressSelectorCon
} }
func autoConvert_apiserver_EgressSelectorConfiguration_To_v1alpha1_EgressSelectorConfiguration(in *apiserver.EgressSelectorConfiguration, out *EgressSelectorConfiguration, s conversion.Scope) error { func autoConvert_apiserver_EgressSelectorConfiguration_To_v1alpha1_EgressSelectorConfiguration(in *apiserver.EgressSelectorConfiguration, out *EgressSelectorConfiguration, s conversion.Scope) error {
out.EgressSelections = *(*[]EgressSelection)(unsafe.Pointer(&in.EgressSelections)) if in.EgressSelections != nil {
in, out := &in.EgressSelections, &out.EgressSelections
*out = make([]EgressSelection, len(*in))
for i := range *in {
if err := Convert_apiserver_EgressSelection_To_v1alpha1_EgressSelection(&(*in)[i], &(*out)[i], s); err != nil {
return err
}
}
} else {
out.EgressSelections = nil
}
return nil return nil
} }

View File

@ -0,0 +1,32 @@
/*
Copyright 2021 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1beta1
import (
conversion "k8s.io/apimachinery/pkg/conversion"
apiserver "k8s.io/apiserver/pkg/apis/apiserver"
)
func Convert_v1beta1_EgressSelection_To_apiserver_EgressSelection(in *EgressSelection, out *apiserver.EgressSelection, s conversion.Scope) error {
if err := autoConvert_v1beta1_EgressSelection_To_apiserver_EgressSelection(in, out, s); err != nil {
return err
}
if out.Name == "master" {
out.Name = "controlplane"
}
return nil
}

View File

@ -46,11 +46,6 @@ func RegisterConversions(s *runtime.Scheme) error {
}); err != nil { }); err != nil {
return err return err
} }
if err := s.AddGeneratedConversionFunc((*EgressSelection)(nil), (*apiserver.EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1beta1_EgressSelection_To_apiserver_EgressSelection(a.(*EgressSelection), b.(*apiserver.EgressSelection), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*apiserver.EgressSelection)(nil), (*EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error { if err := s.AddGeneratedConversionFunc((*apiserver.EgressSelection)(nil), (*EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_apiserver_EgressSelection_To_v1beta1_EgressSelection(a.(*apiserver.EgressSelection), b.(*EgressSelection), scope) return Convert_apiserver_EgressSelection_To_v1beta1_EgressSelection(a.(*apiserver.EgressSelection), b.(*EgressSelection), scope)
}); err != nil { }); err != nil {
@ -106,6 +101,11 @@ func RegisterConversions(s *runtime.Scheme) error {
}); err != nil { }); err != nil {
return err return err
} }
if err := s.AddConversionFunc((*EgressSelection)(nil), (*apiserver.EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1beta1_EgressSelection_To_apiserver_EgressSelection(a.(*EgressSelection), b.(*apiserver.EgressSelection), scope)
}); err != nil {
return err
}
return nil return nil
} }
@ -139,11 +139,6 @@ func autoConvert_v1beta1_EgressSelection_To_apiserver_EgressSelection(in *Egress
return nil return nil
} }
// Convert_v1beta1_EgressSelection_To_apiserver_EgressSelection is an autogenerated conversion function.
func Convert_v1beta1_EgressSelection_To_apiserver_EgressSelection(in *EgressSelection, out *apiserver.EgressSelection, s conversion.Scope) error {
return autoConvert_v1beta1_EgressSelection_To_apiserver_EgressSelection(in, out, s)
}
func autoConvert_apiserver_EgressSelection_To_v1beta1_EgressSelection(in *apiserver.EgressSelection, out *EgressSelection, s conversion.Scope) error { func autoConvert_apiserver_EgressSelection_To_v1beta1_EgressSelection(in *apiserver.EgressSelection, out *EgressSelection, s conversion.Scope) error {
out.Name = in.Name out.Name = in.Name
if err := Convert_apiserver_Connection_To_v1beta1_Connection(&in.Connection, &out.Connection, s); err != nil { if err := Convert_apiserver_Connection_To_v1beta1_Connection(&in.Connection, &out.Connection, s); err != nil {
@ -158,7 +153,17 @@ func Convert_apiserver_EgressSelection_To_v1beta1_EgressSelection(in *apiserver.
} }
func autoConvert_v1beta1_EgressSelectorConfiguration_To_apiserver_EgressSelectorConfiguration(in *EgressSelectorConfiguration, out *apiserver.EgressSelectorConfiguration, s conversion.Scope) error { func autoConvert_v1beta1_EgressSelectorConfiguration_To_apiserver_EgressSelectorConfiguration(in *EgressSelectorConfiguration, out *apiserver.EgressSelectorConfiguration, s conversion.Scope) error {
out.EgressSelections = *(*[]apiserver.EgressSelection)(unsafe.Pointer(&in.EgressSelections)) if in.EgressSelections != nil {
in, out := &in.EgressSelections, &out.EgressSelections
*out = make([]apiserver.EgressSelection, len(*in))
for i := range *in {
if err := Convert_v1beta1_EgressSelection_To_apiserver_EgressSelection(&(*in)[i], &(*out)[i], s); err != nil {
return err
}
}
} else {
out.EgressSelections = nil
}
return nil return nil
} }
@ -168,7 +173,17 @@ func Convert_v1beta1_EgressSelectorConfiguration_To_apiserver_EgressSelectorConf
} }
func autoConvert_apiserver_EgressSelectorConfiguration_To_v1beta1_EgressSelectorConfiguration(in *apiserver.EgressSelectorConfiguration, out *EgressSelectorConfiguration, s conversion.Scope) error { func autoConvert_apiserver_EgressSelectorConfiguration_To_v1beta1_EgressSelectorConfiguration(in *apiserver.EgressSelectorConfiguration, out *EgressSelectorConfiguration, s conversion.Scope) error {
out.EgressSelections = *(*[]EgressSelection)(unsafe.Pointer(&in.EgressSelections)) if in.EgressSelections != nil {
in, out := &in.EgressSelections, &out.EgressSelections
*out = make([]EgressSelection, len(*in))
for i := range *in {
if err := Convert_apiserver_EgressSelection_To_v1beta1_EgressSelection(&(*in)[i], &(*out)[i], s); err != nil {
return err
}
}
} else {
out.EgressSelections = nil
}
return nil return nil
} }

View File

@ -34,8 +34,7 @@ import (
var cfgScheme = runtime.NewScheme() var cfgScheme = runtime.NewScheme()
// validEgressSelectorNames contains the set of valid egress selctor names. // validEgressSelectorNames contains the set of valid egress selctor names.
// 'master' is deprecated in favor of 'controlplane' and will be removed in v1.22. var validEgressSelectorNames = sets.NewString("controlplane", "cluster", "etcd")
var validEgressSelectorNames = sets.NewString("master", "controlplane", "cluster", "etcd")
func init() { func init() {
install.Install(cfgScheme) install.Install(cfgScheme)
@ -103,27 +102,21 @@ func ValidateEgressSelectorConfiguration(config *apiserver.EgressSelectorConfigu
} }
} }
var foundControlPlane, foundMaster bool seen := sets.String{}
for _, service := range config.EgressSelections { for i, service := range config.EgressSelections {
canonicalName := strings.ToLower(service.Name) canonicalName := strings.ToLower(service.Name)
fldPath := field.NewPath("service", "connection")
if !validEgressSelectorNames.Has(canonicalName) { // no duplicate check
allErrs = append(allErrs, field.NotSupported(field.NewPath("egressSelection", "name"), canonicalName, validEgressSelectorNames.List())) if seen.Has(canonicalName) {
allErrs = append(allErrs, field.Duplicate(fldPath.Index(i), canonicalName))
continue continue
} }
seen.Insert(canonicalName)
if canonicalName == "master" { if !validEgressSelectorNames.Has(canonicalName) {
foundMaster = true allErrs = append(allErrs, field.NotSupported(fldPath, canonicalName, validEgressSelectorNames.List()))
continue
} }
if canonicalName == "controlplane" {
foundControlPlane = true
}
}
// error if both master and controlplane egress selectors are set
if foundMaster && foundControlPlane {
allErrs = append(allErrs, field.Forbidden(field.NewPath("egressSelection", "name"), "both egressSelection names 'master' and 'controlplane' are specified, only one is allowed"))
} }
return allErrs return allErrs

View File

@ -188,7 +188,7 @@ egressSelections:
}, },
}, },
{ {
Name: "master", Name: "controlplane",
Connection: apiserver.Connection{ Connection: apiserver.Connection{
ProxyProtocol: "HTTPConnect", ProxyProtocol: "HTTPConnect",
Transport: &apiserver.Transport{ Transport: &apiserver.Transport{
@ -338,7 +338,7 @@ func TestValidateEgressSelectorConfiguration(t *testing.T) {
}, },
EgressSelections: []apiserver.EgressSelection{ EgressSelections: []apiserver.EgressSelection{
{ {
Name: "master", Name: "controlplane",
Connection: apiserver.Connection{ Connection: apiserver.Connection{
ProxyProtocol: apiserver.ProtocolDirect, ProxyProtocol: apiserver.ProtocolDirect,
Transport: &apiserver.Transport{}, Transport: &apiserver.Transport{},
@ -512,7 +512,7 @@ func TestValidateEgressSelectorConfiguration(t *testing.T) {
}, },
}, },
{ {
name: "both master and controlplane egress selection configured", name: "duplicate egress selections configured",
expectError: true, expectError: true,
contents: &apiserver.EgressSelectorConfiguration{ contents: &apiserver.EgressSelectorConfiguration{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
@ -527,7 +527,7 @@ func TestValidateEgressSelectorConfiguration(t *testing.T) {
}, },
}, },
{ {
Name: "master", Name: "controlplane",
Connection: apiserver.Connection{ Connection: apiserver.Connection{
ProxyProtocol: apiserver.ProtocolDirect, ProxyProtocol: apiserver.ProtocolDirect,
}, },

View File

@ -91,10 +91,6 @@ func (s EgressType) AsNetworkContext() NetworkContext {
func lookupServiceName(name string) (EgressType, error) { func lookupServiceName(name string) (EgressType, error) {
switch strings.ToLower(name) { switch strings.ToLower(name) {
// 'master' is deprecated, interpret "master" as controlplane internally until removed in v1.22.
case "master":
klog.Warning("EgressSelection name 'master' is deprecated, use 'controlplane' instead")
return ControlPlane, nil
case "controlplane": case "controlplane":
return ControlPlane, nil return ControlPlane, nil
case "etcd": case "etcd":

View File

@ -64,7 +64,7 @@ func TestEgressSelector(t *testing.T) {
}, },
}, },
{ {
Name: "master", Name: "controlplane",
Connection: apiserver.Connection{ Connection: apiserver.Connection{
ProxyProtocol: apiserver.ProtocolDirect, ProxyProtocol: apiserver.ProtocolDirect,
}, },