diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeCheckCommand.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeCheckCommand.java
index 69c64b9..f421de0 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeCheckCommand.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeCheckCommand.java
@@ -32,6 +32,9 @@
 import static org.onosproject.k8snode.api.Constants.GRE_TUNNEL;
 import static org.onosproject.k8snode.api.Constants.INTEGRATION_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.INTEGRATION_TO_EXTERNAL_BRIDGE;
+import static org.onosproject.k8snode.api.Constants.INTEGRATION_TO_LOCAL_BRIDGE;
+import static org.onosproject.k8snode.api.Constants.LOCAL_BRIDGE;
+import static org.onosproject.k8snode.api.Constants.LOCAL_TO_INTEGRATION_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.PHYSICAL_EXTERNAL_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.VXLAN_TUNNEL;
 import static org.onosproject.net.AnnotationKeys.PORT_NAME;
@@ -74,6 +77,7 @@
                     intgBridge.annotations());
             printPortState(deviceService, node.intgBridge(), INTEGRATION_BRIDGE);
             printPortState(deviceService, node.intgBridge(), INTEGRATION_TO_EXTERNAL_BRIDGE);
+            printPortState(deviceService, node.intgBridge(), INTEGRATION_TO_LOCAL_BRIDGE);
             if (node.dataIp() != null) {
                 printPortState(deviceService, node.intgBridge(), VXLAN_TUNNEL);
                 printPortState(deviceService, node.intgBridge(), GRE_TUNNEL);
@@ -103,6 +107,19 @@
                     EXTERNAL_BRIDGE,
                     node.extBridge());
         }
+
+        print("[Local Bridge Status]");
+        Device localBridge = deviceService.getDevice(node.localBridge());
+        if (localBridge != null) {
+            print("%s %s=%s available=%s %s",
+                    deviceService.isAvailable(localBridge.id()) ? MSG_OK : MSG_ERROR,
+                    LOCAL_BRIDGE,
+                    localBridge.id(),
+                    deviceService.isAvailable(localBridge.id()),
+                    localBridge.annotations());
+            printPortState(deviceService, node.localBridge(), LOCAL_BRIDGE);
+            printPortState(deviceService, node.localBridge(), LOCAL_TO_INTEGRATION_BRIDGE);
+        }
     }
 
     private void printPortState(DeviceService deviceService,
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
index 7c7b32b..41bad16 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
@@ -43,6 +43,7 @@
     private static final String DATA_IP = "dataIp";
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String EXTERNAL_BRIDGE = "externalBridge";
+    private static final String LOCAL_BRIDGE = "localBridge";
     private static final String STATE = "state";
     private static final String EXTERNAL_INTF = "externalInterface";
     private static final String EXTERNAL_BRIDGE_IP = "externalBridgeIp";
@@ -68,6 +69,10 @@
             result.put(EXTERNAL_BRIDGE, node.extBridge().toString());
         }
 
+        if (node.localBridge() != null) {
+            result.put(LOCAL_BRIDGE, node.localBridge().toString());
+        }
+
         if (node.dataIp() != null) {
             result.put(DATA_IP, node.dataIp().toString());
         }
@@ -120,6 +125,11 @@
             nodeBuilder.extBridge(DeviceId.deviceId(extBridgeJson.asText()));
         }
 
+        JsonNode localBridgeJson = json.get(LOCAL_BRIDGE);
+        if (localBridgeJson != null) {
+            nodeBuilder.localBridge(DeviceId.deviceId(localBridgeJson.asText()));
+        }
+
         JsonNode extIntfJson = json.get(EXTERNAL_INTF);
         if (extIntfJson != null) {
             nodeBuilder.extIntf(extIntfJson.asText());
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
index 83e537c..f31301f 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
@@ -74,6 +74,9 @@
 import static org.onosproject.k8snode.api.Constants.GRE_TUNNEL;
 import static org.onosproject.k8snode.api.Constants.INTEGRATION_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.INTEGRATION_TO_EXTERNAL_BRIDGE;
+import static org.onosproject.k8snode.api.Constants.INTEGRATION_TO_LOCAL_BRIDGE;
+import static org.onosproject.k8snode.api.Constants.LOCAL_BRIDGE;
+import static org.onosproject.k8snode.api.Constants.LOCAL_TO_INTEGRATION_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.PHYSICAL_EXTERNAL_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.VXLAN;
 import static org.onosproject.k8snode.api.Constants.VXLAN_TUNNEL;
@@ -196,6 +199,9 @@
         if (!deviceService.isAvailable(k8sNode.extBridge())) {
             createBridge(k8sNode, EXTERNAL_BRIDGE, k8sNode.extBridge());
         }
+        if (!deviceService.isAvailable(k8sNode.localBridge())) {
+            createBridge(k8sNode, LOCAL_BRIDGE, k8sNode.localBridge());
+        }
     }
 
     @Override
