diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
index 3588414..db6583a 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
@@ -56,13 +56,21 @@
     public static final String DEFAULT_SERVICE_IP_CIDR = "10.96.0.0/12";
     public static final String DEFAULT_SERVICE_IP_NONE = "none";
 
-    public static final String PORT_NAME_PREFIX_CONTAINER = "veth";
+    public static final String NORMAL_PORT_NAME_PREFIX_CONTAINER = "veth";
+    public static final String PT_PORT_NAME_PREFIX_CONTAINER = "tap";
+    public static final int NORMAL_PORT_PREFIX_LENGTH = 4;
+    public static final int PT_PORT_PREFIX_LENGTH = 3;
 
     public static final String ANNOTATION_NETWORK_ID = "networkId";
     public static final String ANNOTATION_PORT_ID = "portId";
     public static final String ANNOTATION_CREATE_TIME = "createTime";
     public static final String ANNOTATION_SEGMENT_ID = "segId";
 
+    // network type
+    public static final String VXLAN = "VXLAN";
+    public static final String GRE = "GRE";
+    public static final String GENEVE = "GENEVE";
+
     public static final long DEFAULT_METADATA_MASK = 0xffffffffffffffffL;
     public static final int DEFAULT_NAMESPACE_HASH = 0xffffffff;
 
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sPort.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sPort.java
index 4d2b906..a779a87 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sPort.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sPort.java
@@ -114,6 +114,19 @@
     }
 
     @Override
