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 ff0f9de..7910500 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
@@ -24,11 +24,6 @@
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.device.DeviceService;
-import org.onosproject.ovsdb.controller.OvsdbClientService;
-import org.onosproject.ovsdb.controller.OvsdbController;
-import org.onosproject.ovsdb.controller.OvsdbNodeId;
-import org.onosproject.ovsdb.rfc.notation.OvsdbMap;
-import org.onosproject.ovsdb.rfc.table.Interface;
 
 import java.util.Objects;
 
@@ -47,10 +42,6 @@
  */
 public class DefaultK8sNode implements K8sNode {
 
-    private static final int DEFAULT_OVSDB_PORT = 6640;
-    private static final String IP_ADDRESS = "ip_address";
-    private static final String EXT_INTF = "ext_interface";
-    private static final String EXT_GW_IP = "ext_gw_ip_address";
     private static final String PORT_MAC = "portMac";
 
     private final String hostname;
@@ -60,7 +51,11 @@
     private final IpAddress managementIp;
     private final IpAddress dataIp;
     private final K8sNodeState state;
+    private final String extIntf;
+    private final IpAddress extBridgeIp;
+    private final IpAddress extGatewayIp;
     private final MacAddress extGatewayMac;
+    private final String podCidr;
 
     private static final String NOT_NULL_MSG = "Node % cannot be null";
 
@@ -73,23 +68,33 @@
      * @param type              node type
      * @param intgBridge        integration bridge
      * @param extBridge         external bridge
+     * @param extIntf           external interface
      * @param managementIp      management IP address
      * @param dataIp            data IP address
      * @param state             node state
+     * @param extBridgeIp       external bridge IP address
+     * @param extGatewayIp      external gateway IP address
      * @param extGatewayMac     external gateway MAC address
+     * @param podCidr           POD CIDR
      */
     protected DefaultK8sNode(String hostname, Type type, DeviceId intgBridge,
-                             DeviceId extBridge, IpAddress managementIp,
-                             IpAddress dataIp, K8sNodeState state,
-                             MacAddress extGatewayMac) {
+                             DeviceId extBridge, String extIntf,
+                             IpAddress managementIp, IpAddress dataIp,
+                             K8sNodeState state, IpAddress extBridgeIp,
+                             IpAddress extGatewayIp, MacAddress extGatewayMac,
+                             String podCidr) {
         this.hostname = hostname;
         this.type = type;
         this.intgBridge = intgBridge;
         this.extBridge = extBridge;
+        this.extIntf = extIntf;
         this.managementIp = managementIp;
         this.dataIp = dataIp;
         this.state = state;
+        this.extBridgeIp = extBridgeIp;
+        this.extGatewayIp = extGatewayIp;
         this.extGatewayMac = extGatewayMac;
+        this.podCidr = podCidr;
     }
 
     @Override
@@ -118,16 +123,25 @@
     }
 
     @Override
+    public String extIntf() {
+        return extIntf;
+    }
+
+    @Override
     public K8sNode updateIntgBridge(DeviceId deviceId) {
         return new Builder()
                 .hostname(hostname)
                 .type(type)
                 .intgBridge(deviceId)
                 .extBridge(extBridge)
+                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
                 .state(state)
+                .extBridgeIp(extBridgeIp)
+                .extGatewayIp(extGatewayIp)
                 .extGatewayMac(extGatewayMac)
+                .podCidr(podCidr)
                 .build();
     }
 
@@ -138,10 +152,14 @@
                 .type(type)
                 .intgBridge(intgBridge)
                 .extBridge(deviceId)
+                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
                 .state(state)
+                .extBridgeIp(extBridgeIp)
+                .extGatewayIp(extGatewayIp)
                 .extGatewayMac(extGatewayMac)
+                .podCidr(podCidr)
                 .build();
     }
 
@@ -161,15 +179,25 @@
     }
 
     @Override
