Search in sources :

Example 6 with K8sNetwork

use of org.onosproject.k8snetworking.api.K8sNetwork in project onos by opennetworkinglab.

the class K8sSwitchingHandler method setExtToIntgTunnelTagFlowRules.

private void setExtToIntgTunnelTagFlowRules(K8sNode k8sNode, boolean install) {
    TrafficSelector selector = DefaultTrafficSelector.builder().matchEthType(Ethernet.TYPE_IPV4).matchInPort(k8sNode.intgToExtPatchPortNum()).build();
    K8sNetwork net = k8sNetworkService.network(k8sNode.hostname());
    TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder().setTunnelId(Long.valueOf(net.segmentId())).transition(JUMP_TABLE);
    k8sFlowRuleService.setRule(appId, k8sNode.intgBridge(), selector, tBuilder.build(), PRIORITY_TUNNEL_TAG_RULE, VTAG_TABLE, install);
}
Also used : K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) TrafficSelector(org.onosproject.net.flow.TrafficSelector) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment)

Example 7 with K8sNetwork

use of org.onosproject.k8snetworking.api.K8sNetwork in project onos by opennetworkinglab.

the class K8sNetworkingUtil method nodeIpGatewayIpMap.

/**
 * Obtains the kubernetes node IP and kubernetes network gateway IP map.
 *
 * @param nodeService       kubernetes node service
 * @param networkService    kubernetes network service
 * @return kubernetes node IP and kubernetes network gateway IP map
 */
public static Map<String, String> nodeIpGatewayIpMap(K8sNodeService nodeService, K8sNetworkService networkService) {
    Map<String, String> ipMap = Maps.newConcurrentMap();
    nodeService.completeNodes().forEach(n -> {
        K8sNetwork network = networkService.network(n.hostname());
        if (network != null) {
            ipMap.put(n.nodeIp().toString(), network.gatewayIp().toString());
        }
    });
    return ipMap;
}
Also used : K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork)

Example 8 with K8sNetwork

use of org.onosproject.k8snetworking.api.K8sNetwork in project onos by opennetworkinglab.

the class K8sNetworkCodecTest method testK8sNetworkDecode.

/**
 * Tests the kubernetes network decoding.
 */
@Test
public void testK8sNetworkDecode() throws IOException {
    K8sNetwork network = getK8sNetwork("K8sNetwork.json");
    assertEquals("network-1", network.networkId());
    assertEquals("network-1", network.name());
    assertEquals("1", network.segmentId());
    assertEquals("VXLAN", network.type().name());
    assertEquals("10.10.0.1", network.gatewayIp().toString());
    assertEquals("10.10.0.0/24", network.cidr());
    assertThat(network.mtu(), is(1500));
}
Also used : K8sNetworkJsonMatcher.matchesK8sNetwork(org.onosproject.k8snetworking.codec.K8sNetworkJsonMatcher.matchesK8sNetwork) K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) DefaultK8sNetwork(org.onosproject.k8snetworking.api.DefaultK8sNetwork) Test(org.junit.Test)

Example 9 with K8sNetwork

use of org.onosproject.k8snetworking.api.K8sNetwork in project onos by opennetworkinglab.

the class K8sNetworkCodecTest method getK8sNetwork.

/**
 * Reads in an kubernetes network from the given resource and decodes it.
 *
 * @param resourceName resource to use to read the JSON for the rule
 * @return decoded kubernetes network
 * @throws IOException if processing the resource fails
 */
private K8sNetwork getK8sNetwork(String resourceName) throws IOException {
    InputStream jsonStream = K8sNetworkCodecTest.class.getResourceAsStream(resourceName);
    JsonNode json = context.mapper().readTree(jsonStream);
    MatcherAssert.assertThat(json, notNullValue());
    K8sNetwork network = k8sNetworkCodec.decode((ObjectNode) json, context);
    assertThat(network, notNullValue());
    return network;
}
Also used : K8sNetworkJsonMatcher.matchesK8sNetwork(org.onosproject.k8snetworking.codec.K8sNetworkJsonMatcher.matchesK8sNetwork) K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) DefaultK8sNetwork(org.onosproject.k8snetworking.api.DefaultK8sNetwork) InputStream(java.io.InputStream) JsonNode(com.fasterxml.jackson.databind.JsonNode)

Example 10 with K8sNetwork

use of org.onosproject.k8snetworking.api.K8sNetwork in project onos by opennetworkinglab.

the class K8sSwitchingHostProvider method processPortAdded.

