diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
index 2640508..18b9a11 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sServiceHandler.java
@@ -398,6 +398,10 @@
                                 }
                             }
 
+                            if (targetPortInt == 0) {
+                                continue;
+                            }
+
                             for (EndpointPort endpointPort : endpointSubset.getPorts()) {
                                 if (targetProtocol.equals(endpointPort.getProtocol()) &&
                                         (targetPortInt.equals(endpointPort.getPort()) ||
@@ -426,12 +430,17 @@
                 List<GroupBucket> bkts = Lists.newArrayList();
 
                 for (String ip : epas) {
+                    GroupBucket bkt = buildBuckets(node.intgBridge(),
+                            nodeIpGatewayIpMap.getOrDefault(ip, ip), sp);
+
+                    if (bkt == null) {
+                        continue;
+                    }
+
                     if (install) {
-                        bkts.add(buildBuckets(node.intgBridge(),
-                                nodeIpGatewayIpMap.getOrDefault(ip, ip), sp));
+                        bkts.add(bkt);
                     } else {
-                        bkts.add(buildBuckets(node.intgBridge(),
-                                nodeIpGatewayIpMap.getOrDefault(ip, ip), sp));
+                        bkts.remove(bkt);
                     }
                 }
 
@@ -462,10 +471,12 @@
                             targetPort = sp.getTargetPort().getIntVal();
                         }
 
-                        setUnshiftDomainRules(node.intgBridge(), POD_TABLE,
-                                PRIORITY_NAT_RULE, serviceIp, sp.getPort(),
-                                sp.getProtocol(), podIp,
-                                targetPort, install);
+                        if (targetPort != 0) {
+                            setUnshiftDomainRules(node.intgBridge(), POD_TABLE,
+                                    PRIORITY_NAT_RULE, serviceIp, sp.getPort(),
+                                    sp.getProtocol(), podIp,
+                                    targetPort, install);
+                        }
                     })
             );
         }
@@ -483,6 +494,10 @@
             targetPort = sp.getTargetPort().getIntVal();
         }
 
+        if (targetPort == 0) {
+            return null;
+        }
+
         if (TCP.equals(sp.getProtocol())) {
             tBuilder.setTcpDst(TpPort.tpPort(targetPort));
         } else if (UDP.equals(sp.getProtocol())) {
@@ -493,6 +508,7 @@
                 deviceService.getDevice(deviceId), ACL_TABLE);
         tBuilder.extension(resubmitTreatment, deviceId);
 
+        // TODO: need to adjust group bucket weight by considering POD locality
         return buildGroupBucket(tBuilder.build(), SELECT, (short) -1);
     }
 
