@@ -18,13 +18,16 @@ import (
1818
1919 "k8s.io/apimachinery/pkg/util/sets"
2020 kapi "k8s.io/kubernetes/pkg/api"
21+
22+ "github.com/vishvananda/netlink"
2123)
2224
2325type ovsController struct {
2426 ovs ovs.Interface
2527 pluginId int
2628 useConnTrack bool
2729 localIP string
30+ tunMAC string
2831}
2932
3033const (
@@ -83,6 +86,13 @@ func (oc *ovsController) SetupOVS(clusterNetworkCIDR []string, serviceNetworkCID
8386 if err != nil {
8487 return err
8588 }
89+ if oc .tunMAC == "" {
90+ link , err := netlink .LinkByName (Tun0 )
91+ if err != nil {
92+ return err
93+ }
94+ oc .tunMAC = link .Attrs ().HardwareAddr .String ()
95+ }
8696
8797 otx := oc .ovs .NewTransaction ()
8898
@@ -94,6 +104,7 @@ func (oc *ovsController) SetupOVS(clusterNetworkCIDR []string, serviceNetworkCID
94104 for _ , clusterCIDR := range clusterNetworkCIDR {
95105 otx .AddFlow ("table=0, priority=200, in_port=1, arp, nw_src=%s, nw_dst=%s, actions=move:NXM_NX_TUN_ID[0..31]->NXM_NX_REG0[],goto_table:10" , clusterCIDR , localSubnetCIDR )
96106 otx .AddFlow ("table=0, priority=200, in_port=1, ip, nw_src=%s, actions=move:NXM_NX_TUN_ID[0..31]->NXM_NX_REG0[],goto_table:10" , clusterCIDR )
107+ otx .AddFlow ("table=0, priority=200, in_port=1, ip, nw_dst=%s, actions=move:NXM_NX_TUN_ID[0..31]->NXM_NX_REG0[],goto_table:10" , clusterCIDR )
97108 }
98109 otx .AddFlow ("table=0, priority=150, in_port=1, actions=drop" )
99110 // tun0
@@ -693,7 +704,7 @@ func (oc *ovsController) UpdateNamespaceEgressRules(vnid uint32, nodeIP, egressH
693704 otx .AddFlow ("table=100, priority=100, reg0=%d, actions=drop" , vnid )
694705 } else if nodeIP == oc .localIP {
695706 // Local Egress IP
696- otx .AddFlow ("table=100, priority=100, reg0=%d, ip, actions=set_field:%s->pkt_mark,output:2" , vnid , egressHex )
707+ otx .AddFlow ("table=100, priority=100, reg0=%d, ip, actions=set_field:%s->eth_dst,set_field:%s-> pkt_mark,output:2" , vnid , oc . tunMAC , egressHex )
697708 } else {
698709 // Remote Egress IP; send via VXLAN
699710 otx .AddFlow ("table=100, priority=100, reg0=%d, ip, actions=move:NXM_NX_REG0[]->NXM_NX_TUN_ID[0..31],set_field:%s->tun_dst,output:1" , vnid , nodeIP )
0 commit comments