/**
 * Processes port addition event.
 *
 * @param port port object used in ONOS
 */
private void processPortAdded(Port port) {
    K8sPort k8sPort = portToK8sPortByName(port);
    if (k8sPort == null) {
        k8sPort = portToK8sPortByMac(port);
        if (k8sPort == null) {
            log.warn(ERR_ADD_HOST + "Kubernetes port for {} not found", port);
            return;
        }
    }
    K8sNetwork k8sNet = k8sNetworkService.network(k8sPort.networkId());
    if (k8sNet == null) {
        log.warn(ERR_ADD_HOST + "Kubernetes network {} not found", k8sPort.networkId());
        return;
    }
    MacAddress mac = k8sPort.macAddress();
    HostId hostId = HostId.hostId(mac);
    // connect point is the combination of switch ID with port number where
    // the host is attached to
    ConnectPoint connectPoint = new ConnectPoint(port.element().id(), port.number());
    long createTime = System.currentTimeMillis();
    // update k8s port number by referring to ONOS port number
    k8sNetworkService.updatePort(k8sPort.updatePortNumber(port.number()).updateState(K8sPort.State.ACTIVE));
    // we check whether the host already attached to same locations
    Host host = hostService.getHost(hostId);
    // build host annotations to include a set of meta info from neutron
    DefaultAnnotations.Builder annotations = DefaultAnnotations.builder().set(ANNOTATION_NETWORK_ID, k8sPort.networkId()).set(ANNOTATION_PORT_ID, k8sPort.portId()).set(ANNOTATION_CREATE_TIME, String.valueOf(createTime)).set(ANNOTATION_SEGMENT_ID, k8sNet.segmentId());
    HostDescription hostDesc = new DefaultHostDescription(mac, VlanId.NONE, new HostLocation(connectPoint, createTime), ImmutableSet.of(k8sPort.ipAddress()), annotations.build());
    if (host != null) {
        Set<HostLocation> locations = host.locations().stream().filter(l -> l.deviceId().equals(connectPoint.deviceId())).filter(l -> l.port().equals(connectPoint.port())).collect(Collectors.toSet());
        // therefore, we simply add this into the location list
        if (locations.isEmpty()) {
            hostProviderService.addLocationToHost(hostId, new HostLocation(connectPoint, createTime));
        }
        // the hostDetected method invocation in turn triggers host Update event
        if (locations.size() == 1) {
            hostProviderService.hostDetected(hostId, hostDesc, false);
        }
    } else {
        hostProviderService.hostDetected(hostId, hostDesc, false);
    }
}
Also used : HostLocation(org.onosproject.net.HostLocation) K8sNetworkingUtil.existingContainerPortByName(org.onosproject.k8snetworking.util.K8sNetworkingUtil.existingContainerPortByName) CoreService(org.onosproject.core.CoreService) DeviceService(org.onosproject.net.device.DeviceService) LoggerFactory(org.slf4j.LoggerFactory) Tools.groupedThreads(org.onlab.util.Tools.groupedThreads) K8sNodeListener(org.onosproject.k8snode.api.K8sNodeListener) K8sNetworkListener(org.onosproject.k8snetworking.api.K8sNetworkListener) ConnectPoint(org.onosproject.net.ConnectPoint) HostProviderService(org.onosproject.net.host.HostProviderService) Port(org.onosproject.net.Port) PORT_MAC(org.onosproject.net.AnnotationKeys.PORT_MAC) K8sNetworkingUtil.isContainer(org.onosproject.k8snetworking.util.K8sNetworkingUtil.isContainer) MastershipService(org.onosproject.mastership.MastershipService) ANNOTATION_CREATE_TIME(org.onosproject.k8snetworking.api.Constants.ANNOTATION_CREATE_TIME) ImmutableSet(com.google.common.collect.ImmutableSet) Device(org.onosproject.net.Device) Deactivate(org.osgi.service.component.annotations.Deactivate) Set(java.util.Set) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) GENEVE(org.onosproject.k8snetworking.api.Constants.GENEVE) DeviceEvent(org.onosproject.net.device.DeviceEvent) K8sNetworkAdminService(org.onosproject.k8snetworking.api.K8sNetworkAdminService) DeviceId(org.onosproject.net.DeviceId) HostDescription(org.onosproject.net.host.HostDescription) INIT(org.onosproject.k8snode.api.K8sNodeState.INIT) HostProviderRegistry(org.onosproject.net.host.HostProviderRegistry) Tools(org.onlab.util.Tools) Host(org.onosproject.net.Host) PORT_NAME(org.onosproject.net.AnnotationKeys.PORT_NAME) GRE(org.onosproject.k8snetworking.api.Constants.GRE) HostService(org.onosproject.net.host.HostService) Strings(com.google.common.base.Strings) DefaultHostDescription(org.onosproject.net.host.DefaultHostDescription) Component(org.osgi.service.component.annotations.Component) ANNOTATION_PORT_ID(org.onosproject.k8snetworking.api.Constants.ANNOTATION_PORT_ID) ANNOTATION_NETWORK_ID(org.onosproject.k8snetworking.api.Constants.ANNOTATION_NETWORK_ID) K8sNetworkEvent(org.onosproject.k8snetworking.api.K8sNetworkEvent) K8sPort(org.onosproject.k8snetworking.api.K8sPort) K8sNodeEvent(org.onosproject.k8snode.api.K8sNodeEvent) Activate(org.osgi.service.component.annotations.Activate) K8sNode(org.onosproject.k8snode.api.K8sNode) HostId(org.onosproject.net.HostId) ExecutorService(java.util.concurrent.ExecutorService) K8S_NETWORKING_APP_ID(org.onosproject.k8snetworking.api.Constants.K8S_NETWORKING_APP_ID) AbstractProvider(org.onosproject.net.provider.AbstractProvider) DeviceListener(org.onosproject.net.device.DeviceListener) Logger(org.slf4j.Logger) HostProvider(org.onosproject.net.host.HostProvider) VXLAN(org.onosproject.k8snetworking.api.Constants.VXLAN) VlanId(org.onlab.packet.VlanId) K8sHostService(org.onosproject.k8snode.api.K8sHostService) ProviderId(org.onosproject.net.provider.ProviderId) ANNOTATION_SEGMENT_ID(org.onosproject.k8snetworking.api.Constants.ANNOTATION_SEGMENT_ID) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) DefaultAnnotations(org.onosproject.net.DefaultAnnotations) K8sNetworkingUtil.existingContainerPortByMac(org.onosproject.k8snetworking.util.K8sNetworkingUtil.existingContainerPortByMac) K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) K8sNetworkingUtil.allK8sDevices(org.onosproject.k8snetworking.util.K8sNetworkingUtil.allK8sDevices) MacAddress(org.onlab.packet.MacAddress) K8sNodeService(org.onosproject.k8snode.api.K8sNodeService) Reference(org.osgi.service.component.annotations.Reference) DefaultHostDescription(org.onosproject.net.host.DefaultHostDescription) DefaultAnnotations(org.onosproject.net.DefaultAnnotations) Host(org.onosproject.net.Host) MacAddress(org.onlab.packet.MacAddress) HostId(org.onosproject.net.HostId) ConnectPoint(org.onosproject.net.ConnectPoint) HostDescription(org.onosproject.net.host.HostDescription) DefaultHostDescription(org.onosproject.net.host.DefaultHostDescription) K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) HostLocation(org.onosproject.net.HostLocation) K8sPort(org.onosproject.k8snetworking.api.K8sPort)

