diff --git a/pkg/agent/config/config.go b/pkg/agent/config/config.go index d061a14dc0..6f252be96c 100644 --- a/pkg/agent/config/config.go +++ b/pkg/agent/config/config.go @@ -530,6 +530,7 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N } nodeConfig.AgentConfig.CNIBinDir = filepath.Dir(hostLocal) nodeConfig.AgentConfig.CNIConfDir = filepath.Join(envInfo.DataDir, "agent", "etc", "cni", "net.d") + nodeConfig.AgentConfig.FlannelCniConfFile = envInfo.FlannelCniConfFile } if !nodeConfig.Docker && nodeConfig.ContainerRuntimeEndpoint == "" { diff --git a/pkg/agent/flannel/setup.go b/pkg/agent/flannel/setup.go index a0174d5f95..fc21b51d52 100644 --- a/pkg/agent/flannel/setup.go +++ b/pkg/agent/flannel/setup.go @@ -91,7 +91,7 @@ const ( ) func Prepare(ctx context.Context, nodeConfig *config.Node) error { - if err := createCNIConf(nodeConfig.AgentConfig.CNIConfDir); err != nil { + if err := createCNIConf(nodeConfig.AgentConfig.CNIConfDir, nodeConfig); err != nil { return err } @@ -146,12 +146,17 @@ func waitForPodCIDR(ctx context.Context, nodeName string, nodes typedcorev1.Node return nil } -func createCNIConf(dir string) error { +func createCNIConf(dir string, nodeConfig *config.Node) error { logrus.Debugf("Creating the CNI conf in directory %s", dir) if dir == "" { return nil } p := filepath.Join(dir, "10-flannel.conflist") + + if nodeConfig.AgentConfig.FlannelCniConfFile != "" { + logrus.Debugf("Using %s as the flannel CNI conf", nodeConfig.AgentConfig.FlannelCniConfFile) + return util.CopyFile(nodeConfig.AgentConfig.FlannelCniConfFile, p) + } return util.WriteFile(p, cniConf) } diff --git a/pkg/agent/util/file.go b/pkg/agent/util/file.go index 0cace178c7..17c263c143 100644 --- a/pkg/agent/util/file.go +++ b/pkg/agent/util/file.go @@ -16,3 +16,16 @@ func WriteFile(name string, content string) error { } return nil } + +func CopyFile(sourceFile string, destinationFile string) error { + os.MkdirAll(filepath.Dir(destinationFile), 0755) + input, err := ioutil.ReadFile(sourceFile) + if err != nil { + return errors.Wrapf(err, "copying %s to %s", sourceFile, destinationFile) + } + err = ioutil.WriteFile(destinationFile, input, 0644) + if err != nil { + return errors.Wrapf(err, "copying %s to %s", sourceFile, destinationFile) + } + return nil +} diff --git a/pkg/cli/cmds/agent.go b/pkg/cli/cmds/agent.go index 90e1dac9ce..8da19df8af 100644 --- a/pkg/cli/cmds/agent.go +++ b/pkg/cli/cmds/agent.go @@ -31,6 +31,7 @@ type Agent struct { NoFlannel bool FlannelIface string FlannelConf string + FlannelCniConfFile string Debug bool Rootless bool RootlessAlreadyUnshared bool @@ -134,6 +135,11 @@ var ( Usage: "(agent/networking) Override default flannel config file", Destination: &AgentConfig.FlannelConf, } + FlannelCniConfFileFlag = cli.StringFlag{ + Name: "flannel-cni-conf", + Usage: "(agent/networking) Override default flannel cni config file", + Destination: &AgentConfig.FlannelCniConfFile, + } ResolvConfFlag = cli.StringFlag{ Name: "resolv-conf", Usage: "(agent/networking) Kubelet resolv.conf file", @@ -259,6 +265,7 @@ func NewAgentCommand(action func(ctx *cli.Context) error) cli.Command { ResolvConfFlag, FlannelIfaceFlag, FlannelConfFlag, + FlannelCniConfFileFlag, ExtraKubeletArgs, ExtraKubeProxyArgs, ProtectKernelDefaultsFlag, diff --git a/pkg/cli/cmds/server.go b/pkg/cli/cmds/server.go index 09a60e5a73..12d1b866c3 100644 --- a/pkg/cli/cmds/server.go +++ b/pkg/cli/cmds/server.go @@ -439,6 +439,7 @@ var ServerFlags = []cli.Flag{ ResolvConfFlag, FlannelIfaceFlag, FlannelConfFlag, + FlannelCniConfFileFlag, ExtraKubeletArgs, ExtraKubeProxyArgs, ProtectKernelDefaultsFlag, diff --git a/pkg/daemons/config/types.go b/pkg/daemons/config/types.go index 21389ec14c..237a2f2474 100644 --- a/pkg/daemons/config/types.go +++ b/pkg/daemons/config/types.go @@ -111,6 +111,7 @@ type Agent struct { ImageCredProvBinDir string ImageCredProvConfig string IPSECPSK string + FlannelCniConfFile string StrongSwanDir string PrivateRegistry string SystemDefaultRegistry string