Split tunneling behavior into a separated tunnel bridge

Change-Id: I4de5f21ac9eaf286479f619c960a2319b597a819
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
index 18b9a11..fd0dff0 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
@@ -111,6 +111,7 @@
 import static org.onosproject.k8snetworking.api.Constants.SHIFTED_IP_PREFIX;
 import static org.onosproject.k8snetworking.api.Constants.SRC;
 import static org.onosproject.k8snetworking.api.Constants.STAT_EGRESS_TABLE;
+import static org.onosproject.k8snetworking.api.Constants.TUN_ENTRY_TABLE;
 import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_CIDR;
 import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_IP_CIDR_DEFAULT;
 import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_IP_NAT_MODE;
@@ -645,16 +646,33 @@
                 }
                 tBuilder.transition(STAT_EGRESS_TABLE);
             } else {
-                PortNumber portNum = tunnelPortNumByNetId(network.networkId(),
-                        k8sNetworkService, n);
                 K8sNode localNode = k8sNodeService.node(network.name());
 
-                tBuilder.extension(buildExtension(
-                        deviceService,
-                        n.intgBridge(),
-                        localNode.dataIp().getIp4Address()),
-                        n.intgBridge())
-                        .setOutput(portNum);
+                tBuilder.setOutput(n.intgToTunPortNum());
+
+                PortNumber portNum = tunnelPortNumByNetId(network.networkId(),
+                        k8sNetworkService, n);
+
+                // install rules into tunnel bridge
+                TrafficTreatment treatmentToRemote = DefaultTrafficTreatment.builder()
+                        .extension(buildExtension(
+                                deviceService,
+                                n.tunBridge(),
+                                localNode.dataIp().getIp4Address()),
+                                n.tunBridge())
+                        .setTunnelId(Long.valueOf(network.segmentId()))
+                        .setOutput(portNum)
+                        .build();
+
+                k8sFlowRuleService.setRule(
+                        appId,
+                        n.tunBridge(),
+                        sBuilder.build(),
+                        treatmentToRemote,
+                        PRIORITY_CIDR_RULE,
+                        TUN_ENTRY_TABLE,
+                        install
+                );
             }
 
             k8sFlowRuleService.setRule(