Aggregations

K8sNetwork (org.onosproject.k8snetworking.api.K8sNetwork)21 DefaultTrafficSelector (org.onosproject.net.flow.DefaultTrafficSelector)6 DefaultTrafficTreatment (org.onosproject.net.flow.DefaultTrafficTreatment)6 TrafficSelector (org.onosproject.net.flow.TrafficSelector)6 TrafficTreatment (org.onosproject.net.flow.TrafficTreatment)6 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)5 Path (javax.ws.rs.Path)4 K8sNetworkService (org.onosproject.k8snetworking.api.K8sNetworkService)4 K8sPort (org.onosproject.k8snetworking.api.K8sPort)4 Set (java.util.Set)3 IpAddress (org.onlab.packet.IpAddress)3 MacAddress (org.onlab.packet.MacAddress)3 DefaultK8sNetwork (org.onosproject.k8snetworking.api.DefaultK8sNetwork)3 K8sNetworkJsonMatcher.matchesK8sNetwork (org.onosproject.k8snetworking.codec.K8sNetworkJsonMatcher.matchesK8sNetwork)3 JsonNode (com.fasterxml.jackson.databind.JsonNode)2 ExecutorService (java.util.concurrent.ExecutorService)2 Collectors (java.util.stream.Collectors)2 GET (javax.ws.rs.GET)2 Produces (javax.ws.rs.Produces)2 VlanId (org.onlab.packet.VlanId)2