Procházet zdrojové kódy

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 před 7 roky
rodič
revize
ed425bdd6f
1 změnil soubory, kde provedl 8 přidání a 2 odebrání
  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)