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 ebed390..938629f 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
@@ -400,7 +400,7 @@
         nodeService.completeNodes().forEach(n -> {
             K8sNetwork network = networkService.network(n.hostname());
             if (network != null) {
-                ipMap.put(n.dataIp().toString(), network.gatewayIp().toString());
+                ipMap.put(n.nodeIp().toString(), network.gatewayIp().toString());
             }
         });
 
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sExternalNetwork.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sExternalNetwork.java
index cc19ff7..fd174d7 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sExternalNetwork.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sExternalNetwork.java
@@ -29,12 +29,14 @@
     private final IpAddress extBridgeIp;
     private final IpAddress extGatewayIp;
     private final MacAddress extGatewayMac;
+    private final String extIntf;
 
     protected DefaultK8sExternalNetwork(IpAddress extBridgeIp, IpAddress extGatewayIp,
-                                        MacAddress extGatewayMac) {
+                                        MacAddress extGatewayMac, String extIntf) {
         this.extBridgeIp = extBridgeIp;
         this.extGatewayIp = extGatewayIp;
         this.extGatewayMac = extGatewayMac;
+        this.extIntf = extIntf;
     }
 
     @Override
@@ -52,6 +54,11 @@
         return extGatewayMac;
     }
 
+    @Override
+    public String extIntf() {
+        return extIntf;
+    }
+
     /**
      * Returns new builder instance.
      *
@@ -71,12 +78,13 @@
         }
         DefaultK8sExternalNetwork that = (DefaultK8sExternalNetwork) o;
         return extBridgeIp.equals(that.extBridgeIp) &&
-                extGatewayIp.equals(that.extGatewayIp);
+                extGatewayIp.equals(that.extGatewayIp) &&
+                extIntf.equals(that.extIntf);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(extBridgeIp, extGatewayIp, extGatewayMac);
+        return Objects.hash(extBridgeIp, extGatewayIp, extGatewayMac, extIntf);
     }
 
     @Override
@@ -85,6 +93,7 @@
                 .add("extBridgeIp", extBridgeIp)
                 .add("extGatewayIp", extGatewayIp)
                 .add("extGatewayMac", extGatewayMac)
+                .add("extIntf", extIntf)
                 .toString();
     }
 
@@ -93,6 +102,7 @@
         private IpAddress extBridgeIp;
         private IpAddress extGatewayIp;
         private MacAddress extGatewayMac;
+        private String extIntf;
 
         // private constructor not intended to use from external
         private Builder() {
@@ -100,7 +110,7 @@
 
         @Override
         public K8sExternalNetwork build() {
-            return new DefaultK8sExternalNetwork(extBridgeIp, extGatewayIp, extGatewayMac);
+            return new DefaultK8sExternalNetwork(extBridgeIp, extGatewayIp, extGatewayMac, extIntf);
         }
 
         @Override
@@ -120,5 +130,11 @@
             this.extGatewayMac = extGatewayMac;
             return this;
         }
+
+        @Override
+        public Builder extIntf(String extIntf) {
+            this.extIntf = extIntf;
+            return this;
+        }
     }
 }
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 9613bef..b73c118 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
@@ -80,8 +80,8 @@
     private final DeviceId tunBridge;
     private final IpAddress managementIp;
     private final IpAddress dataIp;
+    private final IpAddress nodeIp;
     private final K8sNodeState state;
-    private final String extIntf;
     private final K8sExternalNetwork extNetwork;
     private final String podCidr;
 
@@ -101,9 +101,9 @@
      * @param extBridge         external bridge
      * @param localBridge       local bridge
      * @param tunBridge         tunnel bridge
-     * @param extIntf           external interface
      * @param managementIp      management IP address
      * @param dataIp            data IP address
+     * @param nodeIp            node IP address
      * @param state             node state
      * @param extNetwork        external network
      * @param podCidr           POD CIDR
@@ -111,8 +111,8 @@
     protected DefaultK8sNode(String clusterName, String hostname, Type type,
                              int segmentId, Mode mode, DeviceId intgBridge,
                              DeviceId extBridge, DeviceId localBridge,
-                             DeviceId tunBridge, String extIntf, IpAddress managementIp,
-                             IpAddress dataIp, K8sNodeState state,
+                             DeviceId tunBridge, IpAddress managementIp,
+                             IpAddress dataIp, IpAddress nodeIp, K8sNodeState state,
                              K8sExternalNetwork extNetwork, String podCidr) {
         this.clusterName = clusterName;
         this.hostname = hostname;
@@ -123,9 +123,9 @@
         this.extBridge = extBridge;
         this.localBridge = localBridge;
         this.tunBridge = tunBridge;
-        this.extIntf = extIntf;
         this.managementIp = managementIp;
         this.dataIp = dataIp;
+        this.nodeIp = nodeIp;
         this.state = state;
         this.extNetwork = extNetwork;
         this.podCidr = podCidr;
@@ -220,7 +220,7 @@
 
     @Override
     public String extIntf() {
-        return extIntf;
+        return extNetwork.extIntf();
     }
 
     @Override
@@ -235,13 +235,14 @@
                 .extBridge(extBridge)
                 .localBridge(localBridge)
                 .tunBridge(tunBridge)
-                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
+                .nodeIp(nodeIp)
                 .state(state)
                 .extBridgeIp(extNetwork.extBridgeIp())
                 .extGatewayIp(extNetwork.extGatewayIp())
                 .extGatewayMac(extNetwork.extGatewayMac())
+                .extIntf(extNetwork.extIntf())
                 .podCidr(podCidr)
                 .build();
     }
@@ -258,13 +259,14 @@
                 .extBridge(deviceId)
                 .localBridge(localBridge)
                 .tunBridge(tunBridge)
-                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
+                .nodeIp(nodeIp)
                 .state(state)
                 .extBridgeIp(extNetwork.extBridgeIp())
                 .extGatewayIp(extNetwork.extGatewayIp())
                 .extGatewayMac(extNetwork.extGatewayMac())
+                .extIntf(extNetwork.extIntf())
                 .podCidr(podCidr)
                 .build();
     }
@@ -281,13 +283,14 @@
                 .extBridge(extBridge)
                 .localBridge(deviceId)
                 .tunBridge(tunBridge)
-                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
+                .nodeIp(nodeIp)
                 .state(state)
                 .extBridgeIp(extNetwork.extBridgeIp())
                 .extGatewayIp(extNetwork.extGatewayIp())
                 .extGatewayMac(extNetwork.extGatewayMac())
+                .extIntf(extNetwork.extIntf())
                 .podCidr(podCidr)
                 .build();
     }
@@ -304,13 +307,14 @@
                 .extBridge(extBridge)
                 .localBridge(localBridge)
                 .tunBridge(deviceId)
-                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
+                .nodeIp(nodeIp)
                 .state(state)
                 .extBridgeIp(extNetwork.extBridgeIp())
                 .extGatewayIp(extNetwork.extGatewayIp())
                 .extGatewayMac(extNetwork.extGatewayMac())
+                .extIntf(extNetwork.extIntf())
                 .podCidr(podCidr)
                 .build();
     }
@@ -326,6 +330,11 @@
     }
 
     @Override
+    public IpAddress nodeIp() {
+        return nodeIp;
+    }
+
+    @Override
     public K8sNodeState state() {
         return state;
     }
@@ -347,13 +356,14 @@
                 .extBridge(extBridge)
                 .localBridge(localBridge)
                 .tunBridge(tunBridge)
-                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
+                .nodeIp(nodeIp)
                 .state(newState)
                 .extBridgeIp(extNetwork.extBridgeIp())
                 .extGatewayIp(extNetwork.extGatewayIp())
                 .extGatewayMac(extNetwork.extGatewayMac())
+                .extIntf(extNetwork.extIntf())
                 .podCidr(podCidr)
                 .build();
     }
@@ -370,13 +380,14 @@
                 .extBridge(extBridge)
                 .localBridge(localBridge)
                 .tunBridge(tunBridge)
-                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
+                .nodeIp(nodeIp)
                 .state(state)
                 .extBridgeIp(extNetwork.extBridgeIp())
                 .extGatewayIp(extNetwork.extGatewayIp())
                 .extGatewayMac(newMac)
+                .extIntf(extNetwork.extIntf())
                 .podCidr(podCidr)
                 .build();
     }
@@ -516,7 +527,7 @@
 
     @Override
     public PortNumber extIntfPortNum() {
-        if (this.extIntf == null) {
+        if (this.extIntf() == null) {
             return null;
         }
         return portNumber(extBridge, extIntf());
@@ -807,9 +818,9 @@
                     extBridge.equals(that.extBridge) &&
                     localBridge.equals(that.localBridge) &&
                     tunBridge.equals(that.tunBridge) &&
-                    extIntf.equals(that.extIntf) &&
                     managementIp.equals(that.managementIp) &&
                     dataIp.equals(that.dataIp) &&
+                    nodeIp.equals(that.nodeIp) &&
                     extNetwork.equals(that.extNetwork) &&
                     podCidr.equals(that.podCidr) &&
                     state == that.state;
@@ -821,7 +832,7 @@
     @Override
     public int hashCode() {
         return Objects.hash(clusterName, hostname, type, segmentId, mode, intgBridge, extBridge,
-                localBridge, tunBridge, extIntf, managementIp, dataIp, state, extNetwork, podCidr);
+                localBridge, tunBridge, managementIp, dataIp, nodeIp, state, extNetwork, podCidr);
     }
 
     @Override
@@ -836,13 +847,14 @@
                 .add("extBridge", extBridge)
                 .add("localBridge", localBridge)
                 .add("tunBridge", tunBridge)
-                .add("extIntf", extIntf)
                 .add("managementIp", managementIp)
                 .add("dataIp", dataIp)
+                .add("nodeIp", nodeIp)
                 .add("state", state)
                 .add("extBridgeIp", extNetwork.extBridgeIp())
                 .add("extGatewayIp", extNetwork.extGatewayIp())
                 .add("extGatewayMac", extNetwork.extGatewayMac())
+                .add("extIntf", extNetwork.extIntf())
                 .add("podCidr", podCidr)
                 .toString();
     }
@@ -902,10 +914,12 @@
                 .extIntf(node.extIntf())
                 .managementIp(node.managementIp())
                 .dataIp(node.dataIp())
+                .nodeIp(node.nodeIp())
                 .state(node.state())
                 .extBridgeIp(node.extBridgeIp())
                 .extGatewayIp(node.extGatewayIp())
                 .extGatewayMac(node.extGatewayMac())
+                .extIntf(node.extIntf())
                 .podCidr(node.podCidr());
     }
 
@@ -922,6 +936,7 @@
         private DeviceId tunBridge;
         private IpAddress managementIp;
         private IpAddress dataIp;
+        private IpAddress nodeIp;
         private K8sNodeState state;
         private K8sApiConfig apiConfig;
         private String extIntf;
@@ -940,6 +955,7 @@
             checkArgument(type != null, NOT_NULL_MSG, "type");
             checkArgument(state != null, NOT_NULL_MSG, "state");
             checkArgument(managementIp != null, NOT_NULL_MSG, "management IP");
+            checkArgument(nodeIp != null, NOT_NULL_MSG, "node IP");
 
             if (StringUtils.isEmpty(clusterName)) {
                 clusterName = DEFAULT_CLUSTER_NAME;
@@ -953,6 +969,7 @@
                     .extBridgeIp(extBridgeIp)
                     .extGatewayIp(extGatewayIp)
                     .extGatewayMac(extGatewayMac)
+                    .extIntf(extIntf)
                     .build();
 
             return new DefaultK8sNode(clusterName,
@@ -964,9 +981,9 @@
                     extBridge,
                     localBridge,
                     tunBridge,
-                    extIntf,
                     managementIp,
                     dataIp,
+                    nodeIp,
                     state,
                     extNetwork,
                     podCidr);
@@ -1027,12 +1044,6 @@
         }
 
         @Override
-        public Builder extIntf(String intf) {
-            this.extIntf = intf;
-            return this;
-        }
-
-        @Override
         public Builder managementIp(IpAddress managementIp) {
             this.managementIp = managementIp;
             return this;
@@ -1045,6 +1056,12 @@
         }
 
         @Override
+        public Builder nodeIp(IpAddress nodeIp) {
+            this.nodeIp = nodeIp;
+            return this;
+        }
+
+        @Override
         public Builder state(K8sNodeState state) {
             this.state = state;
             return this;
@@ -1069,6 +1086,12 @@
         }
 
         @Override
+        public Builder extIntf(String intf) {
+            this.extIntf = intf;
+            return this;
+        }
+
+        @Override
         public Builder podCidr(String podCidr) {
             this.podCidr = podCidr;
             return this;
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sExternalNetwork.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sExternalNetwork.java
index 3462ad0..6649837 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sExternalNetwork.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sExternalNetwork.java
@@ -45,6 +45,13 @@
     MacAddress extGatewayMac();
 
     /**
+     * Returns the external interface name.
+     *
+     * @return interface name
+     */
+    String extIntf();
+
+    /**
      * Builder of new network entity.
      */
     interface Builder {
@@ -57,27 +64,35 @@
         K8sExternalNetwork build();
 
         /**
-         * Returns kubernetes node builder with supplied external bridge IP.
+         * Returns kubernetes external network builder with supplied external bridge IP.
          *
          * @param extBridgeIp external bridge IP
-         * @return kubernetes node builder
+         * @return kubernetes external network builder
          */
         Builder extBridgeIp(IpAddress extBridgeIp);
 
         /**
-         * Returns kubernetes node builder with supplied gateway IP.
+         * Returns kubernetes external network builder with supplied gateway IP.
          *
          * @param extGatewayIp external gateway IP
-         * @return kubernetes node builder
+         * @return kubernetes external network builder
          */
         Builder extGatewayIp(IpAddress extGatewayIp);
 
         /**
-         * Returns kubernetes node builder with supplied external gateway MAC.
+         * Returns kubernetes external network builder with supplied external gateway MAC.
          *
          * @param extGatewayMac external gateway MAC address
-         * @return kubernetes node builder
+         * @return kubernetes external network builder
          */
         Builder extGatewayMac(MacAddress extGatewayMac);
+
+        /**
+         * Returns kubernetes external network builder with supplied external interface.
+         *
+         * @param extIntf external interface name
+         * @return kubernetes external network builder
+         */
+        Builder extIntf(String extIntf);
     }
 }
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
index 6631e55..eabb13a 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
@@ -187,6 +187,13 @@
     IpAddress dataIp();
 
     /**
+     * Returns the kubernetes node IP address.
+     *
+     * @return ip address; null if node has no IP address
+     */
+    IpAddress nodeIp();
+
+    /**
      * Returns the initialization state of the node.
      *
      * @return node state
@@ -647,6 +654,14 @@
         Builder dataIp(IpAddress dataIp);
 
         /**
+         * Returns the kubernetes node builder with supplied node IP address.
+         *
+         * @param nodeIp node IP address
+         * @return kubernetes node builder
+         */
+        Builder nodeIp(IpAddress nodeIp);
+
+        /**
          * Returns kubernetes node builder with supplied node state.
          *
          * @param state kubernetes node state
diff --git a/apps/k8s-node/api/src/test/java/org/onosproject/k8snode/api/DefaultK8sNodeTest.java b/apps/k8s-node/api/src/test/java/org/onosproject/k8snode/api/DefaultK8sNodeTest.java
index 26553a8..dec1d48 100644
--- a/apps/k8s-node/api/src/test/java/org/onosproject/k8snode/api/DefaultK8sNodeTest.java
+++ b/apps/k8s-node/api/src/test/java/org/onosproject/k8snode/api/DefaultK8sNodeTest.java
@@ -51,6 +51,7 @@
 
     private static final IpAddress MANAGEMENT_IP = IpAddress.valueOf("10.10.10.10");
     private static final IpAddress DATA_IP = IpAddress.valueOf("20.20.20.20");
+    private static final IpAddress NODE_IP = IpAddress.valueOf("30.30.30.30");
 
     private static final String BRIDGE_INTF_1 = "eth1";
     private static final String BRIDGE_INTF_2 = "eth2";
@@ -124,6 +125,7 @@
                 .segmentId(SEGMENT_ID_1)
                 .managementIp(MANAGEMENT_IP)
                 .dataIp(DATA_IP)
+                .nodeIp(NODE_IP)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
                 .localBridge(DEVICE_1.id())
@@ -196,6 +198,7 @@
                 .extIntf(BRIDGE_INTF_1)
                 .managementIp(TEST_IP)
                 .dataIp(TEST_IP)
+                .nodeIp(NODE_IP)
                 .state(INIT)
                 .extBridgeIp(EXT_BRIDGE_IP_1)
                 .extGatewayIp(EXT_GATEWAY_IP_1)
@@ -219,6 +222,7 @@
                 .extIntf(BRIDGE_INTF_1)
                 .managementIp(TEST_IP)
                 .dataIp(TEST_IP)
+                .nodeIp(NODE_IP)
                 .state(INIT)
                 .extBridgeIp(EXT_BRIDGE_IP_1)
                 .extGatewayIp(EXT_GATEWAY_IP_1)
@@ -243,6 +247,7 @@
                 .tunBridge(DEVICE_1.id())
                 .extIntf(BRIDGE_INTF_1)
                 .dataIp(TEST_IP)
+                .nodeIp(NODE_IP)
                 .state(INIT)
                 .extBridgeIp(EXT_BRIDGE_IP_1)
                 .extGatewayIp(EXT_GATEWAY_IP_1)
@@ -256,6 +261,7 @@
         assertEquals(node.type(), MINION);
         assertEquals(node.managementIp(), MANAGEMENT_IP);
         assertEquals(node.dataIp(), DATA_IP);
+        assertEquals(node.nodeIp(), NODE_IP);
     }
 
     private static Device createDevice(long devIdNum) {
@@ -287,6 +293,7 @@
                 .extIntf(bridgeIntf)
                 .managementIp(ipAddr)
                 .dataIp(ipAddr)
+                .nodeIp(ipAddr)
                 .state(state)
                 .extBridgeIp(extBridgeIp)
                 .extGatewayIp(extGatewayIp)
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 2a938e0..4f4e6bf 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
@@ -48,6 +48,7 @@
     private static final String SEGMENT_ID = "segmentId";
     private static final String MANAGEMENT_IP = "managementIp";
     private static final String DATA_IP = "dataIp";
+    private static final String NODE_IP = "nodeIp";
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String EXTERNAL_BRIDGE = "externalBridge";
     private static final String LOCAL_BRIDGE = "localBridge";
@@ -71,7 +72,8 @@
                 .put(MODE, node.mode().name())
                 .put(SEGMENT_ID, node.segmentId())
                 .put(STATE, node.state().name())
-                .put(MANAGEMENT_IP, node.managementIp().toString());
+                .put(MANAGEMENT_IP, node.managementIp().toString())
+                .put(NODE_IP, node.nodeIp().toString());
 
         if (node.intgBridge() != null) {
             result.put(INTEGRATION_BRIDGE, node.intgBridge().toString());
@@ -130,13 +132,16 @@
                 TYPE + MISSING_MESSAGE);
         String mIp = nullIsIllegal(json.get(MANAGEMENT_IP).asText(),
                 MANAGEMENT_IP + MISSING_MESSAGE);
+        String nIp = nullIsIllegal(json.get(NODE_IP).asText(),
+                NODE_IP + MISSING_MESSAGE);
 
         DefaultK8sNode.Builder nodeBuilder = DefaultK8sNode.builder()
                 .clusterName(clusterName)
                 .hostname(hostname)
                 .type(K8sNode.Type.valueOf(type))
                 .state(K8sNodeState.INIT)
-                .managementIp(IpAddress.valueOf(mIp));
+                .managementIp(IpAddress.valueOf(mIp))
+                .nodeIp(IpAddress.valueOf(nIp));
 
         if (json.get(DATA_IP) != null) {
             nodeBuilder.dataIp(IpAddress.valueOf(json.get(DATA_IP).asText()));
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 bf81f85a..30606f0 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
@@ -203,6 +203,7 @@
         String hostname = node.getMetadata().getName();
         IpAddress managementIp = null;
         IpAddress dataIp = null;
+        IpAddress nodeIp = null;
 
         // pass-through mode: we use host IP as the management and data IP
         // normal mode: we use K8S node's internal IP as the management and data IP
@@ -215,11 +216,17 @@
                 managementIp = info.hostIp();
                 dataIp = info.hostIp();
             }
+            for (NodeAddress nodeAddress:node.getStatus().getAddresses()) {
+                if (nodeAddress.getType().equals(INTERNAL_IP)) {
+                    nodeIp = IpAddress.valueOf(nodeAddress.getAddress());
+                }
+            }
         } else {
             for (NodeAddress nodeAddress:node.getStatus().getAddresses()) {
                 if (nodeAddress.getType().equals(INTERNAL_IP)) {
                     managementIp = IpAddress.valueOf(nodeAddress.getAddress());
                     dataIp = IpAddress.valueOf(nodeAddress.getAddress());
+                    nodeIp = IpAddress.valueOf(nodeAddress.getAddress());
                 }
             }
         }
@@ -267,6 +274,7 @@
                 .hostname(hostname)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
+                .nodeIp(nodeIp)
                 .extIntf(extIntf)
                 .type(nodeType)
                 .segmentId(config.segmentId())
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
index 6b2689d..ae31130 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
@@ -86,6 +86,7 @@
                 .state(K8sNodeState.INIT)
                 .managementIp(IpAddress.valueOf("10.10.10.1"))
                 .dataIp(IpAddress.valueOf("20.20.20.2"))
+                .nodeIp(IpAddress.valueOf("30.30.30.3"))
                 .intgBridge(DeviceId.deviceId("kbr-int"))
                 .extIntf("eth1")
                 .extBridgeIp(IpAddress.valueOf("10.10.10.5"))
@@ -112,6 +113,7 @@
         assertEquals(100, node.segmentId());
         assertEquals("172.16.130.4", node.managementIp().toString());
         assertEquals("172.16.130.4", node.dataIp().toString());
+        assertEquals("172.16.130.5", node.nodeIp().toString());
         assertEquals("of:00000000000000a1", node.intgBridge().toString());
         assertEquals("eth1", node.extIntf());
         assertEquals("172.16.130.5", node.extBridgeIp().toString());
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
index 71c5ca9..d0d97a8 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
@@ -35,6 +35,7 @@
     private static final String SEGMENT_ID = "segmentId";
     private static final String MANAGEMENT_IP = "managementIp";
     private static final String DATA_IP = "dataIp";
+    private static final String NODE_IP = "nodeIp";
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String STATE = "state";
     private static final String EXTERNAL_INTF = "externalInterface";
@@ -91,6 +92,14 @@
             return false;
         }
 
+        // check node IP
+        String jsonNodeIp = jsonNode.get(NODE_IP).asText();
+        String nodeIp = node.nodeIp().toString();
+        if (!jsonNodeIp.equals(nodeIp)) {
+            description.appendText("node IP was " + jsonNodeIp);
+            return false;
+        }
+
         // check integration bridge
         JsonNode jsonIntgBridge = jsonNode.get(INTEGRATION_BRIDGE);
         if (jsonIntgBridge != null) {
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 0bb0258..e336164 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
@@ -360,6 +360,7 @@
                 .tunBridge(tunBridge.id())
                 .managementIp(ipAddr)
                 .dataIp(ipAddr)
+                .nodeIp(ipAddr)
                 .state(state)
                 .build();
     }
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
index 1005ab2..9908e99 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
@@ -97,6 +97,7 @@
                 .type(K8sNode.Type.MINION)
                 .dataIp(IpAddress.valueOf("10.134.34.222"))
                 .managementIp(IpAddress.valueOf("10.134.231.30"))
+                .nodeIp(IpAddress.valueOf("30.30.30.3"))
                 .intgBridge(DeviceId.deviceId("of:00000000000000a1"))
                 .extBridge(DeviceId.deviceId("of:00000000000000b1"))
                 .state(K8sNodeState.INIT)
diff --git a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
index fb01b77..ca78a90 100644
--- a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
+++ b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
@@ -5,6 +5,7 @@
   "segmentId": 100,
   "managementIp": "172.16.130.4",
   "dataIp": "172.16.130.4",
+  "nodeIp": "172.16.130.5",
   "integrationBridge": "of:00000000000000a1",
   "externalBridge": "of:00000000000000b1",
   "externalInterface": "eth1",
diff --git a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/web/k8s-node-minion-config.json b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/web/k8s-node-minion-config.json
index 1e7d4a4..08aa1b1 100644
--- a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/web/k8s-node-minion-config.json
+++ b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/web/k8s-node-minion-config.json
@@ -6,6 +6,7 @@
       "type" : "MINION",
       "managementIp" : "10.134.231.32",
       "dataIp" : "10.134.34.224",
+      "nodeIp" : "30.30.30.3",
       "integrationBridge" : "of:00000000000000a2",
       "externalBridge" : "of:00000000000000b2"
     }
