Selaa lähdekoodia

backend/udp: Use a /32 prefix for the flannel0 interface

This avoids the kernel's creation of broadcast routes, which prevent
communication from the host with the zeroth subnet to containers on any
other hosts.
Cel A. Skeggs 7 vuotta sitten
vanhempi
commit
ed425bdd6f
1 muutettua tiedostoa jossa 8 lisäystä ja 2 poistoa
  1. 8 2
      backend/udp/udp_network_amd64.go

+ 8 - 2
backend/udp/udp_network_amd64.go

@@ -153,9 +153,15 @@ func configureIface(ifname string, ipn ip.IP4Net, mtu int) error {
 		return fmt.Errorf("failed to lookup interface %v", ifname)
 	}
 
-	err = netlink.AddrAdd(iface, &netlink.Addr{IPNet: ipn.ToIPNet(), Label: ""})
+	// Ensure that the device has a /32 address so that no broadcast routes are created.
+	// This IP is just used as a source address for host to workload traffic (so
+	// the return path for the traffic has an address on the flannel network to use as the destination)
+	ipnLocal := ipn
+	ipnLocal.PrefixLen = 32
+
+	err = netlink.AddrAdd(iface, &netlink.Addr{IPNet: ipnLocal.ToIPNet(), Label: ""})
 	if err != nil {
-		return fmt.Errorf("failed to add IP address %v to %v: %v", ipn.String(), ifname, err)
+		return fmt.Errorf("failed to add IP address %v to %v: %v", ipnLocal.String(), ifname, err)
 	}
 
 	err = netlink.LinkSetMTU(iface, mtu)