mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 04:06:03 +00:00
Merge pull request #85246 from robscott/endpointslice-dualstack-proxy
Updating kube-proxy to support new EndpointSlice address types
This commit is contained in:
commit
27067540ff
@ -35,6 +35,12 @@ import (
|
|||||||
utilnet "k8s.io/utils/net"
|
utilnet "k8s.io/utils/net"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var supportedEndpointSliceAddressTypes = sets.NewString(
|
||||||
|
string(discovery.AddressTypeIP), // IP is a deprecated address type
|
||||||
|
string(discovery.AddressTypeIPv4),
|
||||||
|
string(discovery.AddressTypeIPv6),
|
||||||
|
)
|
||||||
|
|
||||||
// BaseEndpointInfo contains base information that defines an endpoint.
|
// BaseEndpointInfo contains base information that defines an endpoint.
|
||||||
// This could be used directly by proxier while processing endpoints,
|
// This could be used directly by proxier while processing endpoints,
|
||||||
// or can be used for constructing a more specific EndpointInfo struct
|
// or can be used for constructing a more specific EndpointInfo struct
|
||||||
@ -173,6 +179,11 @@ func (ect *EndpointChangeTracker) Update(previous, current *v1.Endpoints) bool {
|
|||||||
// It returns true if items changed, otherwise return false. Will add/update/delete items of EndpointsChangeMap.
|
// It returns true if items changed, otherwise return false. Will add/update/delete items of EndpointsChangeMap.
|
||||||
// If removeSlice is true, slice will be removed, otherwise it will be added or updated.
|
// If removeSlice is true, slice will be removed, otherwise it will be added or updated.
|
||||||
func (ect *EndpointChangeTracker) EndpointSliceUpdate(endpointSlice *discovery.EndpointSlice, removeSlice bool) bool {
|
func (ect *EndpointChangeTracker) EndpointSliceUpdate(endpointSlice *discovery.EndpointSlice, removeSlice bool) bool {
|
||||||
|
if !supportedEndpointSliceAddressTypes.Has(string(endpointSlice.AddressType)) {
|
||||||
|
klog.V(4).Infof("EndpointSlice address type not supported by kube-proxy: %s", endpointSlice.AddressType)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// This should never happen
|
// This should never happen
|
||||||
if endpointSlice == nil {
|
if endpointSlice == nil {
|
||||||
klog.Error("Nil endpointSlice passed to EndpointSliceUpdate")
|
klog.Error("Nil endpointSlice passed to EndpointSliceUpdate")
|
||||||
|
@ -1431,6 +1431,9 @@ func TestLastChangeTriggerTime(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestEndpointSliceUpdate(t *testing.T) {
|
func TestEndpointSliceUpdate(t *testing.T) {
|
||||||
|
fqdnSlice := generateEndpointSlice("svc1", "ns1", 2, 5, 999, []string{"host1"}, []*int32{utilpointer.Int32Ptr(80), utilpointer.Int32Ptr(443)})
|
||||||
|
fqdnSlice.AddressType = discovery.AddressTypeFQDN
|
||||||
|
|
||||||
testCases := map[string]struct {
|
testCases := map[string]struct {
|
||||||
startingSlices []*discovery.EndpointSlice
|
startingSlices []*discovery.EndpointSlice
|
||||||
endpointChangeTracker *EndpointChangeTracker
|
endpointChangeTracker *EndpointChangeTracker
|
||||||
@ -1473,6 +1476,18 @@ func TestEndpointSliceUpdate(t *testing.T) {
|
|||||||
expectedReturnVal: false,
|
expectedReturnVal: false,
|
||||||
expectedCurrentChange: nil,
|
expectedCurrentChange: nil,
|
||||||
},
|
},
|
||||||
|
// ensure that only valide address types are processed
|
||||||
|
"add an FQDN slice (invalid address type)": {
|
||||||
|
startingSlices: []*discovery.EndpointSlice{
|
||||||
|
generateEndpointSlice("svc1", "ns1", 1, 3, 999, []string{"host1", "host2"}, []*int32{utilpointer.Int32Ptr(80), utilpointer.Int32Ptr(443)}),
|
||||||
|
},
|
||||||
|
endpointChangeTracker: NewEndpointChangeTracker("host1", nil, nil, nil, true),
|
||||||
|
namespacedName: types.NamespacedName{Name: "svc1", Namespace: "ns1"},
|
||||||
|
paramEndpointSlice: fqdnSlice,
|
||||||
|
paramRemoveSlice: false,
|
||||||
|
expectedReturnVal: false,
|
||||||
|
expectedCurrentChange: nil,
|
||||||
|
},
|
||||||
// test additions to existing state
|
// test additions to existing state
|
||||||
"add a slice that overlaps with existing state": {
|
"add a slice that overlaps with existing state": {
|
||||||
startingSlices: []*discovery.EndpointSlice{
|
startingSlices: []*discovery.EndpointSlice{
|
||||||
|
@ -153,25 +153,47 @@ func (proxier *metaProxier) OnEndpointsSynced() {
|
|||||||
// OnEndpointSliceAdd is called whenever creation of a new endpoint slice object
|
// OnEndpointSliceAdd is called whenever creation of a new endpoint slice object
|
||||||
// is observed.
|
// is observed.
|
||||||
func (proxier *metaProxier) OnEndpointSliceAdd(endpointSlice *discovery.EndpointSlice) {
|
func (proxier *metaProxier) OnEndpointSliceAdd(endpointSlice *discovery.EndpointSlice) {
|
||||||
// noop
|
switch endpointSlice.AddressType {
|
||||||
|
case discovery.AddressTypeIPv4:
|
||||||
|
proxier.ipv4Proxier.OnEndpointSliceAdd(endpointSlice)
|
||||||
|
case discovery.AddressTypeIPv6:
|
||||||
|
proxier.ipv6Proxier.OnEndpointSliceAdd(endpointSlice)
|
||||||
|
default:
|
||||||
|
klog.V(4).Infof("EndpointSlice address type not supported by kube-proxy: %s", endpointSlice.AddressType)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnEndpointSliceUpdate is called whenever modification of an existing endpoint
|
// OnEndpointSliceUpdate is called whenever modification of an existing endpoint
|
||||||
// slice object is observed.
|
// slice object is observed.
|
||||||
func (proxier *metaProxier) OnEndpointSliceUpdate(_, endpointSlice *discovery.EndpointSlice) {
|
func (proxier *metaProxier) OnEndpointSliceUpdate(oldEndpointSlice, newEndpointSlice *discovery.EndpointSlice) {
|
||||||
//noop
|
switch newEndpointSlice.AddressType {
|
||||||
|
case discovery.AddressTypeIPv4:
|
||||||
|
proxier.ipv4Proxier.OnEndpointSliceUpdate(oldEndpointSlice, newEndpointSlice)
|
||||||
|
case discovery.AddressTypeIPv6:
|
||||||
|
proxier.ipv6Proxier.OnEndpointSliceUpdate(oldEndpointSlice, newEndpointSlice)
|
||||||
|
default:
|
||||||
|
klog.V(4).Infof("EndpointSlice address type not supported by kube-proxy: %s", newEndpointSlice.AddressType)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnEndpointSliceDelete is called whenever deletion of an existing endpoint slice
|
// OnEndpointSliceDelete is called whenever deletion of an existing endpoint slice
|
||||||
// object is observed.
|
// object is observed.
|
||||||
func (proxier *metaProxier) OnEndpointSliceDelete(endpointSlice *discovery.EndpointSlice) {
|
func (proxier *metaProxier) OnEndpointSliceDelete(endpointSlice *discovery.EndpointSlice) {
|
||||||
//noop
|
switch endpointSlice.AddressType {
|
||||||
|
case discovery.AddressTypeIPv4:
|
||||||
|
proxier.ipv4Proxier.OnEndpointSliceDelete(endpointSlice)
|
||||||
|
case discovery.AddressTypeIPv6:
|
||||||
|
proxier.ipv6Proxier.OnEndpointSliceDelete(endpointSlice)
|
||||||
|
default:
|
||||||
|
klog.V(4).Infof("EndpointSlice address type not supported by kube-proxy: %s", endpointSlice.AddressType)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnEndpointSlicesSynced is called once all the initial event handlers were
|
// OnEndpointSlicesSynced is called once all the initial event handlers were
|
||||||
// called and the state is fully propagated to local cache.
|
// called and the state is fully propagated to local cache.
|
||||||
func (proxier *metaProxier) OnEndpointSlicesSynced() {
|
func (proxier *metaProxier) OnEndpointSlicesSynced() {
|
||||||
//noop
|
proxier.ipv4Proxier.OnEndpointSlicesSynced()
|
||||||
|
proxier.ipv6Proxier.OnEndpointSlicesSynced()
|
||||||
}
|
}
|
||||||
|
|
||||||
// endpointsIPFamily that returns IPFamily of endpoints or error if
|
// endpointsIPFamily that returns IPFamily of endpoints or error if
|
||||||
|
Loading…
Reference in New Issue
Block a user