From b4b156d9d14eeb475e789718b3a6b78aba00019e Mon Sep 17 00:00:00 2001 From: Roberto Bonafiglia Date: Fri, 28 Jun 2024 18:59:22 +0200 Subject: [PATCH] Update flannel to v0.25.4 and fixed issue with IPv6 mask Signed-off-by: Roberto Bonafiglia --- go.mod | 12 +++---- go.sum | 11 ++++--- pkg/agent/flannel/flannel.go | 61 ++++++++++++++++++++++++++++++------ 3 files changed, 63 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index e6454b48f2..7dc60a428d 100644 --- a/go.mod +++ b/go.mod @@ -89,7 +89,7 @@ require ( github.com/coreos/go-systemd/v22 v22.5.0 github.com/docker/docker v25.0.5+incompatible github.com/erikdubbelboer/gspt v0.0.0-20190125194910-e68493906b83 - github.com/flannel-io/flannel v0.25.2 + github.com/flannel-io/flannel v0.25.4 github.com/go-bindata/go-bindata v3.1.2+incompatible github.com/go-logr/logr v1.4.1 github.com/go-logr/stdr v1.2.3-0.20220714215716-96bad1d688c5 @@ -143,10 +143,10 @@ require ( go.etcd.io/etcd/etcdutl/v3 v3.5.9 go.etcd.io/etcd/server/v3 v3.5.13 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.22.0 - golang.org/x/net v0.24.0 + golang.org/x/crypto v0.23.0 + golang.org/x/net v0.25.0 golang.org/x/sync v0.7.0 - golang.org/x/sys v0.19.0 + golang.org/x/sys v0.20.0 google.golang.org/grpc v1.63.2 gopkg.in/yaml.v2 v2.4.0 inet.af/tcpproxy v0.0.0-20200125044825-b6bb9b5b8252 @@ -454,8 +454,8 @@ require ( golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect golang.org/x/mod v0.15.0 // indirect golang.org/x/oauth2 v0.17.0 // indirect - golang.org/x/term v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/term v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.18.0 // indirect golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b // indirect diff --git a/go.sum b/go.sum index 096f3ba718..7266b151ef 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBD github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flannel-io/flannel v0.25.2 h1:ATQ4PhZqd2MUpLm+NKbAaNxm2PJSLE+mS9WUI4RkKPs= -github.com/flannel-io/flannel v0.25.2/go.mod h1:o5FAm9Rl28TydPKw1cQFYWPopfQKIjlYrcdFzBusaGI= +github.com/flannel-io/flannel v0.25.4 h1:pFTwjpP7rmxGNknNXzuW0iXWcwXMRTpwDIfaSDWqTw0= +github.com/flannel-io/flannel v0.25.4/go.mod h1:utw3+DnHJVv8FdURRRRSPV1swOfG8MN2uQHlvhHL36g= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= @@ -1887,8 +1887,8 @@ golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1909,8 +1909,9 @@ golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/pkg/agent/flannel/flannel.go b/pkg/agent/flannel/flannel.go index 7a7268e042..6b3824163f 100644 --- a/pkg/agent/flannel/flannel.go +++ b/pkg/agent/flannel/flannel.go @@ -16,9 +16,11 @@ package flannel import ( "fmt" + "math/big" "net" "os" "path/filepath" + "strings" "sync" "github.com/flannel-io/flannel/pkg/backend" @@ -228,34 +230,73 @@ func WriteSubnetFile(path string, nw ip.IP4Net, nwv6 ip.IP6Net, ipMasq bool, bn // ReadCIDRFromSubnetFile reads the flannel subnet file and extracts the value of IPv4 network CIDRKey func ReadCIDRFromSubnetFile(path string, CIDRKey string) ip.IP4Net { - var prevCIDR ip.IP4Net + prevCIDRs := ReadCIDRsFromSubnetFile(path, CIDRKey) + if len(prevCIDRs) == 0 { + logrus.Warningf("no subnet found for key: %s in file: %s", CIDRKey, path) + return ip.IP4Net{IP: 0, PrefixLen: 0} + } else if len(prevCIDRs) > 1 { + logrus.Errorf("error reading subnet: more than 1 entry found for key: %s in file %s: ", CIDRKey, path) + return ip.IP4Net{IP: 0, PrefixLen: 0} + } else { + return prevCIDRs[0] + } +} + +func ReadCIDRsFromSubnetFile(path string, CIDRKey string) []ip.IP4Net { + prevCIDRs := make([]ip.IP4Net, 0) if _, err := os.Stat(path); !os.IsNotExist(err) { prevSubnetVals, err := godotenv.Read(path) if err != nil { logrus.Errorf("Couldn't fetch previous %s from subnet file at %s: %v", CIDRKey, path, err) } else if prevCIDRString, ok := prevSubnetVals[CIDRKey]; ok { - err = prevCIDR.UnmarshalJSON([]byte(prevCIDRString)) - if err != nil { - logrus.Errorf("Couldn't parse previous %s from subnet file at %s: %v", CIDRKey, path, err) + cidrs := strings.Split(prevCIDRString, ",") + prevCIDRs = make([]ip.IP4Net, 0) + for i := range cidrs { + _, cidr, err := net.ParseCIDR(cidrs[i]) + if err != nil { + logrus.Errorf("Couldn't parse previous %s from subnet file at %s: %v", CIDRKey, path, err) + } + prevCIDRs = append(prevCIDRs, ip.FromIPNet(cidr)) } + } } - return prevCIDR + return prevCIDRs } + // ReadIP6CIDRFromSubnetFile reads the flannel subnet file and extracts the value of IPv6 network CIDRKey func ReadIP6CIDRFromSubnetFile(path string, CIDRKey string) ip.IP6Net { - var prevCIDR ip.IP6Net + prevCIDRs := ReadIP6CIDRsFromSubnetFile(path, CIDRKey) + if len(prevCIDRs) == 0 { + logrus.Warningf("no subnet found for key: %s in file: %s", CIDRKey, path) + return ip.IP6Net{IP: (*ip.IP6)(big.NewInt(0)), PrefixLen: 0} + } else if len(prevCIDRs) > 1 { + logrus.Errorf("error reading subnet: more than 1 entry found for key: %s in file %s: ", CIDRKey, path) + return ip.IP6Net{IP: (*ip.IP6)(big.NewInt(0)), PrefixLen: 0} + } else { + return prevCIDRs[0] + } +} + +func ReadIP6CIDRsFromSubnetFile(path string, CIDRKey string) []ip.IP6Net { + prevCIDRs := make([]ip.IP6Net, 0) if _, err := os.Stat(path); !os.IsNotExist(err) { prevSubnetVals, err := godotenv.Read(path) if err != nil { logrus.Errorf("Couldn't fetch previous %s from subnet file at %s: %v", CIDRKey, path, err) } else if prevCIDRString, ok := prevSubnetVals[CIDRKey]; ok { - err = prevCIDR.UnmarshalJSON([]byte(prevCIDRString)) - if err != nil { - logrus.Errorf("Couldn't parse previous %s from subnet file at %s: %v", CIDRKey, path, err) + cidrs := strings.Split(prevCIDRString, ",") + prevCIDRs = make([]ip.IP6Net, 0) + for i := range cidrs { + _, cidr, err := net.ParseCIDR(cidrs[i]) + if err != nil { + logrus.Errorf("Couldn't parse previous %s from subnet file at %s: %v", CIDRKey, path, err) + } + prevCIDRs = append(prevCIDRs, ip.FromIP6Net(cidr)) } + } } - return prevCIDR + return prevCIDRs }