Initial commit to implement external loadbalancer for kubernetes pods.
- Adds elb-related parameters in KubevirtNode class
- Defines KubernetesExternalLb and related service, manager and store.
Change-Id: I68476887af493c7daeaf1dca0320218f1764653f
(cherry picked from commit 734b5532e87da5e7f9ee9c5e63de2a3771fd8409)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
index de71f29..3496008 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
@@ -41,6 +41,7 @@
import org.onosproject.cfg.ConfigProperty;
import org.onosproject.kubevirtnetworking.api.DefaultKubevirtNetwork;
import org.onosproject.kubevirtnetworking.api.DefaultKubevirtPort;
+import org.onosproject.kubevirtnetworking.api.KubernetesExternalLb;
import org.onosproject.kubevirtnetworking.api.KubevirtHostRoute;
import org.onosproject.kubevirtnetworking.api.KubevirtIpPool;
import org.onosproject.kubevirtnetworking.api.KubevirtLoadBalancer;
@@ -542,6 +543,28 @@
}
/**
+ * Returns the gateway node for the specified kubernetes external lb.
+ * Among gateways, only one gateway would act as a gateway per external lb.
+ * Currently gateway node is selected based on modulo operation with router hashcode.
+ *
+ * @param nodeService kubevirt node service
+ * @param externalLb kubernetes external lb
+ * @return elected gateway node
+ */
+ public static KubevirtNode gatewayNodeForSpecifiedService(KubevirtNodeService nodeService,
+ KubernetesExternalLb externalLb) {
+ //TODO: enhance election logic for a better load balancing
+
+ int numOfGateways = nodeService.completeNodes(GATEWAY).size();
+ if (numOfGateways == 0) {
+ return null;
+ }
+
+ return (KubevirtNode) nodeService.completeNodes(GATEWAY)
+ .toArray()[externalLb.hashCode() % numOfGateways];
+ }
+
+ /**
* Returns the mac address of the router.
*
* @param router kubevirt router