diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeHandler.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeHandler.java
index 71c3914..0ef7302 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeHandler.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeHandler.java
@@ -66,4 +66,13 @@
      * @param k8sNode kubernetes node
      */
     void processOnBoardedState(K8sNode k8sNode);
+
+    /**
+     * Processes the give node for post-on-board state.
+     * As long as external interface is configured,
+     * it will mark the node state as post-on-board.
+     *
+     * @param k8sNode kubernetes node
+     */
+    void processPostOnBoardState(K8sNode k8sNode);
 }
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeState.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeState.java
index 2cdbe94..3311ac6 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeState.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeState.java
@@ -49,6 +49,20 @@
         }
     },
     /**
+     * Indicates the node is post-on-board.
+     */
+    POST_ON_BOARD {
+        @Override
+        public void process(K8sNodeHandler handler, K8sNode node) {
+            handler.processPostOnBoardState(node);
+        }
+
+        @Override
+        public K8sNodeState nextState() {
+            return POST_ON_BOARD;
+        }
+    },
+    /**
      * Indicates the node is newly added.
      */
     INIT {
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 1c68f3d..a64b772 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
@@ -255,6 +255,11 @@
         // do something if needed
     }
 
+    @Override
+    public void processPostOnBoardState(K8sNode k8sNode) {
+        // do something if needed
+    }
+
     /**
      * Extracts properties from the component configuration context.
      *
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/web/K8sNodeWebResource.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/web/K8sNodeWebResource.java
index 3b1048f..1786f4c 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/web/K8sNodeWebResource.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/web/K8sNodeWebResource.java
@@ -48,6 +48,7 @@
 import static javax.ws.rs.core.Response.created;
 import static org.onlab.util.Tools.nullIsIllegal;
 import static org.onlab.util.Tools.readTreeFromStream;
+import static org.onosproject.k8snode.api.K8sNodeState.POST_ON_BOARD;
 import static org.onosproject.k8snode.util.K8sNodeUtil.endpoint;
 
 /**
@@ -70,6 +71,7 @@
     private static final String INIT = "INIT";
     private static final String NOT_EXIST = "Not exist";
     private static final String STATE = "State";
+    private static final String RESULT = "Result";
 
     private static final String HOST_NAME = "hostname";
     private static final String ENDPOINT = "endpoint";
@@ -248,6 +250,39 @@
         return ok(mapper().createObjectNode()).build();
     }
 
+    /**
+     * Updates a kubernetes nodes' state as post-on-board.
+     *
+     * @param hostname kubernetes node name
+     * @return 200 OK with the updated kubernetes node's config, 400 BAD_REQUEST
+     * if the JSON is malformed, and 304 NOT_MODIFIED without the updated config
+     */
+    @PUT
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("update/postonboard/{hostname}")
+    public Response postOnBoardNode(@PathParam("hostname") String hostname) {
+        nodeAdminService.node(hostname).updateState(POST_ON_BOARD);
+        return Response.ok().build();
+    }
+
+    /**
+     * Indicates whether all kubernetes nodes are in post-on-board state.
+     *
+     * @return 200 OK with True, or 200 OK with False
+     */
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("get/postonboard/all")
+    public Response postOnBoardNodes() {
+        long numOfAllNodes = nodeAdminService.nodes().size();
+        long numOfReadyNodes = nodeAdminService.nodes().stream()
+                .filter(n -> n.state() == POST_ON_BOARD)
+                .count();
+        boolean result = numOfAllNodes == numOfReadyNodes;
+
+        return ok(mapper().createObjectNode().put(RESULT, result)).build();
+    }
+
     private Set<K8sNode> readNodeConfiguration(InputStream input) {
         Set<K8sNode> nodeSet = Sets.newHashSet();
         try {
