Skip to content

Commit d4f3297

Browse files
author
Murali Reddy
committed
use NODE_NAME env variable to get the node object when running as daemon set
If NODE_NAME env is not set, fall back to hostname. Partial fix towards #23 we still have issue where kube-router is run as agent and kubelet is started with --hostname-overide flag
1 parent bb3f173 commit d4f3297

File tree

5 files changed

+47
-53
lines changed

5 files changed

+47
-53
lines changed

app/controllers/network_policy_controller.go

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"errors"
88
"fmt"
99
"net"
10-
"os"
1110
"os/exec"
1211
"strconv"
1312
"strings"
@@ -20,7 +19,6 @@ import (
2019
"github.com/coreos/go-iptables/iptables"
2120
"github.com/golang/glog"
2221
"github.com/janeczku/go-ipset/ipset"
23-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2422
"k8s.io/client-go/kubernetes"
2523
apiv1 "k8s.io/client-go/pkg/api/v1"
2624
)
@@ -772,22 +770,12 @@ func NewNetworkPolicyController(clientset *kubernetes.Clientset, config *options
772770

773771
npc.syncPeriod = config.IPTablesSyncPeriod
774772

775-
nodeHostName, err := os.Hostname()
773+
node, err := utils.GetNodeObject(clientset)
776774
if err != nil {
777775
panic(err.Error())
778776
}
779-
nodeFqdnHostName := utils.GetFqdn()
780777

781-
node, err := clientset.Core().Nodes().Get(nodeHostName, metav1.GetOptions{})
782-
if err != nil {
783-
node, err = clientset.Core().Nodes().Get(nodeFqdnHostName, metav1.GetOptions{})
784-
if err != nil {
785-
panic(err.Error())
786-
}
787-
npc.nodeHostName = nodeFqdnHostName
788-
} else {
789-
npc.nodeHostName = nodeHostName
790-
}
778+
npc.nodeHostName = node.Name
791779

792780
nodeIP, err := getNodeIP(node)
793781
if err != nil {

app/controllers/network_routes_controller.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package controllers
33
import (
44
"fmt"
55
"net"
6-
"os"
76
"strconv"
87
"strings"
98
"sync"
@@ -358,22 +357,13 @@ func NewNetworkRoutingController(clientset *kubernetes.Clientset, kubeRouterConf
358357
nrc.peerAsnNumber = uint32(asn)
359358
}
360359

361-
nodeHostName, err := os.Hostname()
360+
361+
node, err := utils.GetNodeObject(clientset)
362362
if err != nil {
363363
panic(err.Error())
364364
}
365-
nodeFqdnHostName := utils.GetFqdn()
366365

367-
node, err := clientset.Core().Nodes().Get(nodeHostName, metav1.GetOptions{})
368-
if err != nil {
369-
node, err = clientset.Core().Nodes().Get(nodeFqdnHostName, metav1.GetOptions{})
370-
if err != nil {
371-
panic(err.Error())
372-
}
373-
nrc.nodeHostName = nodeFqdnHostName
374-
} else {
375-
nrc.nodeHostName = nodeHostName
376-
}
366+
nrc.nodeHostName = node.Name
377367

378368
nodeIP, err := getNodeIP(node)
379369
if err != nil {

app/controllers/network_services_controller.go

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"io/ioutil"
77
"net"
8-
"os"
98
"reflect"
109
"strconv"
1110
"strings"
@@ -20,7 +19,6 @@ import (
2019
"github.com/golang/glog"
2120
"github.com/mqliang/libipvs"
2221
"github.com/vishvananda/netlink"
23-
"k8s.io/apimachinery/pkg/apis/meta/v1"
2422
"k8s.io/client-go/kubernetes"
2523
)
2624

@@ -543,22 +541,12 @@ func NewNetworkServicesController(clientset *kubernetes.Clientset, config *optio
543541
nsc.podCidr = cidr
544542
}
545543

546-
nodeHostName, err := os.Hostname()
544+
node, err := utils.GetNodeObject(clientset)
547545
if err != nil {
548546
panic(err.Error())
549547
}
550-
nodeFqdnHostName := utils.GetFqdn()
551548

552-
node, err := clientset.Core().Nodes().Get(nodeHostName, v1.GetOptions{})
553-
if err != nil {
554-
node, err = clientset.Core().Nodes().Get(nodeFqdnHostName, v1.GetOptions{})
555-
if err != nil {
556-
panic(err.Error())
557-
}
558-
nsc.nodeHostName = nodeFqdnHostName
559-
} else {
560-
nsc.nodeHostName = nodeHostName
561-
}
549+
nsc.nodeHostName = node.Name
562550
nodeIP, err := getNodeIP(node)
563551
if err != nil {
564552
panic(err.Error())

utils/node.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package utils
2+
3+
import (
4+
"os"
5+
"fmt"
6+
7+
"k8s.io/client-go/kubernetes"
8+
apiv1 "k8s.io/client-go/pkg/api/v1"
9+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
)
11+
12+
func GetNodeObject(clientset *kubernetes.Clientset) (*apiv1.Node, error) {
13+
14+
// assuming kube-router is running as pod, first check env NODE_NAME
15+
nodeName := os.Getenv("NODE_NAME")
16+
if nodeName != "" {
17+
node, err := clientset.Core().Nodes().Get(nodeName, metav1.GetOptions{})
18+
if err == nil {
19+
return node, nil
20+
}
21+
}
22+
23+
// if env NODE_NAME is not set then check if node is register with hostname
24+
hostName, _ := os.Hostname()
25+
node, err := clientset.Core().Nodes().Get(hostName, metav1.GetOptions{})
26+
if err == nil {
27+
return node, nil
28+
}
29+
30+
// if env NODE_NAME is not set then check if node is registerd by FQDN
31+
fqdnHostName := GetFqdn()
32+
node, err = clientset.Core().Nodes().Get(fqdnHostName, metav1.GetOptions{})
33+
if err == nil {
34+
return node, nil
35+
}
36+
37+
return nil, fmt.Errorf("Failed to identify the node by NODE_NAME, hostname or FQDN name of the host")
38+
}

utils/pod_cidr.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ import (
55
"fmt"
66
"io/ioutil"
77
"net"
8-
"os"
98

109
"github.com/containernetworking/cni/libcni"
1110
"github.com/containernetworking/cni/plugins/ipam/host-local/backend/allocator"
12-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1311
"k8s.io/client-go/kubernetes"
1412
)
1513

@@ -48,17 +46,9 @@ func InsertPodCidrInCniSpec(cniConfFilePath string, cidr string) error {
4846
}
4947

5048
func GetPodCidrFromNodeSpec(clientset *kubernetes.Clientset) (string, error) {
51-
nodeHostName, err := os.Hostname()
49+
node, err := GetNodeObject(clientset)
5250
if err != nil {
53-
panic(err.Error())
54-
}
55-
nodeFqdnHostName := GetFqdn()
56-
node, err := clientset.Core().Nodes().Get(nodeHostName, metav1.GetOptions{})
57-
if err != nil {
58-
node, err = clientset.Core().Nodes().Get(nodeFqdnHostName, metav1.GetOptions{})
59-
if err != nil {
60-
panic(err.Error())
61-
}
51+
return "", fmt.Errorf("Failed to get pod CIDR allocated for the node due to: " + err.Error())
6252
}
6353
return node.Spec.PodCIDR, nil
6454
}

0 commit comments

Comments
 (0)