+    public String podCidr() {
+        return podCidr;
+    }
+
+    @Override
     public K8sNode updateState(K8sNodeState newState) {
         return new Builder()
                 .hostname(hostname)
                 .type(type)
                 .intgBridge(intgBridge)
+                .extBridge(extBridge)
+                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
                 .state(newState)
+                .extBridgeIp(extBridgeIp)
+                .extGatewayIp(extGatewayIp)
                 .extGatewayMac(extGatewayMac)
+                .podCidr(podCidr)
                 .build();
     }
 
@@ -179,12 +207,16 @@
                 .hostname(hostname)
                 .type(type)
                 .intgBridge(intgBridge)
+                .extBridge(extBridge)
+                .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
                 .state(state)
+                .extBridgeIp(extBridgeIp)
+                .extGatewayIp(extGatewayIp)
                 .extGatewayMac(newMac)
+                .podCidr(podCidr)
                 .build();
-
     }
 
     @Override
@@ -219,20 +251,11 @@
 
     @Override
     public PortNumber extBridgePortNum() {
-        OvsdbClientService client = getOvsClient();
-
-        if (client == null) {
+        if (this.extIntf == null) {
             return null;
         }
 
-        Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
-        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
-        String extIface = (String) data.map().get(EXT_INTF);
-        if (extIface == null) {
-            return null;
-        }
-
-        return portNumber(extBridge, extIface);
+        return portNumber(extBridge, this.extIntf);
     }
 
     @Override
@@ -242,15 +265,7 @@
 
     @Override
     public IpAddress extBridgeIp() {
-        OvsdbClientService client = getOvsClient();
-
-        if (client == null) {
-            return null;
-        }
-
-        Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
-        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
-        return IpAddress.valueOf((String) data.map().get(IP_ADDRESS));
+        return extBridgeIp;
     }
 
     @Override
@@ -260,15 +275,7 @@
 
     @Override
     public IpAddress extGatewayIp() {
-        OvsdbClientService client = getOvsClient();
-
-        if (client == null) {
-            return null;
-        }
-
-        Interface iface = getOvsClient().getInterface(EXTERNAL_BRIDGE);
-        OvsdbMap data = (OvsdbMap) iface.getExternalIdsColumn().data();
-        return IpAddress.valueOf((String) data.map().get(EXT_GW_IP));
+        return extGatewayIp;
     }
 
     @Override
@@ -289,8 +296,12 @@
                     type == that.type &&
                     intgBridge.equals(that.intgBridge) &&
                     extBridge.equals(that.extBridge) &&
+                    extIntf.equals(that.extIntf) &&
                     managementIp.equals(that.managementIp) &&
                     dataIp.equals(that.dataIp) &&
+                    extBridgeIp.equals(that.extBridgeIp) &&
+                    extGatewayIp.equals(that.extGatewayIp) &&
+                    podCidr.equals(that.podCidr) &&
                     state == that.state;
         }
 
@@ -299,8 +310,9 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(hostname, type, intgBridge, extBridge,
-                            managementIp, dataIp, state, extGatewayMac);
+        return Objects.hash(hostname, type, intgBridge, extBridge, extIntf,
+                            managementIp, dataIp, state, extBridgeIp,
+                            extGatewayIp, extGatewayMac, podCidr);
     }
 
     @Override
@@ -310,10 +322,14 @@
                 .add("type", type)
                 .add("intgBridge", intgBridge)
                 .add("extBridge", extBridge)
+                .add("extIntf", extIntf)
                 .add("managementIp", managementIp)
                 .add("dataIp", dataIp)
                 .add("state", state)
+                .add("extBridgeIp", extBridgeIp)
+                .add("extGatewayIp", extGatewayIp)
                 .add("extGatewayMac", extGatewayMac)
+                .add("podCidr", podCidr)
                 .toString();
     }
 
@@ -344,18 +360,6 @@
                 .findAny().orElse(null);
     }
 
