mirror of https://github.com/k3s-io/k3s
Merge pull request #71035 from Nordix/issue-68437
Fixes NodePort in ipv6 with proxy-mode=ipvspull/564/head
commit
0914272a42
|
@ -30,11 +30,12 @@ import (
|
||||||
|
|
||||||
type netlinkHandle struct {
|
type netlinkHandle struct {
|
||||||
netlink.Handle
|
netlink.Handle
|
||||||
|
isIPv6 bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewNetLinkHandle will crate a new NetLinkHandle
|
// NewNetLinkHandle will crate a new NetLinkHandle
|
||||||
func NewNetLinkHandle() NetLinkHandle {
|
func NewNetLinkHandle(isIPv6 bool) NetLinkHandle {
|
||||||
return &netlinkHandle{netlink.Handle{}}
|
return &netlinkHandle{netlink.Handle{}, isIPv6}
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnsureAddressBind checks if address is bound to the interface and, if not, binds it. If the address is already bound, return true.
|
// EnsureAddressBind checks if address is bound to the interface and, if not, binds it. If the address is already bound, return true.
|
||||||
|
@ -181,7 +182,11 @@ func (h *netlinkHandle) GetLocalAddresses(dev, filterDev string) (sets.String, e
|
||||||
if route.LinkIndex == filterLinkIndex {
|
if route.LinkIndex == filterLinkIndex {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if route.Src != nil {
|
if h.isIPv6 {
|
||||||
|
if route.Dst.IP.To4() == nil && !route.Dst.IP.IsLinkLocalUnicast() {
|
||||||
|
res.Insert(route.Dst.IP.String())
|
||||||
|
}
|
||||||
|
} else if route.Src != nil {
|
||||||
res.Insert(route.Src.String())
|
res.Insert(route.Src.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ type emptyHandle struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewNetLinkHandle will create an EmptyHandle
|
// NewNetLinkHandle will create an EmptyHandle
|
||||||
func NewNetLinkHandle() NetLinkHandle {
|
func NewNetLinkHandle(ipv6 bool) NetLinkHandle {
|
||||||
return &emptyHandle{}
|
return &emptyHandle{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -406,14 +406,14 @@ func NewProxier(ipt utiliptables.Interface,
|
||||||
healthzServer: healthzServer,
|
healthzServer: healthzServer,
|
||||||
ipvs: ipvs,
|
ipvs: ipvs,
|
||||||
ipvsScheduler: scheduler,
|
ipvsScheduler: scheduler,
|
||||||
ipGetter: &realIPGetter{nl: NewNetLinkHandle()},
|
ipGetter: &realIPGetter{nl: NewNetLinkHandle(isIPv6)},
|
||||||
iptablesData: bytes.NewBuffer(nil),
|
iptablesData: bytes.NewBuffer(nil),
|
||||||
filterChainsData: bytes.NewBuffer(nil),
|
filterChainsData: bytes.NewBuffer(nil),
|
||||||
natChains: bytes.NewBuffer(nil),
|
natChains: bytes.NewBuffer(nil),
|
||||||
natRules: bytes.NewBuffer(nil),
|
natRules: bytes.NewBuffer(nil),
|
||||||
filterChains: bytes.NewBuffer(nil),
|
filterChains: bytes.NewBuffer(nil),
|
||||||
filterRules: bytes.NewBuffer(nil),
|
filterRules: bytes.NewBuffer(nil),
|
||||||
netlinkHandle: NewNetLinkHandle(),
|
netlinkHandle: NewNetLinkHandle(isIPv6),
|
||||||
ipset: ipset,
|
ipset: ipset,
|
||||||
nodePortAddresses: nodePortAddresses,
|
nodePortAddresses: nodePortAddresses,
|
||||||
networkInterfacer: utilproxy.RealNetwork{},
|
networkInterfacer: utilproxy.RealNetwork{},
|
||||||
|
@ -600,7 +600,7 @@ func CleanupLeftovers(ipvs utilipvs.Interface, ipt utiliptables.Interface, ipset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Delete dummy interface created by ipvs Proxier.
|
// Delete dummy interface created by ipvs Proxier.
|
||||||
nl := NewNetLinkHandle()
|
nl := NewNetLinkHandle(false)
|
||||||
err := nl.DeleteDummyDevice(DefaultDummyDevice)
|
err := nl.DeleteDummyDevice(DefaultDummyDevice)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Errorf("Error deleting dummy device %s created by IPVS proxier: %v", DefaultDummyDevice, err)
|
klog.Errorf("Error deleting dummy device %s created by IPVS proxier: %v", DefaultDummyDevice, err)
|
||||||
|
|
Loading…
Reference in New Issue