mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
kube-proxy dual-stack infers IP family from ClusterIP
when dual-stack kube-proxy infers the service IP family from the ClusterIP because ipFamily field is going to be deprecated. Since kube-proxy skip headless and externalname services we can safely obtain the IPFamily from the ClusterIP field Signed-off-by: Antonio Ojea <antonio.ojea.garcia@gmail.com>
This commit is contained in:
parent
a46e1f0613
commit
c7a29774c9
@ -9,6 +9,7 @@ go_library(
|
|||||||
deps = [
|
deps = [
|
||||||
"//pkg/proxy:go_default_library",
|
"//pkg/proxy:go_default_library",
|
||||||
"//pkg/proxy/config:go_default_library",
|
"//pkg/proxy/config:go_default_library",
|
||||||
|
"//pkg/proxy/util:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/discovery/v1beta1:go_default_library",
|
"//staging/src/k8s.io/api/discovery/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/klog/v2:go_default_library",
|
"//vendor/k8s.io/klog/v2:go_default_library",
|
||||||
|
@ -19,10 +19,11 @@ package metaproxier
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kubernetes/pkg/proxy"
|
"k8s.io/kubernetes/pkg/proxy"
|
||||||
"k8s.io/kubernetes/pkg/proxy/config"
|
"k8s.io/kubernetes/pkg/proxy/config"
|
||||||
|
utilproxy "k8s.io/kubernetes/pkg/proxy/util"
|
||||||
|
|
||||||
utilnet "k8s.io/utils/net"
|
utilnet "k8s.io/utils/net"
|
||||||
|
|
||||||
@ -62,33 +63,41 @@ func (proxier *metaProxier) SyncLoop() {
|
|||||||
|
|
||||||
// OnServiceAdd is called whenever creation of new service object is observed.
|
// OnServiceAdd is called whenever creation of new service object is observed.
|
||||||
func (proxier *metaProxier) OnServiceAdd(service *v1.Service) {
|
func (proxier *metaProxier) OnServiceAdd(service *v1.Service) {
|
||||||
if *(service.Spec.IPFamily) == v1.IPv4Protocol {
|
if utilproxy.ShouldSkipService(service) {
|
||||||
proxier.ipv4Proxier.OnServiceAdd(service)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if utilnet.IsIPv6String(service.Spec.ClusterIP) {
|
||||||
proxier.ipv6Proxier.OnServiceAdd(service)
|
proxier.ipv6Proxier.OnServiceAdd(service)
|
||||||
|
} else {
|
||||||
|
proxier.ipv4Proxier.OnServiceAdd(service)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnServiceUpdate is called whenever modification of an existing
|
// OnServiceUpdate is called whenever modification of an existing
|
||||||
// service object is observed.
|
// service object is observed.
|
||||||
func (proxier *metaProxier) OnServiceUpdate(oldService, service *v1.Service) {
|
func (proxier *metaProxier) OnServiceUpdate(oldService, service *v1.Service) {
|
||||||
// IPFamily is immutable, hence we only need to check on the new service
|
if utilproxy.ShouldSkipService(service) {
|
||||||
if *(service.Spec.IPFamily) == v1.IPv4Protocol {
|
|
||||||
proxier.ipv4Proxier.OnServiceUpdate(oldService, service)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// IPFamily is immutable, hence we only need to check on the new service
|
||||||
|
if utilnet.IsIPv6String(service.Spec.ClusterIP) {
|
||||||
proxier.ipv6Proxier.OnServiceUpdate(oldService, service)
|
proxier.ipv6Proxier.OnServiceUpdate(oldService, service)
|
||||||
|
} else {
|
||||||
|
proxier.ipv4Proxier.OnServiceUpdate(oldService, service)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnServiceDelete is called whenever deletion of an existing service
|
// OnServiceDelete is called whenever deletion of an existing service
|
||||||
// object is observed.
|
// object is observed.
|
||||||
func (proxier *metaProxier) OnServiceDelete(service *v1.Service) {
|
func (proxier *metaProxier) OnServiceDelete(service *v1.Service) {
|
||||||
if *(service.Spec.IPFamily) == v1.IPv4Protocol {
|
if utilproxy.ShouldSkipService(service) {
|
||||||
proxier.ipv4Proxier.OnServiceDelete(service)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if utilnet.IsIPv6String(service.Spec.ClusterIP) {
|
||||||
proxier.ipv6Proxier.OnServiceDelete(service)
|
proxier.ipv6Proxier.OnServiceDelete(service)
|
||||||
|
} else {
|
||||||
|
proxier.ipv4Proxier.OnServiceDelete(service)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnServiceSynced is called once all the initial event handlers were
|
// OnServiceSynced is called once all the initial event handlers were
|
||||||
|
Loading…
Reference in New Issue
Block a user