mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-10 21:50:05 +00:00
Implements Service Internal Traffic Policy
1. Add API definitions; 2. Add feature gate and drops the field when feature gate is not on; 3. Set default values for the field; 4. Add API Validation 5. add kube-proxy iptables and ipvs implementations 6. add tests
This commit is contained in:
@@ -20,7 +20,7 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
utilnet "k8s.io/utils/net"
|
||||
)
|
||||
|
||||
@@ -76,6 +76,15 @@ func RequestsOnlyLocalTraffic(service *v1.Service) bool {
|
||||
return service.Spec.ExternalTrafficPolicy == v1.ServiceExternalTrafficPolicyTypeLocal
|
||||
}
|
||||
|
||||
// RequestsOnlyLocalTrafficForInternal checks if service prefers Node Local
|
||||
// endpoints for internal traffic
|
||||
func RequestsOnlyLocalTrafficForInternal(service *v1.Service) bool {
|
||||
if service.Spec.InternalTrafficPolicy == nil {
|
||||
return false
|
||||
}
|
||||
return *service.Spec.InternalTrafficPolicy == v1.ServiceInternalTrafficPolicyLocal
|
||||
}
|
||||
|
||||
// NeedsHealthCheck checks if service needs health check.
|
||||
func NeedsHealthCheck(service *v1.Service) bool {
|
||||
if service.Spec.Type != v1.ServiceTypeLoadBalancer {
|
||||
|
@@ -20,7 +20,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
utilnet "k8s.io/utils/net"
|
||||
)
|
||||
|
||||
@@ -214,3 +214,30 @@ func TestNeedsHealthCheck(t *testing.T) {
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestRequestsOnlyLocalTrafficForInternal(t *testing.T) {
|
||||
checkRequestsOnlyLocalTrafficForInternal := func(expected bool, service *v1.Service) {
|
||||
res := RequestsOnlyLocalTrafficForInternal(service)
|
||||
if res != expected {
|
||||
t.Errorf("Expected internal local traffic = %v, got %v",
|
||||
expected, res)
|
||||
}
|
||||
}
|
||||
|
||||
// default InternalTrafficPolicy is nil
|
||||
checkRequestsOnlyLocalTrafficForInternal(false, &v1.Service{})
|
||||
|
||||
local := v1.ServiceInternalTrafficPolicyLocal
|
||||
checkRequestsOnlyLocalTrafficForInternal(true, &v1.Service{
|
||||
Spec: v1.ServiceSpec{
|
||||
InternalTrafficPolicy: &local,
|
||||
},
|
||||
})
|
||||
|
||||
cluster := v1.ServiceInternalTrafficPolicyCluster
|
||||
checkRequestsOnlyLocalTrafficForInternal(false, &v1.Service{
|
||||
Spec: v1.ServiceSpec{
|
||||
InternalTrafficPolicy: &cluster,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user