@@ -328,23 +334,43 @@
             return;
         }
 
-        PatchDescription brIntPatchDesc =
+        // integration bridge -> external bridge
+        PatchDescription brIntExtPatchDesc =
                 DefaultPatchDescription.builder()
                 .deviceId(INTEGRATION_BRIDGE)
                 .ifaceName(INTEGRATION_TO_EXTERNAL_BRIDGE)
                 .peer(PHYSICAL_EXTERNAL_BRIDGE)
                 .build();
 
-        PatchDescription brExtPatchDesc =
+        // external bridge -> integration bridge
+        PatchDescription brExtIntPatchDesc =
                 DefaultPatchDescription.builder()
                 .deviceId(EXTERNAL_BRIDGE)
                 .ifaceName(PHYSICAL_EXTERNAL_BRIDGE)
                 .peer(INTEGRATION_TO_EXTERNAL_BRIDGE)
                 .build();
 
+        // integration bridge -> local bridge
+        PatchDescription brIntLocalPatchDesc =
+                DefaultPatchDescription.builder()
+                        .deviceId(INTEGRATION_BRIDGE)
+                        .ifaceName(INTEGRATION_TO_LOCAL_BRIDGE)
+                        .peer(LOCAL_TO_INTEGRATION_BRIDGE)
+                        .build();
+
+        // local bridge -> integration bridge
+        PatchDescription brLocalIntPatchDesc =
+                DefaultPatchDescription.builder()
+                        .deviceId(LOCAL_BRIDGE)
+                        .ifaceName(LOCAL_TO_INTEGRATION_BRIDGE)
+                        .peer(INTEGRATION_TO_LOCAL_BRIDGE)
+                        .build();
+
         InterfaceConfig ifaceConfig = device.as(InterfaceConfig.class);
