diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sApiConfig.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sApiConfig.java
index 62d050d..d01f3a2 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sApiConfig.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sApiConfig.java
@@ -16,6 +16,9 @@
 package org.onosproject.k8snode.api;
 
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
+
+import java.util.Set;
 
 /**
  * Representation of configuration used in kubernetes API server.
@@ -52,6 +55,46 @@
         DISCONNECTED,
     }
 
+    enum Mode {
+        /**
+         * Signifies that the CNI is running in normal mode.
+         */
+        NORMAL,
+
+        /**
+         * Signifies that the CNI is running in pass-through mode.
+         */
+        PASSTHROUGH,
+    }
+
+    /**
+     * Returns the cluster name.
+     *
+     * @return cluster name
+     */
+    String clusterName();
+
+    /**
+     * Returns cluster short name.
+     *
+     * @return cluster short name
+     */
+    String clusterShortName();
+
+    /**
+     * Returns the segmentation ID.
+     *
+     * @return segmentation ID
+     */
+    int segmentId();
+
+    /**
+     * Returns the external network CIDR.
+     *
+     * @return external network CIDR
+     */
+    IpPrefix extNetworkCidr();
+
     /**
      * Returns the authentication scheme.
      *
@@ -81,6 +124,13 @@
     State state();
 
     /**
+     * Returns the CNI running mode.
+     *
+     * @return running mode
+     */
+    Mode mode();
+
+    /**
      * Returns new kubernetes API config instance with given state.
      *
      * @param newState updated state
@@ -117,6 +167,13 @@
     String clientKeyData();
 
     /**
+     * Returns the host Nodes info set.
+     *
+     * @return host nodes info set
+     */
+    Set<HostNodesInfo> infos();
+
+    /**
      * Builder of new API config entity.
      */
     interface Builder {
@@ -129,6 +186,30 @@
         K8sApiConfig build();
 
         /**
+         * Returns kubernetes API server config builder with cluster name.
+         *
+         * @param clusterName cluster name
+         * @return kubernetes API config builder
+         */
+        Builder clusterName(String clusterName);
+
+        /**
+         * Returns kubernetes API server config builder with segment ID.
+         *
+         * @param segmentId segment ID
+         * @return kubernetes API config builder
+         */
+        Builder segmentId(int segmentId);
+
+        /**
+         * Returns kubernetes API server config builder with external network CIDR.
+         *
+         * @param extNetworkCidr external network CIDR
+         * @return kubernetes API config builder
+         */
+        Builder extNetworkCidr(IpPrefix extNetworkCidr);
+
+        /**
          * Returns kubernetes API server config builder with supplied scheme.
          *
          * @param scheme scheme of authentication
@@ -161,6 +242,14 @@
         Builder state(State state);
 
         /**
+         * Returns kubernetes API server config builder with supplied mode.
+         *
+         * @param mode CNI running mode
+         * @return kubernetes API config builder
+         */
+        Builder mode(Mode mode);
+
+        /**
          * Returns kubernetes API server config builder with supplied token.
          *
          * @param token token for authentication
@@ -191,5 +280,13 @@
          * @return kubernetes API config builder
          */
         Builder clientKeyData(String clientKeyData);
+
+        /**
+         * Returns kubernetes API server config builder with supplied hostNodesInfo.
+         *
+         * @param infos hostNodesInfo
+         * @return kubernetes API config builder
+         */
+        Builder infos(Set<HostNodesInfo> infos);
     }
 }
