diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 06a8e8d4055..32f9869cc4c 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -495,12 +495,6 @@ func NewMainKubelet(kubeCfg *componentconfig.KubeletConfiguration, kubeDeps *Kub klet.flannelHelper = NewFlannelHelper() glog.Infof("Flannel is in charge of podCIDR and overlay networking.") } - if klet.nodeIP != nil { - if err := klet.validateNodeIP(); err != nil { - return nil, err - } - glog.Infof("Using node IP: %q", klet.nodeIP.String()) - } if mode, err := effectiveHairpinMode(componentconfig.HairpinMode(kubeCfg.HairpinMode), kubeCfg.ContainerRuntime, kubeCfg.ConfigureCBR0, kubeCfg.NetworkPluginName); err != nil { // This is a non-recoverable error. Returning it up the callstack will just diff --git a/pkg/kubelet/kubelet_network.go b/pkg/kubelet/kubelet_network.go index 2672c2f6ea0..618ed522340 100644 --- a/pkg/kubelet/kubelet_network.go +++ b/pkg/kubelet/kubelet_network.go @@ -81,39 +81,6 @@ func effectiveHairpinMode(hairpinMode componentconfig.HairpinMode, containerRunt return hairpinMode, nil } -// Validate given node IP belongs to the current host -func (kl *Kubelet) validateNodeIP() error { - if kl.nodeIP == nil { - return nil - } - - // Honor IP limitations set in setNodeStatus() - if kl.nodeIP.IsLoopback() { - return fmt.Errorf("nodeIP can't be loopback address") - } - if kl.nodeIP.To4() == nil { - return fmt.Errorf("nodeIP must be IPv4 address") - } - - addrs, err := net.InterfaceAddrs() - if err != nil { - return err - } - for _, addr := range addrs { - var ip net.IP - switch v := addr.(type) { - case *net.IPNet: - ip = v.IP - case *net.IPAddr: - ip = v.IP - } - if ip != nil && ip.Equal(kl.nodeIP) { - return nil - } - } - return fmt.Errorf("Node IP: %q not found in the host's network interfaces", kl.nodeIP.String()) -} - // providerRequiresNetworkingConfiguration returns whether the cloud provider // requires special networking configuration. func (kl *Kubelet) providerRequiresNetworkingConfiguration() bool { diff --git a/pkg/kubelet/kubelet_node_status.go b/pkg/kubelet/kubelet_node_status.go index e6d135fcf80..b340f148818 100644 --- a/pkg/kubelet/kubelet_node_status.go +++ b/pkg/kubelet/kubelet_node_status.go @@ -359,6 +359,14 @@ func (kl *Kubelet) recordNodeStatusEvent(eventtype, event string) { // Set IP addresses for the node. func (kl *Kubelet) setNodeAddress(node *api.Node) error { + + if kl.nodeIP != nil { + if err := kl.validateNodeIP(); err != nil { + return fmt.Errorf("failed to validate nodeIP: %v", err) + } + glog.V(2).Infof("Using node IP: %q", kl.nodeIP.String()) + } + if kl.cloud != nil { instances, ok := kl.cloud.Instances() if !ok { @@ -861,3 +869,36 @@ func SetNodeStatus(f func(*api.Node) error) Option { k.setNodeStatusFuncs = append(k.setNodeStatusFuncs, f) } } + +// Validate given node IP belongs to the current host +func (kl *Kubelet) validateNodeIP() error { + if kl.nodeIP == nil { + return nil + } + + // Honor IP limitations set in setNodeStatus() + if kl.nodeIP.IsLoopback() { + return fmt.Errorf("nodeIP can't be loopback address") + } + if kl.nodeIP.To4() == nil { + return fmt.Errorf("nodeIP must be IPv4 address") + } + + addrs, err := net.InterfaceAddrs() + if err != nil { + return err + } + for _, addr := range addrs { + var ip net.IP + switch v := addr.(type) { + case *net.IPNet: + ip = v.IP + case *net.IPAddr: + ip = v.IP + } + if ip != nil && ip.Equal(kl.nodeIP) { + return nil + } + } + return fmt.Errorf("Node IP: %q not found in the host's network interfaces", kl.nodeIP.String()) +}