-        ifaceConfig.addPatchMode(INTEGRATION_TO_EXTERNAL_BRIDGE, brIntPatchDesc);
-        ifaceConfig.addPatchMode(PHYSICAL_EXTERNAL_BRIDGE, brExtPatchDesc);
+        ifaceConfig.addPatchMode(INTEGRATION_TO_EXTERNAL_BRIDGE, brIntExtPatchDesc);
+        ifaceConfig.addPatchMode(PHYSICAL_EXTERNAL_BRIDGE, brExtIntPatchDesc);
+        ifaceConfig.addPatchMode(INTEGRATION_TO_LOCAL_BRIDGE, brIntLocalPatchDesc);
+        ifaceConfig.addPatchMode(LOCAL_TO_INTEGRATION_BRIDGE, brLocalIntPatchDesc);
     }
 
     /**
@@ -436,7 +462,8 @@
 
                 return k8sNode.intgBridge() != null && k8sNode.extBridge() != null &&
                         deviceService.isAvailable(k8sNode.intgBridge()) &&
-                        deviceService.isAvailable(k8sNode.extBridge());
+                        deviceService.isAvailable(k8sNode.extBridge()) &&
+                        deviceService.isAvailable(k8sNode.localBridge());
             case DEVICE_CREATED:
                 if (k8sNode.dataIp() != null &&
                         !isIntfEnabled(k8sNode, VXLAN_TUNNEL)) {
@@ -505,6 +532,9 @@
         // delete external bridge from the node
         client.dropBridge(EXTERNAL_BRIDGE);
 
+        // delete local bridge from the node
+        client.dropBridge(LOCAL_BRIDGE);
+
         // disconnect ovsdb
         client.disconnect();
     }
@@ -597,6 +627,7 @@
                         }
 
                         // TODO: also need to check the external bridge's availability
+                        // TODO: also need to check the local bridge's availability
                         if (deviceService.isAvailable(device.id())) {
                             log.debug("Integration bridge created on {}",
                                     k8sNode.hostname());
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/K8sNodeManager.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/K8sNodeManager.java
index 122a27b..5b3f353 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/K8sNodeManager.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/K8sNodeManager.java
@@ -158,6 +158,7 @@
 
         K8sNode intNode;
         K8sNode extNode;
+        K8sNode localNode;
 
         if (node.intgBridge() == null) {
             String deviceIdStr = genDpid(deviceIdCounter.incrementAndGet());
@@ -183,7 +184,19 @@
                     NOT_DUPLICATED_MSG, extNode.extBridge());
         }
 
-        nodeStore.createNode(extNode);
+        if (node.localBridge() == null) {
+            String deviceIdStr = genDpid(deviceIdCounter.incrementAndGet());
+            checkNotNull(deviceIdStr, ERR_NULL_DEVICE_ID);
+            localNode = extNode.updateLocalBridge(DeviceId.deviceId(deviceIdStr));
+            checkArgument(!hasLocalBridge(localNode.localBridge(), localNode.hostname()),
+                    NOT_DUPLICATED_MSG, localNode.localBridge());
+        } else {
+            localNode = extNode;
+            checkArgument(!hasLocalBridge(localNode.localBridge(), localNode.hostname()),
+                    NOT_DUPLICATED_MSG, localNode.localBridge());
+        }
+
+        nodeStore.createNode(localNode);
         log.info(String.format(MSG_NODE, extNode.hostname(), MSG_CREATED));
     }
 
@@ -193,6 +206,7 @@
 
         K8sNode intNode;
         K8sNode extNode;
+        K8sNode localNode;
 
         K8sNode existingNode = nodeStore.node(node.hostname());
         checkNotNull(existingNode, ERR_NULL_NODE);
@@ -221,7 +235,19 @@
                     NOT_DUPLICATED_MSG, extNode.extBridge());
         }
 
-        nodeStore.updateNode(extNode);
+        DeviceId existLocalBridge = nodeStore.node(node.hostname()).localBridge();
+
+        if (extNode.localBridge() == null) {
+            localNode = extNode.updateLocalBridge(existLocalBridge);
+            checkArgument(!hasLocalBridge(localNode.localBridge(), localNode.hostname()),
+                    NOT_DUPLICATED_MSG, localNode.localBridge());
+        } else {
+            localNode = extNode;
+            checkArgument(!hasLocalBridge(localNode.localBridge(), localNode.hostname()),
+                    NOT_DUPLICATED_MSG, localNode.localBridge());
+        }
+
+        nodeStore.updateNode(localNode);
         log.info(String.format(MSG_NODE, extNode.hostname(), MSG_UPDATED));
     }
 
@@ -295,6 +321,15 @@
         return existNode.isPresent();
     }
 
+    private boolean hasLocalBridge(DeviceId deviceId, String hostname) {
+        Optional<K8sNode> existNode = nodeStore.nodes().stream()
+                .filter(n -> !n.hostname().equals(hostname))
+                .filter(n -> deviceId.equals(n.localBridge()))
+                .findFirst();
+
+        return existNode.isPresent();
+    }
+
     private class InternalNodeStoreDelegate implements K8sNodeStoreDelegate {
 
         @Override
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
index fbccdd0..50d769f 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
@@ -80,11 +80,17 @@
     private static final Device MINION_2_EXT_DEVICE = createDevice(5);
     private static final Device MINION_3_EXT_DEVICE = createDevice(6);
 
+    private static final Device MINION_1_LOCAL_DEVICE = createDevice(7);
+    private static final Device MINION_2_LOCAL_DEVICE = createDevice(8);
+    private static final Device MINION_3_LOCAL_DEVICE = createDevice(9);
+
+
     private static final K8sNode MINION_1 = createNode(
             MINION_1_HOSTNAME,
             MINION,
             MINION_1_INTG_DEVICE,
             MINION_1_EXT_DEVICE,
+            MINION_1_LOCAL_DEVICE,
             IpAddress.valueOf("10.100.0.1"),
             INIT
     );
@@ -93,6 +99,7 @@
             MINION,
             MINION_2_INTG_DEVICE,
             MINION_2_EXT_DEVICE,
+            MINION_2_LOCAL_DEVICE,
             IpAddress.valueOf("10.100.0.2"),
             INIT
     );
@@ -101,6 +108,7 @@
             MINION,
             MINION_3_INTG_DEVICE,
             MINION_3_EXT_DEVICE,
+            MINION_3_LOCAL_DEVICE,
             IpAddress.valueOf("10.100.0.3"),
             COMPLETE
     );
@@ -328,12 +336,14 @@
 
     private static K8sNode createNode(String hostname, K8sNode.Type type,
                                       Device intgBridge, Device extBridge,
-                                      IpAddress ipAddr, K8sNodeState state) {
+                                      Device localBridge, IpAddress ipAddr,
+                                      K8sNodeState state) {
         return DefaultK8sNode.builder()
                 .hostname(hostname)
                 .type(type)
                 .intgBridge(intgBridge.id())
                 .extBridge(extBridge.id())
+                .localBridge(localBridge.id())
                 .managementIp(ipAddr)
                 .dataIp(ipAddr)
                 .state(state)