-    private OvsdbClientService getOvsClient() {
-        OvsdbController ovsdbController =
-                DefaultServiceDirectory.getService(OvsdbController.class);
-        OvsdbNodeId ovsdb = new OvsdbNodeId(this.managementIp, DEFAULT_OVSDB_PORT);
-        OvsdbClientService client = ovsdbController.getOvsdbClient(ovsdb);
-        if (client == null) {
-            return null;
-        }
-
-        return client;
-    }
-
     /**
      * Returns new builder instance.
      *
@@ -377,10 +381,14 @@
                 .type(node.type())
                 .intgBridge(node.intgBridge())
                 .extBridge(node.extBridge())
+                .extIntf(node.extIntf())
                 .managementIp(node.managementIp())
                 .dataIp(node.dataIp())
                 .state(node.state())
-                .extGatewayMac(node.extGatewayMac());
+                .extBridgeIp(node.extBridgeIp())
+                .extGatewayIp(node.extGatewayIp())
+                .extGatewayMac(node.extGatewayMac())
+                .podCidr(node.podCidr());
     }
 
     public static final class Builder implements K8sNode.Builder {
@@ -393,7 +401,11 @@
         private IpAddress dataIp;
         private K8sNodeState state;
         private K8sApiConfig apiConfig;
+        private String extIntf;
+        private IpAddress extBridgeIp;
+        private IpAddress extGatewayIp;
         private MacAddress extGatewayMac;
+        private String podCidr;
 
         // private constructor not intended to use from external
         private Builder() {
@@ -410,10 +422,14 @@
                     type,
                     intgBridge,
                     extBridge,
+                    extIntf,
                     managementIp,
                     dataIp,
                     state,
-                    extGatewayMac);
+                    extBridgeIp,
+                    extGatewayIp,
+                    extGatewayMac,
+                    podCidr);
         }
 
         @Override
@@ -441,6 +457,12 @@
         }
 
         @Override
+        public Builder extIntf(String intf) {
+            this.extIntf = intf;
+            return this;
+        }
+
+        @Override
         public Builder managementIp(IpAddress managementIp) {
             this.managementIp = managementIp;
             return this;
@@ -459,9 +481,27 @@
         }
 
         @Override
+        public Builder extBridgeIp(IpAddress extBridgeIp) {
+            this.extBridgeIp = extBridgeIp;
+            return this;
+        }
+
+        @Override
+        public Builder extGatewayIp(IpAddress extGatewayIp) {
+            this.extGatewayIp = extGatewayIp;
+            return this;
+        }
+
+        @Override
         public Builder extGatewayMac(MacAddress extGatewayMac) {
             this.extGatewayMac = extGatewayMac;
             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/K8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
index 8d6f57c..18e943a 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
@@ -76,6 +76,13 @@
     DeviceId extBridge();
 
     /**
+     * Returns the external interface name.
+     *
+     * @return external interface name
+     */
+    String extIntf();
+
+    /**
      * Returns new kubernetes node instance with given integration bridge.
      *
      * @param deviceId  integration bridge device ID
@@ -113,6 +120,13 @@
     K8sNodeState state();
 
     /**
+     * Returns the POD CIDR of the node.
+     *
+     * @return POD CIDR (e.g., 10.10.0.0/24)
+     */
+    String podCidr();
+
+    /**
      * Returns new kubernetes node instance with given state.
      *
      * @param newState updated state
@@ -257,6 +271,14 @@
         Builder extBridge(DeviceId deviceId);
 
         /**
+         * Returns kubernetes node builder with supplied external interface.
+         *
+         * @param intf external interface
+         * @return kubernetes node builder
+         */
+        Builder extIntf(String intf);
+
+        /**
          * Returns kubernetes node builder with supplied management IP address.
          *
          * @param managementIp management IP address
@@ -281,11 +303,35 @@
         Builder state(K8sNodeState state);
 
         /**
+         * Returns kubernetes node builder with supplied external bridge IP.
+         *
+         * @param extBridgeIp external bridge IP
+         * @return kubernetes node builder
+         */
+        Builder extBridgeIp(IpAddress extBridgeIp);
+
+        /**
+         * Returns kubernetes node builder with supplied gateway IP.
+         *
+         * @param extGatewayIp external gateway IP
+         * @return kubernetes node builder
+         */
+        Builder extGatewayIp(IpAddress extGatewayIp);
+
+        /**
          * Returns kubernetes node builder with supplied external gateway MAC.
          *
          * @param extGatewayMac external gateway MAC address
          * @return kubernetes node builder
          */
         Builder extGatewayMac(MacAddress extGatewayMac);
