diff --git a/apps/k8s-networking/BUILD b/apps/k8s-networking/BUILD
new file mode 100644
index 0000000..866fca6
--- /dev/null
+++ b/apps/k8s-networking/BUILD
@@ -0,0 +1,15 @@
+BUNDLES = [
+    "//apps/k8s-networking/api:onos-apps-k8s-networking-api",
+    "//apps/k8s-networking/app:onos-apps-k8s-networking-app",
+]
+
+onos_app(
+    category = "Integration",
+    description = "SONA Kubernetes Networking Application.",
+    included_bundles = BUNDLES,
+    required_apps = [
+        "org.onosproject.k8s-node",
+    ],
+    title = "Kubernetes Networking Application",
+    url = "https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization",
+)
diff --git a/apps/k8s-networking/api/BUILD b/apps/k8s-networking/api/BUILD
new file mode 100644
index 0000000..36d2da1
--- /dev/null
+++ b/apps/k8s-networking/api/BUILD
@@ -0,0 +1,11 @@
+COMPILE_DEPS = CORE_DEPS
+
+TEST_DEPS = TEST_ADAPTERS + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+]
+
+osgi_jar_with_tests(
+    test_deps = TEST_DEPS,
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpam.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpam.java
new file mode 100644
index 0000000..57f2130
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpam.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onlab.packet.IpAddress;
+
+/**
+ * Representation of kubernetes IPAM.
+ */
+public interface K8sIpam {
+
+    /**
+     * Returns the IP address.
+     *
+     * @return IP address
+     */
+    IpAddress ipaddress();
+
+    /**
+     * Returns the kubernetes network ID.
+     *
+     * @return kubernetes network ID
+     */
+    String networkId();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamAdminService.java
new file mode 100644
index 0000000..f34421a
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamAdminService.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onlab.packet.IpAddress;
+
+/**
+ * IP Address Management admin service for kubernetes network.
+ */
+public interface K8sIpamAdminService extends K8sIpamService {
+
+    /**
+     * Allocates a new IP address with the given network.
+     *
+     * @param networkId network identifier
+     * @return allocated IP address
+     */
+    IpAddress allocateIp(String networkId);
+
+    /**
+     * Leases the IP address from the given network.
+     *
+     * @param networkId network identifier
+     * @return leased IP address
+     */
+    IpAddress leaseIp(String networkId);
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamEvent.java
new file mode 100644
index 0000000..a2fa06f
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamEvent.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onosproject.event.AbstractEvent;
+
+/**
+ * Describes kubernetes IPAM service event.
+ */
+public class K8sIpamEvent extends AbstractEvent<K8sIpamEvent.Type, K8sIpam> {
+
+    /**
+     * Creates an event of a given type for the specified IPAM.
+     *
+     * @param type      kubernetes IPAM event type
+     * @param subject   kubernetes IPAM
+     */
+    protected K8sIpamEvent(Type type, K8sIpam subject) {
+        super(type, subject);
+    }
+
+    /**
+     * kubernetes IPAM events.
+     */
+    public enum Type {
+        /**
+         * Signifies that a new IP address was allocated.
+         */
+        K8S_IP_ALLOCATED,
+
+        /**
+         * Signifies that an existing IP address was released.
+         */
+        K8S_IP_RELEASED,
+    }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamListener.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamListener.java
new file mode 100644
index 0000000..2436564
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for kubernetes IPAM event.
+ */
+public interface K8sIpamListener extends EventListener<K8sIpamEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamService.java
new file mode 100644
index 0000000..23da934
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onlab.packet.IpAddress;
+import org.onosproject.event.ListenerService;
+
+import java.util.Set;
+
+/**
+ * IP Address Management service for kubernetes network.
+ */
+public interface K8sIpamService extends ListenerService<K8sIpamEvent, K8sIpamListener> {
+
+    /**
+     * Returns the already allocated IP addresses.
+     *
+     * @param networkId network identifier
+     * @return allocated IP addresses
+     */
+    Set<IpAddress> allocatedIps(String networkId);
+
+    /**
+     * Returns the available IP addresses.
+     *
+     * @param networkId network identifier
+     * @return available IP addresses
+     */
+    Set<IpAddress> availableIps(String networkId);
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStore.java
new file mode 100644
index 0000000..bcd1d1f
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStore.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onlab.packet.IpAddress;
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of instance IPAM; not intended for direct use.
+ */
+public interface K8sIpamStore extends Store<K8sIpamEvent, K8sIpamStoreDelegate> {
+
+    /**
+     * Allocates a new IP address.
+     *
+     * @param networkId network identifier
+     * @return newly allocated IP address
+     */
+    IpAddress allocateIp(String networkId);
+
+    /**
+     * Leases the existing IP address.
+     *
+     * @param networkId network identifier
+     * @return leased IP address
+     */
+    IpAddress leaseIp(String networkId);
+
+    /**
+     * Initializes a new IP pool with the given network.
+     *
+     * @param networkId network identifier
+     */
+    void initializeIpPool(String networkId);
+
+    /**
+     * Purges an existing IP pool associated with the given network.
+     *
+     * @param networkId network identifier
+     */
+    void purgeIpPool(String networkId);
+
+    /**
+     * Returns the already allocated IP addresses.
+     *
+     * @param networkId network identifier
+     * @return allocated IP addresses
+     */
+    Set<IpAddress> allocatedIps(String networkId);
+
+    /**
+     * Returns the available IP addresses.
+     *
+     * @param networkId network identifier
+     * @return available IP addresses
+     */
+    Set<IpAddress> availableIps(String networkId);
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStoreDelegate.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStoreDelegate.java
new file mode 100644
index 0000000..cadd8f3
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * IPAM store delegate abstraction.
+ */
+public interface K8sIpamStoreDelegate extends StoreDelegate<K8sIpamEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java
new file mode 100644
index 0000000..f971cb9
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onlab.packet.IpAddress;
+
+/**
+ * Representation of kubernetes network.
+ */
+public interface K8sNetwork {
+
+    /**
+     * Lists of network type.
+     */
+    enum Type {
+
+        /**
+         * VXLAN typed virtual network.
+         */
+        VXLAN,
+
+        /**
+         * GRE typed virtual network.
+         */
+        GRE,
+
+        /**
+         * GENEVE typed virtual network.
+         */
+        GENEVE,
+    }
+
+    /**
+     * Returns the kubernetes network ID.
+     *
+     * @return kubernetes network ID
+     */
+    String networkId();
+
+    /**
+     * Returns kubernetes network type.
+     *
+     * @return kubernetes network type
+     */
+    Type type();
+
+    /**
+     * Returns maximum transmission unit (MTU) value to address fragmentation.
+     *
+     * @return maximum transmission unit (MTU) value to address fragmentation
+     */
+    Integer mtu();
+
+    /**
+     * Returns segmentation ID.
+     *
+     * @return segmentation ID
+     */
+    String segmentId();
+
+    /**
+     * Returns gateway IP address.
+     *
+     * @return gateway IP address
+     */
+    IpAddress gatewayIp();
+
+    /**
+     * Returns network CIDR.
+     *
+     * @return network CIDR
+     */
+    String cidr();
+
+    /**
+     * Builder of new network.
+     */
+    interface Builder {
+
+        /**
+         * Builds an immutable network instance.
+         *
+         * @return kubernetes network
+         */
+        K8sNetwork build();
+
+        /**
+         * Returns network builder with supplied network ID.
+         *
+         * @param networkId network ID
+         * @return network builder
+         */
+        Builder networkId(String networkId);
+
+        /**
+         * Returns network builder with supplied network type.
+         *
+         * @param type network type
+         * @return network builder
+         */
+        Builder type(Type type);
+
+        /**
+         * Returns network builder with supplied MTU.
+         *
+         * @param mtu maximum transmission unit
+         * @return network builder
+         */
+        Builder mtu(Integer mtu);
+
+        /**
+         * Returns network builder with supplied segment ID.
+         *
+         * @param segmentId segment ID
+         * @return network builder
+         */
+        Builder segmentId(String segmentId);
+
+        /**
+         * Returns network builder with supplied gateway IP address.
+         *
+         * @param ipAddress gateway IP address
+         * @return network builder
+         */
+        Builder gatewayIp(IpAddress ipAddress);
+
+        /**
+         * Returns network builder with supplied network CIDR.
+         *
+         * @param cidr Classless Inter-Domain Routing
+         * @return network builder
+         */
+        Builder cidr(String cidr);
+    }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java
new file mode 100644
index 0000000..e7f5c18
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+/**
+ * Service for administering the inventory of kubernetes network, subnet.
+ */
+public interface K8sNetworkAdminService extends K8sNetworkService {
+
+    /**
+     * Creates a kubernetes network with the given information.
+     *
+     * @param network the new network
+     */
+    void createNetwork(K8sNetwork network);
+
+    /**
+     * Updates the kubernetes network with the given information.
+     *
+     * @param network the updated network
+     */
+    void updateNetwork(K8sNetwork network);
+
+    /**
+     * Removes the network.
+     *
+     * @param networkId network identifier
+     * @return removed network; null if the network does not exist
+     */
+    K8sNetwork removeNetwork(String networkId);
+
+    /**
+     * Creates a kubernetes port with the given information.
+     *
+     * @param port the new port
+     */
+    void createPort(K8sPort port);
+
+    /**
+     * Updates the kubernetes port with the given information.
+     *
+     * @param port the updated port
+     */
+    void updatePort(K8sPort port);
+
+    /**
+     * Removes the port.
+     *
+     * @param portId port identifier
+     * @return removed port; null if the port does not exist
+     */
+    K8sPort removePort(String portId);
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java
new file mode 100644
index 0000000..ea097bc
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onosproject.event.AbstractEvent;
+
+/**
+ * Describes kubernetes network service event.
+ */
+public class K8sNetworkEvent extends AbstractEvent<K8sNetworkEvent.Type, K8sNetwork> {
+
+    /**
+     * Creates an event of a given type for the specified network.
+     *
+     * @param type kubernetes network event type
+     * @param subject kubernetes network
+     */
+    protected K8sNetworkEvent(Type type, K8sNetwork subject) {
+        super(type, subject);
+    }
+
+    /**
+     * Kubernetes network events.
+     */
+    public enum Type {
+
+        /**
+         * Signifies that a new kubernetes network is created.
+         */
+        K8S_NETWORK_CREATED,
+
+        /**
+         * Signifies that the kubernetes network is updated.
+         */
+        K8S_NETWORK_UPDATED,
+
+        /**
+         * Signifies that the kubernetes network is removed.
+         */
+        K8S_NETWORK_REMOVED,
+    }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkListener.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkListener.java
new file mode 100644
index 0000000..2a1aec5
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for kubernetes network event.
+ */
+public interface K8sNetworkListener extends EventListener<K8sNetworkEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkService.java
new file mode 100644
index 0000000..1a8f84e
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkService.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onosproject.event.ListenerService;
+import org.onosproject.k8snetworking.api.K8sNetwork.Type;
+import org.onosproject.k8snetworking.api.K8sPort.State;
+
+import java.util.Set;
+
+/**
+ * Service for interacting with the inventory of kubernetes network.
+ */
+public interface K8sNetworkService
+        extends ListenerService<K8sNetworkEvent, K8sNetworkListener> {
+
+    /**
+     * Returns the kubernetes network with the supplied network identifier.
+     *
+     * @param networkId network identifier
+     * @return kubernetes network
+     */
+    K8sNetwork network(String networkId);
+
+    /**
+     * Returns all kubernetes networks registered in the service.
+     *
+     * @return set of kubernetes networks
+     */
+    Set<K8sNetwork> networks();
+
+    /**
+     * Returns the kubernetes networks with the given network type.
+     *
+     * @param type virtual network type
+     * @return set of kubernetes networks
+     */
+    Set<K8sNetwork> networks(Type type);
+
+    /**
+     * Returns the kubernetes port with the supplied network identifier.
+     *
+     * @param portId port identifier
+     * @return kubernetes port
+     */
+    K8sPort port(String portId);
+
+    /**
+     * Returns all kubernetes ports registered in the service.
+     *
+     * @return set of kubernetes ports
+     */
+    Set<K8sPort> ports();
+
+    /**
+     * Returns the kubernetes ports with the given port state.
+     *
+     * @param state port state
+     * @return set of kubernetes ports
+     */
+    Set<K8sPort> ports(State state);
+
+    /**
+     * Returns the kubernetes ports belongs to the given network.
+     *
+     * @param networkId network identifier
+     * @return kubernetes ports
+     */
+    Set<K8sPort> ports(String networkId);
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java
new file mode 100644
index 0000000..a5255ff
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of kubernetes network states; not intended for direct use.
+ */
+public interface K8sNetworkStore extends Store<K8sNetworkEvent, K8sNetworkStoreDelegate> {
+
+    /**
+     * Creates the new kubernetes network.
+     *
+     * @param network kubernetes network
+     */
+    void createNetwork(K8sNetwork network);
+
+    /**
+     * Update the kubernetes network.
+     *
+     * @param network kubernetes network
+     */
+    void updateNetwork(K8sNetwork network);
+
+    /**
+     * Removes the kubernetes network with the given network identifier.
+     *
+     * @param networkId network identifier
+     * @return removed kubernetes network; null if failed
+     */
+    K8sNetwork removeNetwork(String networkId);
+
+    /**
+     * Returns the kubernetes network with the given network identifier.
+     *
+     * @param networkId network identifier
+     * @return network; null if not found
+     */
+    K8sNetwork network(String networkId);
+
+    /**
+     * Returns all kubernetes networks.
+     *
+     * @return set of kubernetes networks
+     */
+    Set<K8sNetwork> networks();
+
+    /**
+     * Removes all kubernetes networks.
+     */
+    void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStoreDelegate.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStoreDelegate.java
new file mode 100644
index 0000000..c8db036
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Kubernetes network store delegate abstraction.
+ */
+public interface K8sNetworkStoreDelegate extends StoreDelegate<K8sNetworkEvent> {
+}
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
new file mode 100644
index 0000000..13f5c47
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPort.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.k8snetworking.api;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+
+/**
+ * Representation of virtual port.
+ */
+public interface K8sPort {
+
+    /**
+     * List of instance port state.
+     */
+    enum State {
+
+        /**
+         * Signifies that the given port is in active state.
+         */
+        ACTIVE,
+
+        /**
+         * Signifies that the given port is in inactive state.
+         */
+        INACTIVE,
+    }
+
+    /**
+     * Returns the kubernetes network ID that the port is associated with.
+     *
+     * @return kubernetes network ID
+     */
+    String networkId();
+
+    /**
+     * Returns the kubernetes port ID.
+     *
+     * @return kubernetes port ID
+     */
+    String portId();
+
+    /**
+     * Returns the MAC address of the port.
+     *
+     * @return MAC address
+     */
+    MacAddress macAddress();
+
+    /**
+     * Returns the IP address of the port.
+     *
+     * @return IP address
+     */
+    IpAddress ipAddress();
+
+    /**
+     * Returns the device ID of the port.
+     *
+     * @return device ID
+     */
+    DeviceId deviceId();
+
+    /**
+     * Returns the port number of the port.
+     *
+     * @return port number
+     */
+    PortNumber portNumber();
+
+    /**
+     * Returns the state of the port.
+     *
+     * @return state of port
+     */
+    State state();
+
+    /**
+     * Returns new port instance with the given state.
+     *
+     * @param newState updated state
+     * @return updated port
+     */
+    K8sPort updateState(State newState);
+
+    /**
+     * Builder of new port.
+     */
+    interface Builder {
+
+        /**
+         * Builds an immutable port instance.
+         *
+         * @return kubernetes port
+         */
+        K8sPort build();
+
+        /**
+         * Returns port builder with supplied network ID.
+         *
+         * @param networkId network ID
+         * @return port builder
+         */
+        Builder networkId(String networkId);
+
+        /**
+         * Returns port builder with supplied port ID.
+         *
+         * @param portId port ID
+         * @return port builder
+         */
+        Builder portId(String portId);
+
+        /**
+         * Returns port builder with supplied MAC address.
+         *
+         * @param macAddress MAC address
+         * @return port builder
+         */
+        Builder macAddress(MacAddress macAddress);
+
+        /**
+         * Returns port builder with supplied IP address.
+         *
+         * @param ipAddress IP address
+         * @return port builder
+         */
+        Builder ipAddress(IpAddress ipAddress);
+
+        /**
+         * Returns port builder with supplied device ID.
+         *
+         * @param deviceId device ID
+         * @return port builder
+         */
+        Builder deviceId(DeviceId deviceId);
+
+        /**
+         * Returns port builder with supplied port number.
+         *
+         * @param portNumber port number
+         * @return port builder
+         */
+        Builder portNumber(PortNumber portNumber);
+
+        /**
+         * Returns port builder with supplied port state.
+         *
+         * @param state port state
+         * @return port builder
+         */
+        Builder state(State state);
+    }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/package-info.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/package-info.java
new file mode 100644
index 0000000..c02a8dd
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * APIs for kubernetes CNI related functions including IPAM, etc.
+ */
+package org.onosproject.k8snetworking.api;
\ No newline at end of file
diff --git a/apps/k8s-networking/app/BUILD b/apps/k8s-networking/app/BUILD
new file mode 100644
index 0000000..06da173
--- /dev/null
+++ b/apps/k8s-networking/app/BUILD
@@ -0,0 +1,16 @@
+COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + CLI + REST + [
+    "//core/store/serializers:onos-core-serializers",
+    "//apps/k8s-node/api:onos-apps-k8s-node-api",
+    "//apps/k8s-networking/api:onos-apps-k8s-networking-api",
+]
+
+TEST_DEPS = TEST_ADAPTERS + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+]
+
+osgi_jar_with_tests(
+    karaf_command_packages = ["org.onosproject.k8snetworking.cli"],
+    test_deps = TEST_DEPS,
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/package-info.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/package-info.java
new file mode 100644
index 0000000..18cd1ad
--- /dev/null
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/cli/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * CLI implementation for kubernetes integration.
+ */
+package org.onosproject.k8snetworking.cli;
\ No newline at end of file
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/codec/package-info.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/codec/package-info.java
new file mode 100644
index 0000000..8362358
--- /dev/null
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/codec/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Implementations of the codec broker and kubernetes networking entity JSON codecs.
+ */
+package org.onosproject.k8snetworking.codec;
\ No newline at end of file
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/package-info.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/package-info.java
new file mode 100644
index 0000000..5a869cf
--- /dev/null
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Implements kubernetes integration.
+ */
+package org.onosproject.k8snetworking.impl;
\ No newline at end of file
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/web/package-info.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/web/package-info.java
new file mode 100644
index 0000000..392c803
--- /dev/null
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/web/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Kubernetes networking web implementation.
+ */
+package org.onosproject.k8snetworking.web;
\ No newline at end of file
