Skip to content

Commit f158b7b

Browse files
authored
cni-server: fix ovn0 gateway check (#6098)
Signed-off-by: zhangzujian <zhangzujian.7@gmail.com>
1 parent c7296d7 commit f158b7b

File tree

5 files changed

+24
-24
lines changed

5 files changed

+24
-24
lines changed

pkg/controller/node.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ func (c *Controller) checkSubnetGatewayNode() error {
685685
if !pingSucceeded || !nodeIsReady {
686686
if exist {
687687
if !pingSucceeded {
688-
klog.Warningf("failed to ping ovn0 ip %s on node %s", ip, node.Name)
688+
klog.Warningf("failed to ping %s ip %s on node %s", util.NodeNic, ip, node.Name)
689689
}
690690
if !nodeIsReady {
691691
klog.Warningf("node %s is not ready", node.Name)
@@ -700,7 +700,7 @@ func (c *Controller) checkSubnetGatewayNode() error {
700700
}
701701
}
702702
} else {
703-
klog.V(3).Infof("succeeded to ping ovn0 ip %s on node %s", ip, node.Name)
703+
klog.V(3).Infof("succeeded to ping %s ip %s on node %s", util.NodeNic, ip, node.Name)
704704
if !exist {
705705
nextHops.Add(ip)
706706
if nameIPMap == nil {

pkg/daemon/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ func (c *Controller) Run(stopCh <-chan struct{}) {
955955
go wait.Until(c.ovnMetricsUpdate, 3*time.Second, stopCh)
956956
go wait.Until(func() {
957957
if err := c.reconcileRouters(nil); err != nil {
958-
klog.Errorf("failed to reconcile ovn0 routes: %v", err)
958+
klog.Errorf("failed to reconcile %s routes: %v", util.NodeNic, err)
959959
}
960960
}, 3*time.Second, stopCh)
961961

pkg/daemon/gateway_linux.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ func (c *Controller) setIptables() error {
631631
var (
632632
v4Rules = []util.IPTableRule{
633633
// mark packets from pod to service
634-
{Table: NAT, Chain: OvnPrerouting, Rule: strings.Fields(`-i ovn0 -m set --match-set ovn40subnets src -m set --match-set ovn40services dst -j MARK --set-xmark 0x4000/0x4000`)},
634+
{Table: NAT, Chain: OvnPrerouting, Rule: strings.Fields(`-i ` + util.NodeNic + ` -m set --match-set ovn40subnets src -m set --match-set ovn40services dst -j MARK --set-xmark 0x4000/0x4000`)},
635635
// nat packets marked by kube-proxy or kube-ovn
636636
{Table: NAT, Chain: OvnPostrouting, Rule: strings.Fields(`-m mark --mark 0x4000/0x4000 -j ` + OvnMasquerade)},
637637
// nat service traffic
@@ -672,7 +672,7 @@ func (c *Controller) setIptables() error {
672672
}
673673
v6Rules = []util.IPTableRule{
674674
// mark packets from pod to service
675-
{Table: NAT, Chain: OvnPrerouting, Rule: strings.Fields(`-i ovn0 -m set --match-set ovn60subnets src -m set --match-set ovn60services dst -j MARK --set-xmark 0x4000/0x4000`)},
675+
{Table: NAT, Chain: OvnPrerouting, Rule: strings.Fields(`-i ` + util.NodeNic + ` -m set --match-set ovn60subnets src -m set --match-set ovn60services dst -j MARK --set-xmark 0x4000/0x4000`)},
676676
// nat packets marked by kube-proxy or kube-ovn
677677
{Table: NAT, Chain: OvnPostrouting, Rule: strings.Fields(`-m mark --mark 0x4000/0x4000 -j ` + OvnMasquerade)},
678678
// nat service traffic
@@ -741,7 +741,7 @@ func (c *Controller) setIptables() error {
741741
return err
742742
}
743743
if ipsetExists {
744-
iptablesRules[0].Rule = strings.Fields(fmt.Sprintf(`-i ovn0 -m set --match-set %s src -m set --match-set %s dst,dst -j MARK --set-xmark 0x4000/0x4000`, matchset, ipset))
744+
iptablesRules[0].Rule = strings.Fields(fmt.Sprintf(`-i %s -m set --match-set %s src -m set --match-set %s dst,dst -j MARK --set-xmark 0x4000/0x4000`, util.NodeNic, matchset, ipset))
745745
rejectRule := strings.Fields(fmt.Sprintf(`-p tcp -m mark ! --mark 0x4000/0x4000 -m set --match-set %s dst -m conntrack --ctstate NEW -j REJECT`, svcMatchset))
746746
obsoleteRejectRule := strings.Fields(fmt.Sprintf(`-m mark ! --mark 0x4000/0x4000 -m set --match-set %s dst -m conntrack --ctstate NEW -j REJECT`, svcMatchset))
747747
iptablesRules = append(iptablesRules,
@@ -1188,7 +1188,7 @@ func (c *Controller) cleanObsoleteIptablesRules(protocol string, rules []util.IP
11881188
var (
11891189
v4ObsoleteRules = []util.IPTableRule{
11901190
{Table: NAT, Chain: Postrouting, Rule: strings.Fields(`-m mark --mark 0x40000/0x40000 -j MASQUERADE`)},
1191-
{Table: "mangle", Chain: Prerouting, Rule: strings.Fields(`-i ovn0 -m set --match-set ovn40subnets src -m set --match-set ovn40services dst -j MARK --set-xmark 0x40000/0x40000`)},
1191+
{Table: "mangle", Chain: Prerouting, Rule: strings.Fields(`-i ` + util.NodeNic + ` -m set --match-set ovn40subnets src -m set --match-set ovn40services dst -j MARK --set-xmark 0x40000/0x40000`)},
11921192
// legacy rules
11931193
// nat packets marked by kube-proxy or kube-ovn
11941194
{Table: NAT, Chain: Postrouting, Rule: strings.Fields(`-m mark --mark 0x4000/0x4000 -j MASQUERADE`)},
@@ -1205,7 +1205,7 @@ func (c *Controller) cleanObsoleteIptablesRules(protocol string, rules []util.IP
12051205
// nat outgoing
12061206
{Table: NAT, Chain: Postrouting, Rule: strings.Fields(`-m set --match-set ovn40subnets-nat src -m set ! --match-set ovn40subnets dst -j MASQUERADE`)},
12071207
// mark packets from pod to service
1208-
{Table: "mangle", Chain: Prerouting, Rule: strings.Fields(`-i ovn0 -m set --match-set ovn40subnets src -m set --match-set ovn40services dst -j MARK --set-xmark 0x4000/0x4000`)},
1208+
{Table: "mangle", Chain: Prerouting, Rule: strings.Fields(`-i ` + util.NodeNic + ` -m set --match-set ovn40subnets src -m set --match-set ovn40services dst -j MARK --set-xmark 0x4000/0x4000`)},
12091209
// Input Accept
12101210
{Table: "filter", Chain: "INPUT", Rule: strings.Fields(`-m set --match-set ovn40subnets src -j ACCEPT`)},
12111211
{Table: "filter", Chain: "INPUT", Rule: strings.Fields(`-m set --match-set ovn40subnets dst -j ACCEPT`)},
@@ -1222,7 +1222,7 @@ func (c *Controller) cleanObsoleteIptablesRules(protocol string, rules []util.IP
12221222
}
12231223
v6ObsoleteRules = []util.IPTableRule{
12241224
{Table: NAT, Chain: Postrouting, Rule: strings.Fields(`-m mark --mark 0x40000/0x40000 -j MASQUERADE`)},
1225-
{Table: "mangle", Chain: Prerouting, Rule: strings.Fields(`-i ovn0 -m set --match-set ovn60subnets src -m set --match-set ovn60services dst -j MARK --set-xmark 0x40000/0x40000`)},
1225+
{Table: "mangle", Chain: Prerouting, Rule: strings.Fields(`-i ` + util.NodeNic + ` -m set --match-set ovn60subnets src -m set --match-set ovn60services dst -j MARK --set-xmark 0x40000/0x40000`)},
12261226
// legacy rules
12271227
// nat packets marked by kube-proxy or kube-ovn
12281228
{Table: NAT, Chain: Postrouting, Rule: strings.Fields(`-m mark --mark 0x4000/0x4000 -j MASQUERADE`)},
@@ -1239,7 +1239,7 @@ func (c *Controller) cleanObsoleteIptablesRules(protocol string, rules []util.IP
12391239
// nat outgoing
12401240
{Table: NAT, Chain: Postrouting, Rule: strings.Fields(`-m set --match-set ovn60subnets-nat src -m set ! --match-set ovn60subnets dst -j MASQUERADE`)},
12411241
// mark packets from pod to service
1242-
{Table: "mangle", Chain: Prerouting, Rule: strings.Fields(`-i ovn0 -m set --match-set ovn60subnets src -m set --match-set ovn60services dst -j MARK --set-xmark 0x4000/0x4000`)},
1242+
{Table: "mangle", Chain: Prerouting, Rule: strings.Fields(`-i ` + util.NodeNic + ` -m set --match-set ovn60subnets src -m set --match-set ovn60services dst -j MARK --set-xmark 0x4000/0x4000`)},
12431243
// Input Accept
12441244
{Table: "filter", Chain: "INPUT", Rule: strings.Fields(`-m set --match-set ovn60subnets src -j ACCEPT`)},
12451245
{Table: "filter", Chain: "INPUT", Rule: strings.Fields(`-m set --match-set ovn60subnets dst -j ACCEPT`)},

pkg/daemon/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func InitNodeGateway(config *Configuration) error {
6161
return err
6262
}
6363
if node.Annotations[util.IPAddressAnnotation] == "" {
64-
klog.Warningf("no ovn0 address for node %s, please check kube-ovn-controller logs", nodeName)
64+
klog.Warningf("no %s address for node %s, please check kube-ovn-controller logs", util.NodeNic, nodeName)
6565
time.Sleep(3 * time.Second)
6666
continue
6767
}

pkg/daemon/ovs_linux.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ func (csh cniServerHandler) configureContainerNic(podName, podNamespace, nicName
565565
func (csh cniServerHandler) checkGatewayReady(podName, podNamespace string, gwCheckMode int, intr, ipAddr, gateway string, verbose bool) error {
566566
if gwCheckMode == gatewayCheckModeArpingNotConcerned || gwCheckMode == gatewayCheckModePingNotConcerned {
567567
// ignore error if disableGatewayCheck=true
568-
_ = waitNetworkReady(intr, ipAddr, gateway, verbose, 1, nil)
568+
_ = waitNetworkReady(intr, ipAddr, gateway, true, verbose, 1, nil)
569569
return nil
570570
}
571571

@@ -600,14 +600,14 @@ func (csh cniServerHandler) checkGatewayReady(podName, podNamespace string, gwCh
600600
}
601601
}()
602602

603-
return waitNetworkReady(intr, ipAddr, gateway, verbose, gatewayCheckMaxRetry, done)
603+
return waitNetworkReady(intr, ipAddr, gateway, true, verbose, gatewayCheckMaxRetry, done)
604604
}
605605

606-
func waitNetworkReady(nic, ipAddr, gateway string, verbose bool, maxRetry int, done chan struct{}) error {
606+
func waitNetworkReady(nic, ipAddr, gateway string, preferARP, verbose bool, maxRetry int, done chan struct{}) error {
607607
ips := strings.Split(ipAddr, ",")
608608
for i, gw := range strings.Split(gateway, ",") {
609609
src := strings.Split(ips[i], "/")[0]
610-
if util.CheckProtocol(gw) == kubeovnv1.ProtocolIPv4 {
610+
if preferARP && util.CheckProtocol(gw) == kubeovnv1.ProtocolIPv4 {
611611
mac, count, err := util.ArpResolve(nic, gw, time.Second, maxRetry, done)
612612
cniConnectivityResult.WithLabelValues(nodeName).Add(float64(count))
613613
if err != nil {
@@ -721,8 +721,8 @@ func configureNodeNic(cs kubernetes.Interface, nodeName, portName, ip, gw, joinC
721721
status := corev1.ConditionFalse
722722
reason := "JoinSubnetGatewayReachable"
723723
message := fmt.Sprintf("ping check to gateway ip %s succeeded", gw)
724-
if err = waitNetworkReady(util.NodeNic, ip, gw, true, gatewayCheckMaxRetry, nil); err != nil {
725-
klog.Errorf("failed to init ovn0 check: %v", err)
724+
if err = waitNetworkReady(util.NodeNic, ip, gw, false, true, gatewayCheckMaxRetry, nil); err != nil {
725+
klog.Errorf("failed to init %s check: %v", util.NodeNic, err)
726726
status = corev1.ConditionTrue
727727
reason = "JoinSubnetGatewayUnreachable"
728728
message = fmt.Sprintf("ping check to gateway ip %s failed", gw)
@@ -739,11 +739,11 @@ func configureNodeNic(cs kubernetes.Interface, nodeName, portName, ip, gw, joinC
739739
func (c *Controller) loopOvn0Check() {
740740
link, err := netlink.LinkByName(util.NodeNic)
741741
if err != nil {
742-
util.LogFatalAndExit(err, "failed to get ovn0 nic")
742+
util.LogFatalAndExit(err, "failed to get node nic %s", util.NodeNic)
743743
}
744744

745745
if link.Attrs().OperState == netlink.OperDown {
746-
util.LogFatalAndExit(err, "ovn0 nic is down")
746+
util.LogFatalAndExit(err, "node nic %s is down", util.NodeNic)
747747
}
748748

749749
node, err := c.nodesLister.Get(c.config.NodeName)
@@ -756,8 +756,8 @@ func (c *Controller) loopOvn0Check() {
756756
status := corev1.ConditionFalse
757757
reason := "JoinSubnetGatewayReachable"
758758
message := fmt.Sprintf("ping check to gateway ip %s succeeded", gw)
759-
if err = waitNetworkReady(util.NodeNic, ip, gw, false, 5, nil); err != nil {
760-
klog.Errorf("failed to init ovn0 check: %v", err)
759+
if err = waitNetworkReady(util.NodeNic, ip, gw, false, false, 5, nil); err != nil {
760+
klog.Errorf("failed to init %s check: %v", util.NodeNic, err)
761761
status = corev1.ConditionTrue
762762
reason = "JoinSubnetGatewayUnreachable"
763763
message = fmt.Sprintf("ping check to gateway ip %s failed", gw)
@@ -778,7 +778,7 @@ func (c *Controller) loopOvn0Check() {
778778
}
779779

780780
if err != nil {
781-
util.LogFatalAndExit(err, "failed to ping ovn0 gateway %s", gw)
781+
util.LogFatalAndExit(err, "failed to ping %s gateway %s", util.NodeNic, gw)
782782
}
783783
}
784784

@@ -831,7 +831,7 @@ func (c *Controller) checkNodeGwNicInNs(nodeExtIP, ip, gw string, gwNS ns.NetNS)
831831
}
832832
if exists {
833833
return ns.WithNetNSPath(gwNS.Path(), func(_ ns.NetNS) error {
834-
err = waitNetworkReady(util.NodeGwNic, ip, gw, true, 3, nil)
834+
err = waitNetworkReady(util.NodeGwNic, ip, gw, true, true, 3, nil)
835835
if err == nil {
836836
if output, err := exec.Command("bfdd-control", "status").CombinedOutput(); err != nil {
837837
err := fmt.Errorf("failed to get bfdd status, %w, %s", err, output)
@@ -956,7 +956,7 @@ func configureNodeGwNic(portName, ip, gw string, macAddr net.HardwareAddr, mtu i
956956
klog.Error(err)
957957
return err
958958
}
959-
return waitNetworkReady(util.NodeGwNic, ip, gw, true, 3, nil)
959+
return waitNetworkReady(util.NodeGwNic, ip, gw, true, true, 3, nil)
960960
})
961961
}
962962

0 commit comments

Comments
 (0)