@@ -60,6 +60,7 @@ type NetworkRoutingController struct {
6060	nodeName                 string 
6161	nodeSubnet               net.IPNet 
6262	nodeInterface            string 
63+ 	isIpv6                   bool 
6364	activeNodes              map [string ]bool 
6465	mu                       sync.Mutex 
6566	clientset                kubernetes.Interface 
@@ -151,7 +152,7 @@ func (nrc *NetworkRoutingController) Run(healthChan chan<- *healthcheck.Controll
151152	}
152153
153154	glog .V (1 ).Info ("Performing cleanup of depreciated rules/ipsets (if needed)." )
154- 	err  =  deleteBadPodEgressRules ()
155+ 	err  =  nrc . deleteBadPodEgressRules ()
155156	if  err  !=  nil  {
156157		glog .Errorf ("Error cleaning up old/bad Pod egress rules: %s" , err .Error ())
157158	}
@@ -160,14 +161,14 @@ func (nrc *NetworkRoutingController) Run(healthChan chan<- *healthcheck.Controll
160161	if  nrc .enablePodEgress  {
161162		glog .V (1 ).Infoln ("Enabling Pod egress." )
162163
163- 		err  =  createPodEgressRule ()
164+ 		err  =  nrc . createPodEgressRule ()
164165		if  err  !=  nil  {
165166			glog .Errorf ("Error enabling Pod egress: %s" , err .Error ())
166167		}
167168	} else  {
168169		glog .V (1 ).Infoln ("Disabling Pod egress." )
169170
170- 		err  =  deletePodEgressRule ()
171+ 		err  =  nrc . deletePodEgressRule ()
171172		if  err  !=  nil  {
172173			glog .Warningf ("Error cleaning up Pod Egress related networking: %s" , err )
173174		}
@@ -458,18 +459,18 @@ func (nrc *NetworkRoutingController) injectRoute(path *table.Path) error {
458459// Cleanup performs the cleanup of configurations done 
459460func  (nrc  * NetworkRoutingController ) Cleanup () {
460461	// Pod egress cleanup 
461- 	err  :=  deletePodEgressRule ()
462+ 	err  :=  nrc . deletePodEgressRule ()
462463	if  err  !=  nil  {
463464		glog .Warningf ("Error deleting Pod egress iptable rule: %s" , err .Error ())
464465	}
465466
466- 	err  =  deleteBadPodEgressRules ()
467+ 	err  =  nrc . deleteBadPodEgressRules ()
467468	if  err  !=  nil  {
468469		glog .Warningf ("Error deleting Pod egress iptable rule: %s" , err .Error ())
469470	}
470471
471472	// delete all ipsets created by kube-router 
472- 	ipset , err  :=  utils .NewIPSet (false )
473+ 	ipset , err  :=  utils .NewIPSet (nrc . isIpv6 )
473474	if  err  !=  nil  {
474475		glog .Errorf ("Failed to clean up ipsets: "  +  err .Error ())
475476	}
@@ -535,12 +536,20 @@ func (nrc *NetworkRoutingController) syncNodeIPSets() error {
535536	return  nil 
536537}
537538
539+ func  (nrc  * NetworkRoutingController ) newIptablesCmdHandler () (* iptables.IPTables , error ) {
540+ 	if  nrc .isIpv6  {
541+ 		return  iptables .NewWithProtocol (iptables .ProtocolIPv6 )
542+ 	} else  {
543+ 		return  iptables .NewWithProtocol (iptables .ProtocolIPv4 )
544+ 	}
545+ }
546+ 
538547// ensure there is rule in filter table and FORWARD chain to permit in/out traffic from pods 
539548// this rules will be appended so that any iptable rules for network policies will take 
540549// precedence 
541550func  (nrc  * NetworkRoutingController ) enableForwarding () error  {
542551
543- 	iptablesCmdHandler , err  :=  iptables . New ()
552+ 	iptablesCmdHandler , _  :=  nrc . newIptablesCmdHandler ()
544553
545554	comment  :=  "allow outbound traffic from pods" 
546555	args  :=  []string {"-m" , "comment" , "--comment" , comment , "-i" , "kube-bridge" , "-j" , "ACCEPT" }
@@ -661,7 +670,7 @@ func (nrc *NetworkRoutingController) startBgpServer() error {
661670	}
662671
663672	if  ipv6IsEnabled () {
664- 		localAddressList  =  append (localAddressList , "::" )
673+ 		localAddressList  =  append (localAddressList , "::1 " )
665674	}
666675
667676	global  :=  & config.Global {
@@ -795,6 +804,21 @@ func NewNetworkRoutingController(clientset kubernetes.Interface,
795804	nrc .disableSrcDstCheck  =  kubeRouterConfig .DisableSrcDstCheck 
796805	nrc .initSrcDstCheckDone  =  false 
797806
807+ 	nrc .hostnameOverride  =  kubeRouterConfig .HostnameOverride 
808+ 	node , err  :=  utils .GetNodeObject (clientset , nrc .hostnameOverride )
809+ 	if  err  !=  nil  {
810+ 		return  nil , errors .New ("Failed getting node object from API server: "  +  err .Error ())
811+ 	}
812+ 
813+ 	nrc .nodeName  =  node .Name 
814+ 
815+ 	nodeIP , err  :=  utils .GetNodeIP (node )
816+ 	if  err  !=  nil  {
817+ 		return  nil , errors .New ("Failed getting IP address from node object: "  +  err .Error ())
818+ 	}
819+ 	nrc .nodeIP  =  nodeIP 
820+ 	nrc .isIpv6  =  nodeIP .To4 () ==  nil 
821+ 
798822	// lets start with assumption we hace necessary IAM creds to access EC2 api 
799823	nrc .ec2IamAuthorized  =  true 
800824
@@ -808,7 +832,7 @@ func NewNetworkRoutingController(clientset kubernetes.Interface,
808832		}
809833	}
810834
811- 	nrc .ipSetHandler , err  =  utils .NewIPSet (false )
835+ 	nrc .ipSetHandler , err  =  utils .NewIPSet (nrc . isIpv6 )
812836	if  err  !=  nil  {
813837		return  nil , err 
814838	}
@@ -872,20 +896,6 @@ func NewNetworkRoutingController(clientset kubernetes.Interface,
872896		return  nil , fmt .Errorf ("Error processing Global Peer Router configs: %s" , err )
873897	}
874898
875- 	nrc .hostnameOverride  =  kubeRouterConfig .HostnameOverride 
876- 	node , err  :=  utils .GetNodeObject (clientset , nrc .hostnameOverride )
877- 	if  err  !=  nil  {
878- 		return  nil , errors .New ("Failed getting node object from API server: "  +  err .Error ())
879- 	}
880- 
881- 	nrc .nodeName  =  node .Name 
882- 
883- 	nodeIP , err  :=  utils .GetNodeIP (node )
884- 	if  err  !=  nil  {
885- 		return  nil , errors .New ("Failed getting IP address from node object: "  +  err .Error ())
886- 	}
887- 	nrc .nodeIP  =  nodeIP 
888- 
889899	nrc .nodeSubnet , nrc .nodeInterface , err  =  getNodeSubnet (nodeIP )
890900	if  err  !=  nil  {
891901		return  nil , errors .New ("Failed find the subnet of the node IP and interface on"  + 
0 commit comments