mirror of
https://github.com/cloudnativelabs/kube-router.git
synced 2025-10-08 08:21:28 +02:00
Adding ability to disable IP-in-IP tunnelining for cross node pod-to-pod connectivity
where nodes are in different subnet. With tunneling disabled its expected that default gateway has learned the pod CIDR's allocated for all the nodes and can route the pod-to-pod traffic across nodes in different subnets Fixes #119
This commit is contained in:
parent
1c4adafd32
commit
ca97d0d6eb
@ -54,6 +54,7 @@ type NetworkRoutingController struct {
|
|||||||
globalPeerAsnNumber uint32
|
globalPeerAsnNumber uint32
|
||||||
bgpFullMeshMode bool
|
bgpFullMeshMode bool
|
||||||
podSubnetsIpSet *ipset.IPSet
|
podSubnetsIpSet *ipset.IPSet
|
||||||
|
enableOverlays bool
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -464,6 +465,24 @@ func (nrc *NetworkRoutingController) injectRoute(path *table.Path) error {
|
|||||||
if !nrc.nodeSubnet.Contains(nexthop) {
|
if !nrc.nodeSubnet.Contains(nexthop) {
|
||||||
tunnelName := "tun-" + strings.Replace(nexthop.String(), ".", "", -1)
|
tunnelName := "tun-" + strings.Replace(nexthop.String(), ".", "", -1)
|
||||||
glog.Infof("Found node: " + nexthop.String() + " to be in different subnet.")
|
glog.Infof("Found node: " + nexthop.String() + " to be in different subnet.")
|
||||||
|
|
||||||
|
// if overlay is not enabled then skip creating tunnels and adding route
|
||||||
|
if !nrc.enableOverlays {
|
||||||
|
glog.Infof("Found node: " + nexthop.String() + " to be in different subnet but overlays are " +
|
||||||
|
"disabled so not creating any tunnel and injecting route for the node's pod CIDR.")
|
||||||
|
glog.Infof("Cleaning up if there is any existing tunnel interface for the node")
|
||||||
|
link, err := netlink.LinkByName(tunnelName)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
err = netlink.LinkDel(link)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Failed to delete tunnel link for the node due to " + err.Error())
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// create ip-in-ip tunnel and inject route as overlay is enabled
|
||||||
var link netlink.Link
|
var link netlink.Link
|
||||||
var err error
|
var err error
|
||||||
link, err = netlink.LinkByName(tunnelName)
|
link, err = netlink.LinkByName(tunnelName)
|
||||||
@ -1007,6 +1026,8 @@ func NewNetworkRoutingController(clientset *kubernetes.Clientset,
|
|||||||
|
|
||||||
nrc.advertiseClusterIp = kubeRouterConfig.AdvertiseClusterIp
|
nrc.advertiseClusterIp = kubeRouterConfig.AdvertiseClusterIp
|
||||||
|
|
||||||
|
nrc.enableOverlays = kubeRouterConfig.EnableOverlay
|
||||||
|
|
||||||
if (len(kubeRouterConfig.PeerRouter) != 0 && len(kubeRouterConfig.PeerAsn) == 0) ||
|
if (len(kubeRouterConfig.PeerRouter) != 0 && len(kubeRouterConfig.PeerAsn) == 0) ||
|
||||||
(len(kubeRouterConfig.PeerRouter) == 0 && len(kubeRouterConfig.PeerAsn) != 0) {
|
(len(kubeRouterConfig.PeerRouter) == 0 && len(kubeRouterConfig.PeerAsn) != 0) {
|
||||||
return nil, errors.New("Either both or none of the params --peer-asn, --peer-router must be specified")
|
return nil, errors.New("Either both or none of the params --peer-asn, --peer-router must be specified")
|
||||||
|
@ -29,6 +29,7 @@ type KubeRouterConfig struct {
|
|||||||
FullMeshMode bool
|
FullMeshMode bool
|
||||||
GlobalHairpinMode bool
|
GlobalHairpinMode bool
|
||||||
NodePortBindOnAllIp bool
|
NodePortBindOnAllIp bool
|
||||||
|
EnableOverlay bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewKubeRouterConfig() *KubeRouterConfig {
|
func NewKubeRouterConfig() *KubeRouterConfig {
|
||||||
@ -36,6 +37,7 @@ func NewKubeRouterConfig() *KubeRouterConfig {
|
|||||||
IpvsSyncPeriod: 1 * time.Minute,
|
IpvsSyncPeriod: 1 * time.Minute,
|
||||||
IPTablesSyncPeriod: 1 * time.Minute,
|
IPTablesSyncPeriod: 1 * time.Minute,
|
||||||
RoutesSyncPeriod: 1 * time.Minute,
|
RoutesSyncPeriod: 1 * time.Minute,
|
||||||
|
EnableOverlay: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,4 +86,7 @@ func (s *KubeRouterConfig) AddFlags(fs *pflag.FlagSet) {
|
|||||||
"Add iptable rules for every Service Endpoint to support hairpin traffic.")
|
"Add iptable rules for every Service Endpoint to support hairpin traffic.")
|
||||||
fs.BoolVar(&s.NodePortBindOnAllIp, "nodeport-bindon-all-ip", false,
|
fs.BoolVar(&s.NodePortBindOnAllIp, "nodeport-bindon-all-ip", false,
|
||||||
"For service of NodePort type create IPVS service that listens on all IP's of the node.")
|
"For service of NodePort type create IPVS service that listens on all IP's of the node.")
|
||||||
|
fs.BoolVar(&s.EnableOverlay, "enable-overlay", true,
|
||||||
|
"When enable-overlay set to true, IP-in-IP tunneling is used for pod-to-pod networking across nodes in different subnets. "+
|
||||||
|
"When set to false no tunneling is used and routing infrastrcture is expected to route traffic for pod-to-pod networking across nodes in different subnets")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user