+    public K8sPort updateDeviceId(DeviceId deviceId) {
+        return new Builder()
+                .networkId(networkId)
+                .portId(portId)
+                .macAddress(macAddress)
+                .ipAddress(ipAddress)
+                .deviceId(deviceId)
+                .portNumber(portNumber)
+                .state(state)
+                .build();
+    }
+
+    @Override
     public boolean equals(Object o) {
         if (this == o) {
             return true;
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPort.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPort.java
index f25a725..633de51 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPort.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPort.java
@@ -107,6 +107,14 @@
     K8sPort updatePortNumber(PortNumber portNumber);
 
     /**
+     * Returns new port instance with the given device ID.
+     *
+     * @param deviceId device identifier
+     * @return updated port
+     */
+    K8sPort updateDeviceId(DeviceId deviceId);
+
+    /**
      * Builder of new port.
      */
     interface Builder {
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingHandler.java
index 0165975..d62a923 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingHandler.java
@@ -66,8 +66,12 @@
 import static org.onosproject.k8snetworking.api.Constants.PRIORITY_TUNNEL_TAG_RULE;
 import static org.onosproject.k8snetworking.api.Constants.TUN_ENTRY_TABLE;
 import static org.onosproject.k8snetworking.api.Constants.VTAG_TABLE;
+import static org.onosproject.k8snetworking.api.K8sNetwork.Type.GENEVE;
+import static org.onosproject.k8snetworking.api.K8sNetwork.Type.GRE;
+import static org.onosproject.k8snetworking.api.K8sNetwork.Type.VXLAN;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.getPropertyValue;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.tunnelPortNumByNetId;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.tunnelPortNumByNetType;
 import static org.onosproject.k8snetworking.util.RulePopulatorUtil.buildExtension;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -228,9 +232,9 @@
     }
 
     private void setRulesForTunnelBridge(K8sNode node, boolean install) {
-        setRulesForTunnelBridgeByType(node, K8sNetwork.Type.VXLAN, install);
-        setRulesForTunnelBridgeByType(node, K8sNetwork.Type.GRE, install);
-        setRulesForTunnelBridgeByType(node, K8sNetwork.Type.GENEVE, install);
+        setRulesForTunnelBridgeByType(node, VXLAN, install);
+        setRulesForTunnelBridgeByType(node, GRE, install);
+        setRulesForTunnelBridgeByType(node, GENEVE, install);
     }
 
     private void setRulesForTunnelBridgeByType(K8sNode node, K8sNetwork.Type type, boolean install) {
@@ -239,13 +243,13 @@
 
         switch (type) {
             case VXLAN:
-                portNum = node.vxlanPortNum();
+                portNum = tunnelPortNumByNetType(VXLAN, node);
                 break;
             case GRE:
-                portNum = node.grePortNum();
+                portNum = tunnelPortNumByNetType(GRE, node);
                 break;
             case GENEVE:
-                portNum = node.genevePortNum();
+                portNum = tunnelPortNumByNetType(GENEVE, node);
                 break;
             default:
                 return;
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingHostProvider.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingHostProvider.java
index 7510aaf..167d4ca 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingHostProvider.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingHostProvider.java
@@ -23,6 +23,8 @@
 import org.onosproject.core.CoreService;
 import org.onosproject.k8snetworking.api.K8sNetwork;
 import org.onosproject.k8snetworking.api.K8sNetworkAdminService;
+import org.onosproject.k8snetworking.api.K8sNetworkEvent;
+import org.onosproject.k8snetworking.api.K8sNetworkListener;
 import org.onosproject.k8snetworking.api.K8sPort;
 import org.onosproject.k8snode.api.K8sNode;
 import org.onosproject.k8snode.api.K8sNodeEvent;
@@ -65,8 +67,11 @@
 import static org.onosproject.k8snetworking.api.Constants.ANNOTATION_NETWORK_ID;
 import static org.onosproject.k8snetworking.api.Constants.ANNOTATION_PORT_ID;
 import static org.onosproject.k8snetworking.api.Constants.ANNOTATION_SEGMENT_ID;
+import static org.onosproject.k8snetworking.api.Constants.GENEVE;
+import static org.onosproject.k8snetworking.api.Constants.GRE;
 import static org.onosproject.k8snetworking.api.Constants.K8S_NETWORKING_APP_ID;
-import static org.onosproject.k8snetworking.api.Constants.PORT_NAME_PREFIX_CONTAINER;
+import static org.onosproject.k8snetworking.api.Constants.VXLAN;
+import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.existingContainerPort;
 import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.isContainer;
 import static org.onosproject.k8snode.api.K8sNodeState.INIT;
 import static org.onosproject.net.AnnotationKeys.PORT_NAME;
@@ -81,7 +86,6 @@
 
     private static final String ERR_ADD_HOST = "Failed to add host: ";
     private static final String SONA_HOST_SCHEME = "sona-k8s";
-    private static final int PORT_PREFIX_LENGTH = 4;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected CoreService coreService;
@@ -112,6 +116,8 @@
             new InternalDeviceListener();
     private final InternalK8sNodeListener internalK8sNodeListener =
             new InternalK8sNodeListener();
+    private final InternalK8sNetworkListener internalK8sNetworkListener =
+            new InternalK8sNetworkListener();
 
     /**
      * Creates kubernetes switching host provider.
@@ -125,6 +131,7 @@
         coreService.registerApplication(K8S_NETWORKING_APP_ID);
         deviceService.addListener(internalDeviceListener);
         k8sNodeService.addListener(internalK8sNodeListener);
+        k8sNetworkService.addListener(internalK8sNetworkListener);
         hostProviderService = hostProviderRegistry.register(this);
 
         log.info("Started");
@@ -133,6 +140,7 @@
     @Deactivate
     protected void deactivate() {
         hostProviderRegistry.unregister(this);
+        k8sNetworkService.removeListener(internalK8sNetworkListener);
         k8sNodeService.removeListener(internalK8sNodeListener);
         deviceService.removeListener(internalDeviceListener);
 
@@ -272,7 +280,7 @@
 
         if (isContainer(portName)) {
             return k8sNetworkService.ports().stream()
-                    .filter(p -> p.portId().contains(portName.substring(PORT_PREFIX_LENGTH)))
+                    .filter(p -> existingContainerPort(p.portId(), portName))
                     .findAny().orElse(null);
         } else {
             return null;
@@ -290,8 +298,7 @@
 
             String portName = port.annotations().value(PORT_NAME);
 
-            return !Strings.isNullOrEmpty(portName) &&
-                    portName.startsWith(PORT_NAME_PREFIX_CONTAINER);
+            return !Strings.isNullOrEmpty(portName) && isContainer(portName);
         }
 
         private boolean isRelevantHelper(DeviceEvent event) {
@@ -435,4 +442,46 @@
                     });
         }
     }
+
+    private class InternalK8sNetworkListener implements K8sNetworkListener {
+
+        @Override
+        public void event(K8sNetworkEvent event) {
+            switch (event.type()) {
+                case K8S_PORT_CREATED:
+                    executor.execute(() -> processK8sPortAddition(event));
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        private void processK8sPortAddition(K8sNetworkEvent event) {
+            String portId = event.port().portId();
+            for (Device device : deviceService.getDevices()) {
+                Port port = deviceService.getPorts(device.id()).stream()
+                        .filter(Port::isEnabled)
+                        .filter(p -> p.annotations().value(PORT_NAME) != null)
+                        .filter(p -> existingContainerPort(portId, p.annotations().value(PORT_NAME)))
+                        .findAny().orElse(null);
+
+                if (port != null) {
+                    String upperPortName = port.annotations().value(PORT_NAME).toUpperCase();
+                    // we do not handle tunnel typed port
+                    if (upperPortName.contains(VXLAN) || upperPortName.contains(GRE) ||
+                            upperPortName.contains(GENEVE)) {
+                        continue;
+                    }
+
+                    // if we have null device ID, we simply update the device ID on the k8s port
+                    if (event.port().deviceId() == null) {
+                        K8sPort updated = event.port().updateDeviceId(device.id());
+                        k8sNetworkService.updatePort(updated);
+                    }
+
+                    processPortAdded(port);
+                }
+            }
+        }
+    }
 }
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/util/K8sNetworkingUtil.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/util/K8sNetworkingUtil.java
index 17240fb..e63a685 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/util/K8sNetworkingUtil.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/util/K8sNetworkingUtil.java
@@ -29,6 +29,7 @@
 import io.fabric8.kubernetes.client.KubernetesClient;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.net.util.SubnetUtils;
+import org.onlab.osgi.DefaultServiceDirectory;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.TpPort;
@@ -43,10 +44,15 @@
 import org.onosproject.k8snetworking.api.K8sServiceService;
 import org.onosproject.k8snode.api.K8sApiConfig;
 import org.onosproject.k8snode.api.K8sApiConfigService;
+import org.onosproject.k8snode.api.K8sHost;
+import org.onosproject.k8snode.api.K8sHostService;
 import org.onosproject.k8snode.api.K8sNode;
 import org.onosproject.k8snode.api.K8sNodeService;
+import org.onosproject.k8snode.api.K8sTunnelBridge;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.group.DefaultGroupKey;
 import org.onosproject.net.group.GroupKey;
 import org.slf4j.Logger;
@@ -63,8 +69,13 @@
 import java.util.stream.Collectors;
 
 import static org.onosproject.k8snetworking.api.Constants.DEFAULT_NAMESPACE_HASH;
-import static org.onosproject.k8snetworking.api.Constants.PORT_NAME_PREFIX_CONTAINER;
+import static org.onosproject.k8snetworking.api.Constants.NORMAL_PORT_NAME_PREFIX_CONTAINER;
+import static org.onosproject.k8snetworking.api.Constants.NORMAL_PORT_PREFIX_LENGTH;
+import static org.onosproject.k8snetworking.api.Constants.PT_PORT_NAME_PREFIX_CONTAINER;
+import static org.onosproject.k8snetworking.api.Constants.PT_PORT_PREFIX_LENGTH;
 import static org.onosproject.k8snetworking.api.K8sPort.State.INACTIVE;
+import static org.onosproject.k8snode.api.K8sApiConfig.Mode.PASSTHROUGH;
+import static org.onosproject.net.AnnotationKeys.PORT_NAME;
 
 /**
  * An utility that used in kubernetes networking app.
@@ -101,7 +112,31 @@
      * @return true if the port is associated with container; false otherwise
      */
     public static boolean isContainer(String portName) {
-        return portName != null && portName.contains(PORT_NAME_PREFIX_CONTAINER);
+        return portName != null && (portName.contains(NORMAL_PORT_NAME_PREFIX_CONTAINER) ||
+                portName.contains(PT_PORT_NAME_PREFIX_CONTAINER));
+    }
+
+    /**
+     * Checks that whether the compared ports exist in the source name.
+     *
+     * @param sourceName    source port name
+     * @param comparedName  port name to be compared
+     * @return true if the compared port name exists, false otherwise
+     */
+    public static boolean existingContainerPort(String sourceName, String comparedName) {
+        if (comparedName == null) {
+            return false;
+        }
+
+        if (comparedName.contains(NORMAL_PORT_NAME_PREFIX_CONTAINER)) {
+            return sourceName.contains(comparedName.substring(NORMAL_PORT_PREFIX_LENGTH));
+        }
+
+        if (comparedName.contains(PT_PORT_NAME_PREFIX_CONTAINER)) {
+            return sourceName.contains(comparedName.substring(PT_PORT_PREFIX_LENGTH));
+        }
+
+        return false;
     }
 
     /**
@@ -133,19 +168,58 @@
      */
     public static PortNumber tunnelPortNumByNetType(K8sNetwork.Type netType,
                                                     K8sNode node) {
-        switch (netType) {
-            case VXLAN:
-                return node.vxlanPortNum();
-            case GRE:
-                return node.grePortNum();
-            case GENEVE:
-                return node.genevePortNum();
-            default:
+        if (node.mode() == PASSTHROUGH) {
+            K8sHostService hostService =
+                    DefaultServiceDirectory.getService(K8sHostService.class);
+            Port port = null;
+            for (K8sHost host : hostService.hosts()) {
+                if (host.nodeNames().contains(node.hostname())) {
+                    for (K8sTunnelBridge bridge : host.tunBridges()) {
+                        if (bridge.tunnelId() == node.segmentId()) {
+                            String portName = netType.name().toLowerCase() +
+                                    "-" + node.segmentId();
+                            port = port(bridge.deviceId(), portName);
+                        }
+                    }
+                }
+            }
+
+            if (port == null) {
                 return null;
+            } else {
+                return port.number();
+            }
+
+        } else {
+            switch (netType) {
+                case VXLAN:
+                    return node.vxlanPortNum();
+                case GRE:
+                    return node.grePortNum();
+                case GENEVE:
+                    return node.genevePortNum();
+                default:
+                    return null;
+            }
         }
     }
 
     /**
+     * Obtains the port from the device with the given port name.
+     *
+     * @param deviceId      device identifier
+     * @param portName      port name
+     * @return port object
+     */
+    public static Port port(DeviceId deviceId, String portName) {
+        DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
+        return deviceService.getPorts(deviceId).stream()
+                .filter(p -> p.isEnabled() &&
+                        Objects.equals(p.annotations().value(PORT_NAME), portName))
+                .findAny().orElse(null);
+    }
+
+    /**
      * Obtains the property value with specified property key name.
      *
      * @param properties    a collection of properties
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
index b6382d7..82b63cb 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
@@ -28,14 +28,14 @@
     public static final String LOCAL_BRIDGE = "kbr-local";
     public static final String TUNNEL_BRIDGE = "kbr-tun";
     public static final String EXTERNAL_ROUTER = "kbr-router";
-    public static final String INTEGRATION_TO_EXTERNAL_BRIDGE = "kbr-int-ex";
-    public static final String PHYSICAL_EXTERNAL_BRIDGE = "phy-kbr-ex";
-    public static final String INTEGRATION_TO_LOCAL_BRIDGE = "kbr-int-local";
-    public static final String LOCAL_TO_INTEGRATION_BRIDGE = "kbr-local-int";
-    public static final String EXTERNAL_TO_ROUTER = "kbr-ex-router";
-    public static final String ROUTER_TO_EXTERNAL = "kbr-router-ex";
-    public static final String INTEGRATION_TO_TUN_BRIDGE = "kbr-int-tun";
-    public static final String TUN_TO_INTEGRATION_BRIDGE = "kbr-tun-int";
+    public static final String INTEGRATION_TO_EXTERNAL_BRIDGE = "int-ex";
+    public static final String PHYSICAL_EXTERNAL_BRIDGE = "ex-int";
+    public static final String INTEGRATION_TO_LOCAL_BRIDGE = "int-local";
+    public static final String LOCAL_TO_INTEGRATION_BRIDGE = "local-int";
+    public static final String EXTERNAL_TO_ROUTER = "ex-router";
+    public static final String ROUTER_TO_EXTERNAL = "router-ex";
+    public static final String INTEGRATION_TO_TUN_BRIDGE = "int-tun";
+    public static final String TUN_TO_INTEGRATION_BRIDGE = "tun-int";
     public static final String VXLAN_TUNNEL = "vxlan";
     public static final String GRE_TUNNEL = "gre";
     public static final String GENEVE_TUNNEL = "geneve";
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
index 7e4b4bc..6bb2001 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
@@ -190,7 +190,24 @@
 
     @Override
     public DeviceId tunBridge() {
-        return tunBridge;
+
+        if (mode == PASSTHROUGH) {
+            K8sHostService hostService =
+                    DefaultServiceDirectory.getService(K8sHostService.class);
+            DeviceId deviceId = null;
+            for (K8sHost host : hostService.hosts()) {
+                if (host.nodeNames().contains(hostname())) {
+                    for (K8sTunnelBridge bridge : host.tunBridges()) {
+                        if (bridge.tunnelId() == segmentId()) {
+                            deviceId = bridge.deviceId();
+                        }
+                    }
+                }
+            }
+            return deviceId;
+        } else {
+            return tunBridge;
+        }
     }
 
     @Override
@@ -403,7 +420,28 @@
 
     @Override
     public PortNumber tunToIntgPortNum() {
-        return portNumber(tunBridge, tunToIntgPatchPortName());
+        if (mode() == PASSTHROUGH) {
+            K8sHostService hostService =
+                    DefaultServiceDirectory.getService(K8sHostService.class);
+            Port port = null;
+            for (K8sHost host : hostService.hosts()) {
+                if (host.nodeNames().contains(hostname())) {
+                    for (K8sTunnelBridge bridge : host.tunBridges()) {
+                        if (bridge.tunnelId() == segmentId()) {
+                            port = port(bridge.deviceId(), tunToIntgPatchPortName());
+                        }
+                    }
+                }
+            }
+
+            if (port == null) {
+                return null;
+            } else {
+                return port.number();
+            }
+        } else {
+            return portNumber(tunBridge, tunToIntgPatchPortName());
+        }
     }
 
     @Override
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 4cc6609..2a938e0 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
@@ -44,6 +44,7 @@
     private static final String CLUSTER_NAME = "clusterName";
     private static final String HOSTNAME = "hostname";
     private static final String TYPE = "type";
+    private static final String MODE = "mode";
     private static final String SEGMENT_ID = "segmentId";
     private static final String MANAGEMENT_IP = "managementIp";
     private static final String DATA_IP = "dataIp";
@@ -67,6 +68,7 @@
                 .put(CLUSTER_NAME, node.clusterName())
                 .put(HOSTNAME, node.hostname())
                 .put(TYPE, node.type().name())
+                .put(MODE, node.mode().name())
                 .put(SEGMENT_ID, node.segmentId())
                 .put(STATE, node.state().name())
                 .put(MANAGEMENT_IP, node.managementIp().toString());
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
index 342787c..cf78b6e 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
@@ -61,6 +61,7 @@
 import static org.onosproject.k8snode.api.K8sNode.Type.MASTER;
 import static org.onosproject.k8snode.api.K8sNode.Type.MINION;
 import static org.onosproject.k8snode.api.K8sNodeService.APP_ID;
+import static org.onosproject.k8snode.api.K8sNodeState.ON_BOARDED;
 import static org.onosproject.k8snode.api.K8sNodeState.PRE_ON_BOARD;
 import static org.onosproject.k8snode.util.K8sNodeUtil.k8sClient;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -82,7 +83,7 @@
     private static final String DEFAULT_GATEWAY_IP = "127.0.0.1";
     private static final String DEFAULT_BRIDGE_IP = "127.0.0.1";
 
-    private static final long SLEEP_MS = 3000; // we wait 3s
+    private static final long SLEEP_MS = 10000; // we wait 10s
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected CoreService coreService;
@@ -151,9 +152,22 @@
             return;
         }
 
-        k8sClient.nodes().list().getItems().forEach(n ->
-            k8sNodeAdminService.createNode(buildK8sNode(n, config))
-        );
+        for (Node node : k8sClient.nodes().list().getItems()) {
+            K8sNode k8sNode = buildK8sNode(node, config);
+            k8sNodeAdminService.createNode(k8sNode);
+
+            while (k8sNodeAdminService.node(k8sNode.hostname()).state() != ON_BOARDED) {
+                try {
+                    sleep(SLEEP_MS);
+                } catch (InterruptedException e) {
+                    log.error("Exception caused during on-boarding state checking...");
+                }
+
+                if (k8sNodeAdminService.node(k8sNode.hostname()).state() == ON_BOARDED) {
+                    break;
+                }
+            }
+        }
     }
 
     private void bootstrapK8sHosts(K8sApiConfig config) {
@@ -299,13 +313,9 @@
 
                 bootstrapK8sNodes(config);
 
-                try {
-                    sleep(SLEEP_MS);
-                } catch (InterruptedException e) {
-                    log.error("Exception caused during init state checking...");
+                if (config.infos().size() > 0) {
+                    bootstrapK8sHosts(config);
                 }
-
-                bootstrapK8sHosts(config);
             }
         }
     }
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 7e99f47..cec3d2c 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
@@ -354,42 +354,42 @@
         // integration bridge -> external bridge
         PatchDescription brIntExtPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.intgBridgeName())
-                .ifaceName(k8sNode.intgToExtPatchPortName())
-                .peer(k8sNode.extToIntgPatchPortName())
-                .build();
+                        .deviceId(k8sNode.intgBridgeName())
+                        .ifaceName(k8sNode.intgToExtPatchPortName())
+                        .peer(k8sNode.extToIntgPatchPortName())
+                        .build();
 
         // integration bridge -> tunnel bridge
         PatchDescription brIntTunPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.intgBridgeName())
-                .ifaceName(k8sNode.intgToTunPatchPortName())
-                .peer(k8sNode.tunToIntgPatchPortName())
-                .build();
+                        .deviceId(k8sNode.intgBridgeName())
+                        .ifaceName(k8sNode.intgToTunPatchPortName())
+                        .peer(k8sNode.tunToIntgPatchPortName())
+                        .build();
 
         // external bridge -> integration bridge
         PatchDescription brExtIntPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.extBridgeName())
-                .ifaceName(k8sNode.extToIntgPatchPortName())
-                .peer(k8sNode.intgToExtPatchPortName())
-                .build();
+                        .deviceId(k8sNode.extBridgeName())
+                        .ifaceName(k8sNode.extToIntgPatchPortName())
+                        .peer(k8sNode.intgToExtPatchPortName())
+                        .build();
 
         // integration bridge -> local bridge
         PatchDescription brIntLocalPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.intgBridgeName())
-                .ifaceName(k8sNode.intgToLocalPatchPortName())
-                .peer(k8sNode.localToIntgPatchPortName())
-                .build();
+                        .deviceId(k8sNode.intgBridgeName())
+                        .ifaceName(k8sNode.intgToLocalPatchPortName())
+                        .peer(k8sNode.localToIntgPatchPortName())
+                        .build();
 
         // local bridge -> integration bridge
         PatchDescription brLocalIntPatchDesc =
                 DefaultPatchDescription.builder()
-                .deviceId(k8sNode.localBridgeName())
-                .ifaceName(k8sNode.localToIntgPatchPortName())
-                .peer(k8sNode.intgToLocalPatchPortName())
-                .build();
+                        .deviceId(k8sNode.localBridgeName())
+                        .ifaceName(k8sNode.localToIntgPatchPortName())
+                        .peer(k8sNode.intgToLocalPatchPortName())
+                        .build();
 
         InterfaceConfig ifaceConfig = device.as(InterfaceConfig.class);
         ifaceConfig.addPatchMode(k8sNode.intgToExtPatchPortName(), brIntExtPatchDesc);
@@ -402,10 +402,10 @@
             // tunnel bridge -> integration bridge
             PatchDescription brTunIntPatchDesc =
                     DefaultPatchDescription.builder()
-                    .deviceId(k8sNode.tunBridgeName())
-                    .ifaceName(k8sNode.tunToIntgPatchPortName())
-                    .peer(k8sNode.intgToTunPatchPortName())
-                    .build();
+                            .deviceId(k8sNode.tunBridgeName())
+                            .ifaceName(k8sNode.tunToIntgPatchPortName())
+                            .peer(k8sNode.intgToTunPatchPortName())
+                            .build();
 
             ifaceConfig.addPatchMode(k8sNode.tunToIntgPatchPortName(), brTunIntPatchDesc);
         }