+
+        /**
+         * Returns kubernetes node builder with supplied POD CIDR.
+         *
+         * @param podCidr POD CIDR
+         * @return kubernetes node builder
+         */
+        Builder podCidr(String podCidr);
     }
 }
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 d93c8dc..166b528 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
@@ -49,6 +49,18 @@
     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 String BRIDGE_INTF_1 = "eth1";
+    private static final String BRIDGE_INTF_2 = "eth2";
+
+    private static final IpAddress EXT_BRIDGE_IP_1 = IpAddress.valueOf("10.10.10.5");
+    private static final IpAddress EXT_BRIDGE_IP_2 = IpAddress.valueOf("20.20.20.5");
+
+    private static final IpAddress EXT_GATEWAY_IP_1 = IpAddress.valueOf("10.10.10.1");
+    private static final IpAddress EXT_GATEWAY_IP_2 = IpAddress.valueOf("20.20.20.1");
+
+    private static final String POD_CIDR_1 = "10.10.0.0/24";
+    private static final String POD_CIDR_2 = "20.20.0.0/24";
+
     private K8sNode refNode;
 
     private static final K8sNode K8S_NODE_1 = createNode(
@@ -56,22 +68,34 @@
             MINION,
             DEVICE_1,
             DEVICE_1,
+            BRIDGE_INTF_1,
             TEST_IP,
-            INIT);
+            INIT,
+            EXT_BRIDGE_IP_1,
+            EXT_GATEWAY_IP_1,
+            POD_CIDR_1);
     private static final K8sNode K8S_NODE_2 = createNode(
             HOSTNAME_1,
             MINION,
             DEVICE_1,
             DEVICE_1,
+            BRIDGE_INTF_1,
             TEST_IP,
-            INIT);
+            INIT,
+            EXT_BRIDGE_IP_1,
+            EXT_GATEWAY_IP_1,
+            POD_CIDR_1);
     private static final K8sNode K8S_NODE_3 = createNode(
             HOSTNAME_2,
             MINION,
             DEVICE_2,
             DEVICE_2,
+            BRIDGE_INTF_2,
             TEST_IP,
-            INIT);
+            INIT,
+            EXT_BRIDGE_IP_2,
+            EXT_GATEWAY_IP_2,
+            POD_CIDR_2);
 
     /**
      * Initial setup for this unit test.
@@ -85,7 +109,11 @@
                 .dataIp(DATA_IP)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
+                .extIntf(BRIDGE_INTF_1)
                 .state(COMPLETE)
+                .extBridgeIp(EXT_BRIDGE_IP_1)
+                .extGatewayIp(EXT_GATEWAY_IP_1)
+                .podCidr(POD_CIDR_1)
                 .build();
     }
 
@@ -140,9 +168,13 @@
                 .type(MINION)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
+                .extIntf(BRIDGE_INTF_1)
                 .managementIp(TEST_IP)
                 .dataIp(TEST_IP)
                 .state(INIT)
+                .extBridgeIp(EXT_BRIDGE_IP_1)
+                .extGatewayIp(EXT_GATEWAY_IP_1)
+                .podCidr(POD_CIDR_1)
                 .build();
     }
 
@@ -155,9 +187,13 @@
                 .hostname(HOSTNAME_1)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
+                .extIntf(BRIDGE_INTF_1)
                 .managementIp(TEST_IP)
                 .dataIp(TEST_IP)
                 .state(INIT)
+                .extBridgeIp(EXT_BRIDGE_IP_1)
+                .extGatewayIp(EXT_GATEWAY_IP_1)
+                .podCidr(POD_CIDR_1)
                 .build();
     }
 
@@ -172,8 +208,12 @@
                 .type(MINION)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
+                .extIntf(BRIDGE_INTF_1)
                 .dataIp(TEST_IP)
                 .state(INIT)
+                .extBridgeIp(EXT_BRIDGE_IP_1)
+                .extGatewayIp(EXT_GATEWAY_IP_1)
+                .podCidr(POD_CIDR_1)
                 .build();
     }
 
@@ -197,15 +237,21 @@
 
     private static K8sNode createNode(String hostname, Type type,
                                       Device intgBridge, Device extBridge,
-                                      IpAddress ipAddr, K8sNodeState state) {
+                                      String bridgeIntf, IpAddress ipAddr,
+                                      K8sNodeState state, IpAddress extBridgeIp,
+                                      IpAddress extGatewayIp, String podCidr) {
         return DefaultK8sNode.builder()
                 .hostname(hostname)
                 .type(type)
                 .intgBridge(intgBridge.id())
                 .extBridge(extBridge.id())
+                .extIntf(bridgeIntf)
                 .managementIp(ipAddr)
                 .dataIp(ipAddr)
                 .state(state)
+                .extBridgeIp(extBridgeIp)
+                .extGatewayIp(extGatewayIp)
+                .podCidr(podCidr)
                 .build();
     }
 }
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 6676847..7c7b32b 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,9 @@
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String EXTERNAL_BRIDGE = "externalBridge";
     private static final String STATE = "state";
+    private static final String EXTERNAL_INTF = "externalInterface";
+    private static final String EXTERNAL_BRIDGE_IP = "externalBridgeIp";
+    private static final String EXTERNAL_GATEWAY_IP = "externalGatewayIp";
 
     private static final String MISSING_MESSAGE = " is required in K8sNode";
 
@@ -69,6 +72,18 @@
             result.put(DATA_IP, node.dataIp().toString());
         }
 
+        if (node.extIntf() != null) {
+            result.put(EXTERNAL_INTF, node.extIntf());
+        }
+
+        if (node.extBridgeIp() != null) {
+            result.put(EXTERNAL_BRIDGE_IP, node.extBridgeIp().toString());
+        }
+
+        if (node.extGatewayIp() != null) {
+            result.put(EXTERNAL_GATEWAY_IP, node.extGatewayIp().toString());
+        }
+
         return result;
     }
 
@@ -105,6 +120,21 @@
             nodeBuilder.extBridge(DeviceId.deviceId(extBridgeJson.asText()));
         }
 
+        JsonNode extIntfJson = json.get(EXTERNAL_INTF);
+        if (extIntfJson != null) {
+            nodeBuilder.extIntf(extIntfJson.asText());
+        }
+
+        JsonNode extBridgeIpJson = json.get(EXTERNAL_BRIDGE_IP);
+        if (extBridgeIpJson != null) {
+            nodeBuilder.extBridgeIp(IpAddress.valueOf(extBridgeIpJson.asText()));
+        }
+
+        JsonNode extGatewayIpJson = json.get(EXTERNAL_GATEWAY_IP);
+        if (extGatewayIpJson != null) {
+            nodeBuilder.extGatewayIp(IpAddress.valueOf(extGatewayIpJson.asText()));
+        }
+
         log.trace("node is {}", nodeBuilder.build().toString());
 
         return nodeBuilder.build();
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 ab04556..5119500 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
@@ -38,6 +38,7 @@
 import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.slf4j.Logger;
 
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ExecutorService;
 
@@ -60,6 +61,9 @@
 
     private static final String INTERNAL_IP = "InternalIP";
     private static final String K8S_ROLE = "node-role.kubernetes.io";
+    private static final String EXT_BRIDGE_IP = "external.bridge.ip";
+    private static final String EXT_GATEWAY_IP = "external.gateway.ip";
+    private static final String EXT_INTF_NAME = "external.interface.name";
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected CoreService coreService;
@@ -156,12 +160,22 @@
             }
         }
 
+        Map<String, String> annots = node.getMetadata().getAnnotations();
+
+        String extIntf = annots.get(EXT_INTF_NAME);
+        String extGatewayIpStr = annots.get(EXT_GATEWAY_IP);
+        String extBridgeIpStr = annots.get(EXT_BRIDGE_IP);
+
         return DefaultK8sNode.builder()
                 .hostname(hostname)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
-                .type(nodeType)  // need to get correct node type
+                .extIntf(extIntf)
+                .type(nodeType)
                 .state(INIT)
+                .extBridgeIp(IpAddress.valueOf(extBridgeIpStr))
+                .extGatewayIp(IpAddress.valueOf(extGatewayIpStr))
+                .podCidr(node.getSpec().getPodCIDR())
                 .build();
     }
 
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 7f156e8..556e462 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
@@ -84,6 +84,9 @@
                 .managementIp(IpAddress.valueOf("10.10.10.1"))
                 .dataIp(IpAddress.valueOf("20.20.20.2"))
                 .intgBridge(DeviceId.deviceId("kbr-int"))
+                .extIntf("eth1")
+                .extBridgeIp(IpAddress.valueOf("10.10.10.5"))
+                .extGatewayIp(IpAddress.valueOf("10.10.10.1"))
                 .build();
 
         ObjectNode nodeJson = k8sNodeCodec.encode(node, context);
@@ -104,6 +107,9 @@
         assertEquals("172.16.130.4", node.managementIp().toString());
         assertEquals("172.16.130.4", node.dataIp().toString());
         assertEquals("of:00000000000000a1", node.intgBridge().toString());
+        assertEquals("eth1", node.extIntf());
+        assertEquals("172.16.130.5", node.extBridgeIp().toString());
+        assertEquals("172.16.130.1", node.extGatewayIp().toString());
     }
 
     private K8sNode getK8sNode(String resourceName) throws IOException {
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 58b15d2..b953f54 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
@@ -18,6 +18,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.onlab.packet.IpAddress;
 import org.onosproject.k8snode.api.K8sNode;
 
 /**
@@ -33,6 +34,9 @@
     private static final String DATA_IP = "dataIp";
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String STATE = "state";
+    private static final String EXTERNAL_INTF = "externalInterface";
+    private static final String EXTERNAL_BRIDGE_IP = "externalBridgeIp";
+    private static final String EXTERNAL_GATEWAY_IP = "externalGatewayIp";
 
     private K8sNodeJsonMatcher(K8sNode node) {
         this.node = node;
@@ -93,6 +97,36 @@
             }
         }
 
+        // check external interface
+        JsonNode jsonExtIntf = jsonNode.get(EXTERNAL_INTF);
+        if (jsonExtIntf != null) {
+            String extIntf = node.extIntf();
+            if (!jsonExtIntf.asText().equals(extIntf)) {
+                description.appendText("External interface was " + jsonExtIntf.asText());
+                return false;
+            }
+        }
+
+        // check external bridge IP
+        JsonNode jsonExtBridgeIp = jsonNode.get(EXTERNAL_BRIDGE_IP);
+        if (jsonExtBridgeIp != null) {
+            IpAddress extBridgeIp = node.extBridgeIp();
+            if (!jsonExtBridgeIp.asText().equals(extBridgeIp.toString())) {
+                description.appendText("External bridge IP was " + jsonExtBridgeIp.asText());
+                return false;
+            }
+        }
+
+        // check external gateway IP
+        JsonNode jsonExtGatewayIp = jsonNode.get(EXTERNAL_GATEWAY_IP);
+        if (jsonExtGatewayIp != null) {
+            IpAddress extGatewayIp = node.extGatewayIp();
+            if (!jsonExtGatewayIp.asText().equals(extGatewayIp.toString())) {
+                description.appendText("External gateway IP was " + jsonExtGatewayIp.asText());
+                return false;
+            }
+        }
+
         return true;
     }
 
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 9ed649e..2930bfd 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
@@ -4,5 +4,8 @@
   "managementIp": "172.16.130.4",
   "dataIp": "172.16.130.4",
   "integrationBridge": "of:00000000000000a1",
-  "externalBridge": "of:00000000000000b1"
+  "externalBridge": "of:00000000000000b1",
+  "externalInterface": "eth1",
+  "externalBridgeIp": "172.16.130.5",
+  "externalGatewayIp": "172.16.130.1"
 }
\ No newline at end of file
