Merge pull request #125838 from gauravkghildiyal/kep-4444-beta

Promote ServiceTrafficDistribution feature-gate to beta and enable by default. Also add missing integration tests.
This commit is contained in:
Kubernetes Prow Robot 2024-07-04 17:20:08 -07:00 committed by GitHub
commit 0a59545f4d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 85 additions and 1 deletions

View File

@ -733,6 +733,7 @@ const (
// owner: @gauravkghildiyal @robscott
// kep: https://kep.k8s.io/4444
// alpha: v1.30
// beta: v1.31
//
// Enables trafficDistribution field on Services.
ServiceTrafficDistribution featuregate.Feature = "ServiceTrafficDistribution"
@ -1156,7 +1157,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
ServiceAccountTokenNodeBindingValidation: {Default: true, PreRelease: featuregate.Beta},
ServiceTrafficDistribution: {Default: false, PreRelease: featuregate.Alpha},
ServiceTrafficDistribution: {Default: true, PreRelease: featuregate.Beta},
SidecarContainers: {Default: true, PreRelease: featuregate.Beta},

View File

@ -24,6 +24,7 @@ import (
"testing"
"time"
"github.com/google/go-cmp/cmp"
corev1 "k8s.io/api/core/v1"
discoveryv1 "k8s.io/api/discovery/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -568,6 +569,88 @@ func Test_TransitionsForTrafficDistribution(t *testing.T) {
logsBuffer.Reset()
}
func Test_TrafficDistribution_FeatureGateEnableDisable(t *testing.T) {
////////////////////////////////////////////////////////////////////////////
// Start kube-apiserver with ServiceTrafficDistribution feature-gate
// enabled.
////////////////////////////////////////////////////////////////////////////
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceTrafficDistribution, true)
sharedEtcd := framework.SharedEtcd()
server1 := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.DefaultTestServerFlags(), sharedEtcd)
client1, err := clientset.NewForConfig(server1.ClientConfig)
if err != nil {
t.Fatalf("Error creating clientset: %v", err)
}
////////////////////////////////////////////////////////////////////////////
// Create a Service and set `trafficDistribution: PreferLocal` field.
//
// Assert that the field is present in the created Service.
////////////////////////////////////////////////////////////////////////////
ctx := ktesting.Init(t)
defer ctx.Cancel("test has completed")
ns := framework.CreateNamespaceOrDie(client1, "test-service-traffic-distribution", t)
trafficDist := corev1.ServiceTrafficDistributionPreferClose
svcToCreate := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "test-service",
Namespace: ns.GetName(),
},
Spec: corev1.ServiceSpec{
Selector: map[string]string{
"app": "v1",
},
Ports: []corev1.ServicePort{
{Name: "port-443", Port: 443, Protocol: "TCP", TargetPort: intstr.FromInt32(443)},
},
TrafficDistribution: &trafficDist,
},
}
svc, err := client1.CoreV1().Services(ns.Name).Create(ctx, svcToCreate, metav1.CreateOptions{})
if err != nil {
t.Fatalf("Failed to create test service: %v", err)
}
if diff := cmp.Diff(svcToCreate.Spec.TrafficDistribution, svc.Spec.TrafficDistribution); diff != "" {
t.Fatalf("Unexpected diff found in service .spec.trafficDistribution after creation: (-want, +got)\n:%v", diff)
}
////////////////////////////////////////////////////////////////////////////
// Restart the kube-apiserver with ServiceTrafficDistribution feature-gate
// disabled. Update the test service.
//
// Assert that updating the service does not drop the field since it was
// being used previously.
////////////////////////////////////////////////////////////////////////////
server1.TearDownFn()
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceTrafficDistribution, false)
server2 := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.DefaultTestServerFlags(), sharedEtcd)
defer server2.TearDownFn()
client2, err := clientset.NewForConfig(server2.ClientConfig)
if err != nil {
t.Fatalf("Error creating clientset: %v", err)
}
svcToUpdate := svcToCreate.DeepCopy()
svcToUpdate.Spec.Selector = map[string]string{"app": "v2"}
svc, err = client2.CoreV1().Services(ns.Name).Update(ctx, svcToUpdate, metav1.UpdateOptions{})
if err != nil {
t.Fatalf("Failed to update test service: %v", err)
}
if diff := cmp.Diff(svcToUpdate.Spec.TrafficDistribution, svc.Spec.TrafficDistribution); diff != "" {
t.Fatalf("Unexpected diff found in service .spec.trafficDistribution after update: (-want, +got)\n:%v", diff)
}
}
func Test_ServiceClusterIPSelector(t *testing.T) {
server := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.DefaultTestServerFlags(), framework.SharedEtcd())
defer server.TearDownFn()