Implement NodeIP to ServiceIP translation feature
Change-Id: I49bda2cddfb1c22b362b4b48105efd316c3dad36
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingArpHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingArpHandler.java
index 79a2530..779bbc6 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingArpHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sSwitchingArpHandler.java
@@ -30,6 +30,7 @@
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.k8snetworking.api.K8sFlowRuleService;
+import org.onosproject.k8snetworking.api.K8sNetwork;
import org.onosproject.k8snetworking.api.K8sNetworkService;
import org.onosproject.k8snetworking.api.K8sPort;
import org.onosproject.k8snetworking.api.K8sServiceService;
@@ -71,12 +72,14 @@
import static org.onosproject.k8snetworking.api.Constants.ARP_PROXY_MODE;
import static org.onosproject.k8snetworking.api.Constants.ARP_TABLE;
import static org.onosproject.k8snetworking.api.Constants.K8S_NETWORKING_APP_ID;
+import static org.onosproject.k8snetworking.api.Constants.NODE_IP_PREFIX;
import static org.onosproject.k8snetworking.api.Constants.PRIORITY_ARP_CONTROL_RULE;
import static org.onosproject.k8snetworking.api.Constants.SERVICE_FAKE_MAC_STR;
import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.ARP_MODE;
import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.ARP_MODE_DEFAULT;
import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.GATEWAY_MAC;
import static org.onosproject.k8snetworking.impl.OsgiPropertyConstants.GATEWAY_MAC_DEFAULT;
+import static org.onosproject.k8snetworking.api.Constants.SHIFTED_IP_PREFIX;
import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.getPropertyValue;
import static org.onosproject.k8snetworking.util.K8sNetworkingUtil.unshiftIpDomain;
@@ -94,8 +97,6 @@
private final Logger log = LoggerFactory.getLogger(getClass());
- private static final String API_SERVER_CLUSTER_IP = "10.96.0.1";
-
private static final String GATEWAY_MAC = "gatewayMac";
private static final String ARP_MODE = "arpMode";
@@ -229,16 +230,17 @@
}
if (replyMac == null) {
- Set<String> unshiftedIps = unshiftIpDomain(targetIp.toString(), k8sNetworkService);
- for (String ip : unshiftedIps) {
+ String cidr = k8sNetworkService.networks().stream()
+ .map(K8sNetwork::cidr).findAny().orElse(null);
+
+ if (cidr != null) {
+ String unshiftedIp = unshiftIpDomain(targetIp.toString(),
+ SHIFTED_IP_PREFIX, cidr);
+
replyMac = k8sNetworkService.ports().stream()
- .filter(p -> p.ipAddress().equals(IpAddress.valueOf(ip)))
+ .filter(p -> p.ipAddress().equals(IpAddress.valueOf(unshiftedIp)))
.map(K8sPort::macAddress)
.findAny().orElse(null);
-
- if (replyMac != null) {
- break;
- }
}
}
@@ -252,6 +254,23 @@
}
if (replyMac == null) {
+ String targetIpPrefix = targetIp.toString().split("\\.")[1];
+ String nodePrefix = NODE_IP_PREFIX + "." + targetIpPrefix;
+
+ String exBridgeCidr = k8sNodeService.completeNodes().stream()
+ .map(n -> n.extBridgeIp().toString()).findAny().orElse(null);
+
+ if (exBridgeCidr != null) {
+ String extBridgeIp = unshiftIpDomain(targetIp.toString(),
+ nodePrefix, exBridgeCidr);
+
+ replyMac = k8sNodeService.completeNodes().stream()
+ .filter(n -> extBridgeIp.equals(n.extBridgeIp().toString()))
+ .map(K8sNode::extBridgeMac).findAny().orElse(null);
+ }
+ }
+
+ if (replyMac == null) {
replyMac = MacAddress.valueOf(gatewayMac);
}