Merge pull request #99746 from swetharepakula/nodeName-feature-gate-ga

Graduate EndpointSliceNodeName feature gate to GA
This commit is contained in:
Kubernetes Prow Robot 2021-03-04 02:09:03 -08:00 committed by GitHub
commit cc4bd511bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 68 additions and 167 deletions

View File

@ -452,6 +452,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"10.0.0.1"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod0"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
{
Conditions: discovery.EndpointConditions{
@ -460,6 +461,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"10.0.0.2"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod1"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
},
},
@ -565,6 +567,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"fd08::5678:0000:0000:9abc:def0"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod1"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
},
},
@ -670,6 +673,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"10.0.0.1"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod0"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
{
Conditions: discovery.EndpointConditions{
@ -680,6 +684,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"10.0.0.2"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod1"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
},
terminatingGateEnabled: true,
@ -784,6 +789,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"10.0.0.1"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod0"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
},
terminatingGateEnabled: false,
@ -890,6 +896,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"10.0.0.1"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod0"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
{
Conditions: discovery.EndpointConditions{
@ -900,6 +907,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"10.0.0.2"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod1"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
},
terminatingGateEnabled: true,
@ -1004,6 +1012,7 @@ func TestSyncService(t *testing.T) {
Addresses: []string{"10.0.0.1"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod0"},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
},
},
terminatingGateEnabled: false,

View File

@ -131,6 +131,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -156,6 +157,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -186,6 +188,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -213,6 +216,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -230,6 +234,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -253,6 +258,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -270,6 +276,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -295,6 +302,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -312,6 +320,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -337,6 +346,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -364,6 +374,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -390,6 +401,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,
@ -406,6 +418,7 @@ func TestReconcile1Pod(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &corev1.ObjectReference{
Kind: "Pod",
Namespace: namespace,

View File

@ -252,7 +252,6 @@ func TestPodToEndpoint(t *testing.T) {
expectedEndpoint discovery.Endpoint
publishNotReadyAddresses bool
terminatingGateEnabled bool
nodeNameGateEnabled bool
}{
{
name: "Ready pod",
@ -262,6 +261,7 @@ func TestPodToEndpoint(t *testing.T) {
Addresses: []string{"1.2.3.5"},
Conditions: discovery.EndpointConditions{Ready: utilpointer.BoolPtr(true)},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -279,6 +279,7 @@ func TestPodToEndpoint(t *testing.T) {
Addresses: []string{"1.2.3.5"},
Conditions: discovery.EndpointConditions{Ready: utilpointer.BoolPtr(true)},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -296,6 +297,7 @@ func TestPodToEndpoint(t *testing.T) {
Addresses: []string{"1.2.3.5"},
Conditions: discovery.EndpointConditions{Ready: utilpointer.BoolPtr(false)},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -309,24 +311,6 @@ func TestPodToEndpoint(t *testing.T) {
name: "Unready pod + publishNotReadyAddresses",
pod: unreadyPod,
svc: &svcPublishNotReady,
expectedEndpoint: discovery.Endpoint{
Addresses: []string{"1.2.3.5"},
Conditions: discovery.EndpointConditions{Ready: utilpointer.BoolPtr(true)},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
Name: readyPod.Name,
UID: readyPod.UID,
ResourceVersion: readyPod.ResourceVersion,
},
},
},
{
name: "Ready pod + node name gate enabled",
pod: readyPod,
svc: &svc,
nodeNameGateEnabled: true,
expectedEndpoint: discovery.Endpoint{
Addresses: []string{"1.2.3.5"},
Conditions: discovery.EndpointConditions{Ready: utilpointer.BoolPtr(true)},
@ -354,6 +338,7 @@ func TestPodToEndpoint(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -376,6 +361,7 @@ func TestPodToEndpoint(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -399,6 +385,7 @@ func TestPodToEndpoint(t *testing.T) {
"topology.kubernetes.io/zone": "us-central1-a",
"topology.kubernetes.io/region": "us-central1",
},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -420,6 +407,7 @@ func TestPodToEndpoint(t *testing.T) {
Terminating: utilpointer.BoolPtr(false),
},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -440,6 +428,7 @@ func TestPodToEndpoint(t *testing.T) {
Ready: utilpointer.BoolPtr(false),
},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -462,6 +451,7 @@ func TestPodToEndpoint(t *testing.T) {
Terminating: utilpointer.BoolPtr(true),
},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -482,6 +472,7 @@ func TestPodToEndpoint(t *testing.T) {
Ready: utilpointer.BoolPtr(false),
},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -504,6 +495,7 @@ func TestPodToEndpoint(t *testing.T) {
Terminating: utilpointer.BoolPtr(true),
},
Topology: map[string]string{"kubernetes.io/hostname": "node-1"},
NodeName: utilpointer.StringPtr("node-1"),
TargetRef: &v1.ObjectReference{
Kind: "Pod",
Namespace: ns,
@ -519,7 +511,6 @@ func TestPodToEndpoint(t *testing.T) {
for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.EndpointSliceTerminatingCondition, testCase.terminatingGateEnabled)()
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.EndpointSliceNodeName, testCase.nodeNameGateEnabled)()
endpoint := podToEndpoint(testCase.pod, testCase.node, testCase.svc, discovery.AddressTypeIPv4)
if !reflect.DeepEqual(testCase.expectedEndpoint, endpoint) {

View File

@ -27,11 +27,8 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/rand"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/kubernetes/fake"
k8stesting "k8s.io/client-go/testing"
featuregatetesting "k8s.io/component-base/featuregate/testing"
"k8s.io/kubernetes/pkg/features"
utilpointer "k8s.io/utils/pointer"
)
@ -81,15 +78,8 @@ func TestNewEndpointSlice(t *testing.T) {
}
func TestAddressToEndpoint(t *testing.T) {
testCases := []struct {
name string
epAddress v1.EndpointAddress
expectedEndpoint discovery.Endpoint
ready bool
nodeNameGateEnabled bool
}{{
name: "simple + gate enabled",
epAddress: v1.EndpointAddress{
//name: "simple + gate enabled",
epAddress := v1.EndpointAddress{
IP: "10.1.2.3",
Hostname: "foo",
NodeName: utilpointer.StringPtr("node-abc"),
@ -99,65 +89,28 @@ func TestAddressToEndpoint(t *testing.T) {
Namespace: "default",
Name: "foo",
},
},
ready: true,
nodeNameGateEnabled: true,
expectedEndpoint: discovery.Endpoint{
Addresses: []string{"10.1.2.3"},
Hostname: utilpointer.StringPtr("foo"),
Conditions: discovery.EndpointConditions{
Ready: utilpointer.BoolPtr(true),
},
Topology: map[string]string{
"kubernetes.io/hostname": "node-abc",
},
TargetRef: &v1.ObjectReference{
APIVersion: "v1",
Kind: "Pod",
Namespace: "default",
Name: "foo",
},
NodeName: utilpointer.StringPtr("node-abc"),
},
}, {
name: "simple + gate disabled",
epAddress: v1.EndpointAddress{
IP: "10.1.2.3",
Hostname: "foo",
NodeName: utilpointer.StringPtr("node-abc"),
TargetRef: &v1.ObjectReference{
APIVersion: "v1",
Kind: "Pod",
Namespace: "default",
Name: "foo",
},
},
ready: true,
nodeNameGateEnabled: false,
expectedEndpoint: discovery.Endpoint{
Addresses: []string{"10.1.2.3"},
Hostname: utilpointer.StringPtr("foo"),
Conditions: discovery.EndpointConditions{
Ready: utilpointer.BoolPtr(true),
},
Topology: map[string]string{
"kubernetes.io/hostname": "node-abc",
},
TargetRef: &v1.ObjectReference{
APIVersion: "v1",
Kind: "Pod",
Namespace: "default",
Name: "foo",
},
},
}}
for _, tc := range testCases {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.EndpointSliceNodeName, tc.nodeNameGateEnabled)()
ep := addressToEndpoint(tc.epAddress, tc.ready)
assert.EqualValues(t, tc.expectedEndpoint, *ep)
}
ready := true
expectedEndpoint := discovery.Endpoint{
Addresses: []string{"10.1.2.3"},
Hostname: utilpointer.StringPtr("foo"),
Conditions: discovery.EndpointConditions{
Ready: utilpointer.BoolPtr(true),
},
Topology: map[string]string{
"kubernetes.io/hostname": "node-abc",
},
TargetRef: &v1.ObjectReference{
APIVersion: "v1",
Kind: "Pod",
Namespace: "default",
Name: "foo",
},
NodeName: utilpointer.StringPtr("node-abc"),
}
ep := addressToEndpoint(epAddress, ready)
assert.EqualValues(t, expectedEndpoint, *ep)
}
// Test helpers

View File

@ -753,7 +753,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
EndpointSlice: {Default: true, PreRelease: featuregate.Beta},
EndpointSliceProxying: {Default: true, PreRelease: featuregate.Beta},
EndpointSliceTerminatingCondition: {Default: false, PreRelease: featuregate.Alpha},
EndpointSliceNodeName: {Default: false, PreRelease: featuregate.Alpha},
EndpointSliceNodeName: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, //remove in 1.25
WindowsEndpointSliceProxying: {Default: false, PreRelease: featuregate.Alpha},
StartupProbe: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.23
AllowInsecureBackendProxy: {Default: true, PreRelease: featuregate.Beta},

View File

@ -31,7 +31,6 @@ func Test_dropDisabledFieldsOnCreate(t *testing.T) {
testcases := []struct {
name string
terminatingGateEnabled bool
nodeNameGateEnabled bool
eps *discovery.EndpointSlice
expectedEPS *discovery.EndpointSlice
}{
@ -133,7 +132,6 @@ func Test_dropDisabledFieldsOnCreate(t *testing.T) {
},
{
name: "node name gate enabled, field should be allowed",
nodeNameGateEnabled: true,
eps: &discovery.EndpointSlice{
Endpoints: []discovery.Endpoint{
{
@ -155,36 +153,11 @@ func Test_dropDisabledFieldsOnCreate(t *testing.T) {
},
},
},
{
name: "node name gate disabled, field should be allowed",
nodeNameGateEnabled: false,
eps: &discovery.EndpointSlice{
Endpoints: []discovery.Endpoint{
{
NodeName: utilpointer.StringPtr("node-1"),
},
{
NodeName: utilpointer.StringPtr("node-2"),
},
},
},
expectedEPS: &discovery.EndpointSlice{
Endpoints: []discovery.Endpoint{
{
NodeName: nil,
},
{
NodeName: nil,
},
},
},
},
}
for _, testcase := range testcases {
t.Run(testcase.name, func(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.EndpointSliceTerminatingCondition, testcase.terminatingGateEnabled)()
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.EndpointSliceNodeName, testcase.nodeNameGateEnabled)()
dropDisabledFieldsOnCreate(testcase.eps)
if !apiequality.Semantic.DeepEqual(testcase.eps, testcase.expectedEPS) {
@ -200,7 +173,6 @@ func Test_dropDisabledFieldsOnUpdate(t *testing.T) {
testcases := []struct {
name string
terminatingGateEnabled bool
nodeNameGateEnabled bool
oldEPS *discovery.EndpointSlice
newEPS *discovery.EndpointSlice
expectedEPS *discovery.EndpointSlice
@ -484,7 +456,6 @@ func Test_dropDisabledFieldsOnUpdate(t *testing.T) {
},
{
name: "node name gate enabled, set on new EPS",
nodeNameGateEnabled: true,
oldEPS: &discovery.EndpointSlice{
Endpoints: []discovery.Endpoint{
{
@ -516,43 +487,8 @@ func Test_dropDisabledFieldsOnUpdate(t *testing.T) {
},
},
},
{
name: "node name gate disabled, set on new EPS",
nodeNameGateEnabled: false,
oldEPS: &discovery.EndpointSlice{
Endpoints: []discovery.Endpoint{
{
NodeName: nil,
},
{
NodeName: nil,
},
},
},
newEPS: &discovery.EndpointSlice{
Endpoints: []discovery.Endpoint{
{
NodeName: utilpointer.StringPtr("node-1"),
},
{
NodeName: utilpointer.StringPtr("node-2"),
},
},
},
expectedEPS: &discovery.EndpointSlice{
Endpoints: []discovery.Endpoint{
{
NodeName: nil,
},
{
NodeName: nil,
},
},
},
},
{
name: "node name gate disabled, set on old and updated EPS",
nodeNameGateEnabled: false,
oldEPS: &discovery.EndpointSlice{
Endpoints: []discovery.Endpoint{
{
@ -589,7 +525,6 @@ func Test_dropDisabledFieldsOnUpdate(t *testing.T) {
for _, testcase := range testcases {
t.Run(testcase.name, func(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.EndpointSliceTerminatingCondition, testcase.terminatingGateEnabled)()
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.EndpointSliceNodeName, testcase.nodeNameGateEnabled)()
dropDisabledFieldsOnUpdate(testcase.oldEPS, testcase.newEPS)
if !apiequality.Semantic.DeepEqual(testcase.newEPS, testcase.expectedEPS) {