clusterNetwork/defaultNetworks and namespace spec fixed

This fix is to add declaration about clusterNetwork/defaultNetwork
net-attach-def is in 'default' namesspace. In addition, this code
changes to skip defaultNetwork in case of 'kube-system' namespace
as well (#202).
This commit is contained in:
Tomofumi Hayashi 2018-11-30 16:33:09 +09:00 committed by Tomofumi Hayashi
parent 887a9f42dd
commit e05de6260b
3 changed files with 77 additions and 7 deletions

View File

@ -53,7 +53,7 @@ User should chose following parameters combination (`clusterNetwork`+`defaultNet
Multus will find network for clusterNetwork/defaultNetworks as following sequences: Multus will find network for clusterNetwork/defaultNetworks as following sequences:
1. CRD object for given network name 1. CRD object for given network name, in 'default' namespace
1. CNI json config file in `confDir`. Given name should be without extention, like .conf/.conflist. (e.g. "test" for "test.conf") 1. CNI json config file in `confDir`. Given name should be without extention, like .conf/.conflist. (e.g. "test" for "test.conf")
1. Directory for CNI json config file. Multus will find alphabetically first file for the network 1. Directory for CNI json config file. Multus will find alphabetically first file for the network
1. Multus failed to find network. Multus raise error message 1. Multus failed to find network. Multus raise error message

View File

@ -621,13 +621,15 @@ func GetDefaultNetworks(k8sArgs *types.K8sArgs, conf *types.NetConf, kubeClient
delegate.MasterPlugin = true delegate.MasterPlugin = true
delegates = append(delegates, delegate) delegates = append(delegates, delegate)
//need to revisit // Pod in kube-system namespace does not have default network for now.
for _, netname := range conf.DefaultNetworks { if string(k8sArgs.K8S_POD_NAMESPACE) != "kube-system" {
delegate, err := getNetDelegate(kubeClient, netname, conf.ConfDir) for _, netname := range conf.DefaultNetworks {
if err != nil { delegate, err := getNetDelegate(kubeClient, netname, conf.ConfDir)
return err if err != nil {
return err
}
delegates = append(delegates, delegate)
} }
delegates = append(delegates, delegate)
} }
if err = conf.AddDelegates(delegates); err != nil { if err = conf.AddDelegates(delegates); err != nil {

View File

@ -308,6 +308,74 @@ var _ = Describe("k8sclient operations", func() {
Expect(netConf.Delegates[0].Conf.Type).To(Equal("mynet")) Expect(netConf.Delegates[0].Conf.Type).To(Equal("mynet"))
}) })
It("retrieves default networks from CRD", func() {
fakePod := testutils.NewFakePod("testpod", "", "")
conf := `{
"name":"node-cni-network",
"type":"multus",
"clusterNetwork": "myCRD1",
"defaultNetworks": ["myCRD2"],
"kubeconfig":"/etc/kubernetes/node-kubeconfig.yaml"
}`
netConf, err := types.LoadNetConf([]byte(conf))
Expect(err).NotTo(HaveOccurred())
args := &skel.CmdArgs{
Args: fmt.Sprintf("K8S_POD_NAME=%s;K8S_POD_NAMESPACE=%s", fakePod.ObjectMeta.Name, fakePod.ObjectMeta.Namespace),
}
fKubeClient := testutils.NewFakeKubeClient()
fKubeClient.AddPod(fakePod)
fKubeClient.AddNetConfig("default", "myCRD1", "{\"type\": \"mynet\"}")
fKubeClient.AddNetConfig("default", "myCRD2", "{\"type\": \"mynet2\"}")
kubeClient, err := GetK8sClient("", fKubeClient)
Expect(err).NotTo(HaveOccurred())
k8sArgs, err := GetK8sArgs(args)
Expect(err).NotTo(HaveOccurred())
err = GetDefaultNetworks(k8sArgs, netConf, kubeClient)
Expect(err).NotTo(HaveOccurred())
Expect(len(netConf.Delegates)).To(Equal(2))
Expect(netConf.Delegates[0].Conf.Name).To(Equal("myCRD1"))
Expect(netConf.Delegates[0].Conf.Type).To(Equal("mynet"))
Expect(netConf.Delegates[1].Conf.Name).To(Equal("myCRD2"))
Expect(netConf.Delegates[1].Conf.Type).To(Equal("mynet2"))
})
It("ignore default networks from CRD in case of kube-system namespace", func() {
fakePod := testutils.NewFakePod("testpod", "", "")
// overwrite namespace
fakePod.ObjectMeta.Namespace = "kube-system"
conf := `{
"name":"node-cni-network",
"type":"multus",
"clusterNetwork": "myCRD1",
"defaultNetworks": ["myCRD2"],
"kubeconfig":"/etc/kubernetes/node-kubeconfig.yaml"
}`
netConf, err := types.LoadNetConf([]byte(conf))
Expect(err).NotTo(HaveOccurred())
args := &skel.CmdArgs{
Args: fmt.Sprintf("K8S_POD_NAME=%s;K8S_POD_NAMESPACE=%s", fakePod.ObjectMeta.Name, fakePod.ObjectMeta.Namespace),
}
fKubeClient := testutils.NewFakeKubeClient()
fKubeClient.AddPod(fakePod)
fKubeClient.AddNetConfig("default", "myCRD1", "{\"type\": \"mynet\"}")
fKubeClient.AddNetConfig("default", "myCRD2", "{\"type\": \"mynet2\"}")
kubeClient, err := GetK8sClient("", fKubeClient)
Expect(err).NotTo(HaveOccurred())
k8sArgs, err := GetK8sArgs(args)
Expect(err).NotTo(HaveOccurred())
err = GetDefaultNetworks(k8sArgs, netConf, kubeClient)
Expect(err).NotTo(HaveOccurred())
Expect(len(netConf.Delegates)).To(Equal(1))
Expect(netConf.Delegates[0].Conf.Name).To(Equal("myCRD1"))
Expect(netConf.Delegates[0].Conf.Type).To(Equal("mynet"))
})
It("retrieves cluster network from file", func() { It("retrieves cluster network from file", func() {
fakePod := testutils.NewFakePod("testpod", "", "") fakePod := testutils.NewFakePod("testpod", "", "")
conf := `{ conf := `{