Search in sources :

Example 1 with K8sNetworkService

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

the class K8sNetworkListCommand method doExecute.

@Override
protected void doExecute() {
    K8sNetworkService service = get(K8sNetworkService.class);
    List<K8sNetwork> networks = Lists.newArrayList(service.networks());
    networks.sort(Comparator.comparing(K8sNetwork::name));
    String format = genFormatString(ImmutableList.of(CLI_ID_LENGTH, CLI_NAME_LENGTH, CLI_TYPE_LENGTH, CLI_SEG_ID_LENGTH, CLI_IP_ADDRESS_LENGTH));
    if (outputJson()) {
        print("%s", json(networks));
    } else {
        print(format, "ID", "Name", "Type", "SegId", "Gateway");
        for (K8sNetwork net : networks) {
            print(format, StringUtils.substring(net.networkId(), 0, CLI_ID_LENGTH - CLI_MARGIN_LENGTH), StringUtils.substring(net.name(), 0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH), net.type().toString(), net.segmentId(), net.gatewayIp() == null ? "" : net.gatewayIp().toString());
        }
    }
}
Also used : K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) K8sNetworkService(org.onosproject.k8snetworking.api.K8sNetworkService) K8sNetworkingUtil.genFormatString(org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString)

Example 2 with K8sNetworkService

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

the class K8sIpAddressListCommand method doExecute.

@Override
protected void doExecute() {
    K8sIpamService ipamService = get(K8sIpamService.class);
    K8sNetworkService networkService = get(K8sNetworkService.class);
    if (networkIds == null || networkIds.length == 0) {
        networkIds = networkService.networks().stream().map(K8sNetwork::networkId).toArray(String[]::new);
    }
    Map<String, Map<IpAddress, MacAddress>> ipMacs = Maps.newConcurrentMap();
    if (available && reserved) {
        error("Only one of list options (available | reserved) can be specified.");
        return;
    }
    if (!(available || reserved)) {
        error("At least one of list options (available | reserved) should be specified.");
        return;
    }
    for (String networkId : networkIds) {
        Map<IpAddress, MacAddress> tmpIpMacs = Maps.newConcurrentMap();
        if (available) {
            ipamService.availableIps(networkId).forEach(n -> tmpIpMacs.put(n, ZERO));
        }
        if (reserved) {
            Set<K8sPort> ports = networkService.ports(networkId);
            ipamService.allocatedIps(networkId).forEach(ip -> {
                MacAddress mac = ports.stream().filter(p -> p.ipAddress().equals(ip)).map(K8sPort::macAddress).findAny().orElse(ZERO);
                tmpIpMacs.put(ip, mac);
            });
        }
        ipMacs.put(networkId, tmpIpMacs);
    }
    if (ipMacs.size() > 0) {
        print(FORMAT, "Network ID", "IP Address", "MAC Address");
        ipMacs.forEach((k, v) -> v.forEach((ip, mac) -> print(FORMAT, k, ip, mac)));
    } else {
        print("No IP addresses are available or reserved.");
    }
}
Also used : K8sIpamService(org.onosproject.k8snetworking.api.K8sIpamService) Set(java.util.Set) Argument(org.apache.karaf.shell.api.action.Argument) K8sNetworkService(org.onosproject.k8snetworking.api.K8sNetworkService) Maps(com.google.common.collect.Maps) Command(org.apache.karaf.shell.api.action.Command) AbstractShellCommand(org.onosproject.cli.AbstractShellCommand) ZERO(org.onlab.packet.MacAddress.ZERO) K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) Map(java.util.Map) K8sPort(org.onosproject.k8snetworking.api.K8sPort) MacAddress(org.onlab.packet.MacAddress) Option(org.apache.karaf.shell.api.action.Option) IpAddress(org.onlab.packet.IpAddress) K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) K8sNetworkService(org.onosproject.k8snetworking.api.K8sNetworkService) IpAddress(org.onlab.packet.IpAddress) K8sPort(org.onosproject.k8snetworking.api.K8sPort) MacAddress(org.onlab.packet.MacAddress) Map(java.util.Map) K8sIpamService(org.onosproject.k8snetworking.api.K8sIpamService)

Example 3 with K8sNetworkService

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

the class K8sServiceHandler method setStatefulGroupFlowRules.

private void setStatefulGroupFlowRules(DeviceId deviceId, long ctState, long ctMask, Service service, boolean install) {
    List<GroupBucket> buckets = Lists.newArrayList();
    String serviceName = service.getMetadata().getName();
    String serviceIp = service.getSpec().getClusterIP();
    // TODO: multi-ports case should be addressed
    Integer servicePort = service.getSpec().getPorts().get(0).getPort();
    String serviceProtocol = service.getSpec().getPorts().get(0).getProtocol();
    String svcStr = servicePortStr(serviceIp, servicePort, serviceProtocol);
    int groupId = svcStr.hashCode();
    List<Endpoints> endpointses = k8sEndpointsService.endpointses().stream().filter(ep -> serviceName.equals(ep.getMetadata().getName())).collect(Collectors.toList());
    Map<String, String> nodeIpGatewayIpMap = nodeIpGatewayIpMap(k8sNodeService, k8sNetworkService);
    for (Endpoints endpoints : endpointses) {
        for (EndpointSubset endpointSubset : endpoints.getSubsets()) {
            List<EndpointPort> ports = endpointSubset.getPorts().stream().filter(p -> p.getProtocol().equals(TCP)).collect(Collectors.toList());
            for (EndpointAddress address : endpointSubset.getAddresses()) {
                String podIp = nodeIpGatewayIpMap.containsKey(address.getIp()) ? nodeIpGatewayIpMap.get(address.getIp()) : address.getIp();
                NiciraConnTrackTreatmentBuilder connTreatmentBuilder = niciraConnTrackTreatmentBuilder(driverService, deviceId).commit(true).natAction(true).natIp(IpAddress.valueOf(podIp)).natFlag(CT_NAT_DST_FLAG);
                ports.forEach(p -> {
                    ExtensionTreatment ctNatTreatment = connTreatmentBuilder.natPortMin(TpPort.tpPort(p.getPort())).natPortMax(TpPort.tpPort(p.getPort())).build();
                    ExtensionTreatment resubmitTreatment = buildResubmitExtension(deviceService.getDevice(deviceId), ACL_TABLE);
                    TrafficTreatment treatment = DefaultTrafficTreatment.builder().extension(ctNatTreatment, deviceId).extension(resubmitTreatment, deviceId).build();
                    buckets.add(buildGroupBucket(treatment, SELECT, (short) -1));
                });
            }
        }
    }
    if (!buckets.isEmpty()) {
        k8sGroupRuleService.setRule(appId, deviceId, groupId, SELECT, buckets, install);
        setTrackNew(deviceId, ctState, ctMask, IpAddress.valueOf(serviceIp), TpPort.tpPort(servicePort), NAT_TABLE, groupId, PRIORITY_CT_RULE, install);
    }
}
Also used : DeviceService(org.onosproject.net.device.DeviceService) NODE_IP_PREFIX(org.onosproject.k8snetworking.api.Constants.NODE_IP_PREFIX) RulePopulatorUtil.niciraConnTrackTreatmentBuilder(org.onosproject.k8snetworking.util.RulePopulatorUtil.niciraConnTrackTreatmentBuilder) PRIORITY_CIDR_RULE(org.onosproject.k8snetworking.api.Constants.PRIORITY_CIDR_RULE) NiciraConnTrackTreatmentBuilder(org.onosproject.k8snetworking.util.RulePopulatorUtil.NiciraConnTrackTreatmentBuilder) K8sEndpointsEvent(org.onosproject.k8snetworking.api.K8sEndpointsEvent) DriverService(org.onosproject.net.driver.DriverService) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) StorageService(org.onosproject.store.service.StorageService) ROUTING_TABLE(org.onosproject.k8snetworking.api.Constants.ROUTING_TABLE) Map(java.util.Map) ApplicationId(org.onosproject.core.ApplicationId) RulePopulatorUtil.buildResubmitExtension(org.onosproject.k8snetworking.util.RulePopulatorUtil.buildResubmitExtension) NAT_STATEFUL(org.onosproject.k8snetworking.api.Constants.NAT_STATEFUL) SELECT(org.onosproject.net.group.GroupDescription.Type.SELECT) K8sEndpointsListener(org.onosproject.k8snetworking.api.K8sEndpointsListener) PRIORITY_CT_RULE(org.onosproject.k8snetworking.api.Constants.PRIORITY_CT_RULE) Deactivate(org.osgi.service.component.annotations.Deactivate) Set(java.util.Set) EndpointAddress(io.fabric8.kubernetes.api.model.EndpointAddress) PRIORITY_INTER_ROUTING_RULE(org.onosproject.k8snetworking.api.Constants.PRIORITY_INTER_ROUTING_RULE) SERVICE_IP_NAT_MODE(org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_IP_NAT_MODE) TUN_ENTRY_TABLE(org.onosproject.k8snetworking.api.Constants.TUN_ENTRY_TABLE) DeviceId(org.onosproject.net.DeviceId) Dictionary(java.util.Dictionary) Tools(org.onlab.util.Tools) K8sServiceService(org.onosproject.k8snetworking.api.K8sServiceService) ACL_TABLE(org.onosproject.k8snetworking.api.Constants.ACL_TABLE) ComponentContext(org.osgi.service.component.ComponentContext) K8sNetworkingUtil.portNumberByName(org.onosproject.k8snetworking.util.K8sNetworkingUtil.portNumberByName) GROUPING_TABLE(org.onosproject.k8snetworking.api.Constants.GROUPING_TABLE) Component(org.osgi.service.component.annotations.Component) Lists(com.google.common.collect.Lists) TrafficSelector(org.onosproject.net.flow.TrafficSelector) K8sNetworkEvent(org.onosproject.k8snetworking.api.K8sNetworkEvent) K8sNodeEvent(org.onosproject.k8snode.api.K8sNodeEvent) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) K8S_NETWORKING_APP_ID(org.onosproject.k8snetworking.api.Constants.K8S_NETWORKING_APP_ID) TpPort(org.onlab.packet.TpPort) ComponentConfigService(org.onosproject.cfg.ComponentConfigService) Endpoints(io.fabric8.kubernetes.api.model.Endpoints) EndpointSubset(io.fabric8.kubernetes.api.model.EndpointSubset) Pod(io.fabric8.kubernetes.api.model.Pod) RulePopulatorUtil.computeCtMaskFlag(org.onosproject.k8snetworking.util.RulePopulatorUtil.computeCtMaskFlag) SERVICE_IP_NAT_MODE_DEFAULT(org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_IP_NAT_MODE_DEFAULT) IPv4(org.onlab.packet.IPv4) GroupId(org.onosproject.core.GroupId) ExtensionSelector(org.onosproject.net.flow.criteria.ExtensionSelector) B_CLASS(org.onosproject.k8snetworking.api.Constants.B_CLASS) MacAddress(org.onlab.packet.MacAddress) RulePopulatorUtil.buildLoadExtension(org.onosproject.k8snetworking.util.RulePopulatorUtil.buildLoadExtension) K8sNodeService(org.onosproject.k8snode.api.K8sNodeService) LeadershipService(org.onosproject.cluster.LeadershipService) POD_TABLE(org.onosproject.k8snetworking.api.Constants.POD_TABLE) CT_NAT_DST_FLAG(org.onosproject.k8snetworking.util.RulePopulatorUtil.CT_NAT_DST_FLAG) SERVICE_FAKE_MAC_STR(org.onosproject.k8snetworking.api.Constants.SERVICE_FAKE_MAC_STR) CoreService(org.onosproject.core.CoreService) Tools.groupedThreads(org.onlab.util.Tools.groupedThreads) ServicePort(io.fabric8.kubernetes.api.model.ServicePort) K8sNodeListener(org.onosproject.k8snode.api.K8sNodeListener) NAMESPACE_TABLE(org.onosproject.k8snetworking.api.Constants.NAMESPACE_TABLE) K8sNetworkListener(org.onosproject.k8snetworking.api.K8sNetworkListener) NAT_STATELESS(org.onosproject.k8snetworking.api.Constants.NAT_STATELESS) Ethernet(org.onlab.packet.Ethernet) STAT_EGRESS_TABLE(org.onosproject.k8snetworking.api.Constants.STAT_EGRESS_TABLE) A_CLASS(org.onosproject.k8snetworking.api.Constants.A_CLASS) SERVICE_IP_CIDR_DEFAULT(org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_IP_CIDR_DEFAULT) K8sNetworkingUtil.podByIp(org.onosproject.k8snetworking.util.K8sNetworkingUtil.podByIp) K8sPodService(org.onosproject.k8snetworking.api.K8sPodService) K8sServiceEvent(org.onosproject.k8snetworking.api.K8sServiceEvent) NodeId(org.onosproject.cluster.NodeId) SERVICE_CIDR(org.onosproject.k8snetworking.impl.OsgiPropertyConstants.SERVICE_CIDR) DST(org.onosproject.k8snetworking.api.Constants.DST) RulePopulatorUtil.computeCtStateFlag(org.onosproject.k8snetworking.util.RulePopulatorUtil.computeCtStateFlag) K8sFlowRuleService(org.onosproject.k8snetworking.api.K8sFlowRuleService) Executors.newSingleThreadExecutor(java.util.concurrent.Executors.newSingleThreadExecutor) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) ClusterService(org.onosproject.cluster.ClusterService) PRIORITY_NAT_RULE(org.onosproject.k8snetworking.api.Constants.PRIORITY_NAT_RULE) IpPrefix(org.onlab.packet.IpPrefix) SRC(org.onosproject.k8snetworking.api.Constants.SRC) GroupBucket(org.onosproject.net.group.GroupBucket) K8sNetworkService(org.onosproject.k8snetworking.api.K8sNetworkService) K8sNetworkingUtil.getBclassIpPrefixFromCidr(org.onosproject.k8snetworking.util.K8sNetworkingUtil.getBclassIpPrefixFromCidr) K8sServiceListener(org.onosproject.k8snetworking.api.K8sServiceListener) Activate(org.osgi.service.component.annotations.Activate) Service(io.fabric8.kubernetes.api.model.Service) K8sNode(org.onosproject.k8snode.api.K8sNode) ExecutorService(java.util.concurrent.ExecutorService) IpAddress(org.onlab.packet.IpAddress) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment) Logger(org.slf4j.Logger) RulePopulatorUtil(org.onosproject.k8snetworking.util.RulePopulatorUtil) SHIFTED_IP_PREFIX(org.onosproject.k8snetworking.api.Constants.SHIFTED_IP_PREFIX) EndpointPort(io.fabric8.kubernetes.api.model.EndpointPort) NAT_TABLE(org.onosproject.k8snetworking.api.Constants.NAT_TABLE) ExtensionTreatment(org.onosproject.net.flow.instructions.ExtensionTreatment) K8sGroupRuleService(org.onosproject.k8snetworking.api.K8sGroupRuleService) Maps(com.google.common.collect.Maps) SERVICE_TABLE(org.onosproject.k8snetworking.api.Constants.SERVICE_TABLE) K8sNetworkingUtil.nodeIpGatewayIpMap(org.onosproject.k8snetworking.util.K8sNetworkingUtil.nodeIpGatewayIpMap) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) RulePopulatorUtil.buildGroupBucket(org.onosproject.k8snetworking.util.RulePopulatorUtil.buildGroupBucket) K8sEndpointsService(org.onosproject.k8snetworking.api.K8sEndpointsService) SHIFTED_IP_CIDR(org.onosproject.k8snetworking.api.Constants.SHIFTED_IP_CIDR) K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) Modified(org.osgi.service.component.annotations.Modified) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) Reference(org.osgi.service.component.annotations.Reference) EndpointPort(io.fabric8.kubernetes.api.model.EndpointPort) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment) Endpoints(io.fabric8.kubernetes.api.model.Endpoints) NiciraConnTrackTreatmentBuilder(org.onosproject.k8snetworking.util.RulePopulatorUtil.NiciraConnTrackTreatmentBuilder) EndpointSubset(io.fabric8.kubernetes.api.model.EndpointSubset) GroupBucket(org.onosproject.net.group.GroupBucket) RulePopulatorUtil.buildGroupBucket(org.onosproject.k8snetworking.util.RulePopulatorUtil.buildGroupBucket) ExtensionTreatment(org.onosproject.net.flow.instructions.ExtensionTreatment) EndpointAddress(io.fabric8.kubernetes.api.model.EndpointAddress)

Example 4 with K8sNetworkService

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

the class K8sNetworkIdCompleter method complete.

@Override
public int complete(Session session, CommandLine commandLine, List<String> candidates) {
    StringsCompleter delegate = new StringsCompleter();
    K8sNetworkService networkService = get(K8sNetworkService.class);
    Set<String> netNames = networkService.networks().stream().map(K8sNetwork::name).collect(Collectors.toSet());
    SortedSet<String> strings = delegate.getStrings();
    strings.addAll(netNames);
    return delegate.complete(session, commandLine, candidates);
}
Also used : StringsCompleter(org.apache.karaf.shell.support.completers.StringsCompleter) K8sNetworkService(org.onosproject.k8snetworking.api.K8sNetworkService)

Example 5 with K8sNetworkService

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

the class K8sPortListCommand method doExecute.

@Override
protected void doExecute() {
    K8sNetworkService service = get(K8sNetworkService.class);
    List<K8sPort> ports = Lists.newArrayList(service.ports());
    ports.sort(Comparator.comparing(K8sPort::networkId));
    String format = genFormatString(ImmutableList.of(CLI_ID_LENGTH, CLI_NAME_LENGTH, CLI_MAC_ADDRESS_LENGTH, CLI_IP_ADDRESSES_LENGTH));
    if (!Strings.isNullOrEmpty(networkId)) {
        ports.removeIf(port -> !port.networkId().equals(networkId));
    }
    if (outputJson()) {
        print("%s", json(ports));
    } else {
        print(format, "ID", "Network", "MAC Address", "Fixed IPs");
        for (K8sPort port : ports) {
            K8sNetwork k8sNet = service.network(port.networkId());
            print(format, StringUtils.substring(port.portId(), 0, CLI_ID_LENGTH - CLI_MARGIN_LENGTH), k8sNet == null ? "" : StringUtils.substring(k8sNet.name(), 0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH), StringUtils.substring(port.macAddress().toString(), 0, CLI_MAC_ADDRESS_LENGTH - CLI_MARGIN_LENGTH), port.ipAddress() == null ? "" : port.ipAddress());
        }
    }
}
Also used : K8sNetwork(org.onosproject.k8snetworking.api.K8sNetwork) K8sNetworkService(org.onosproject.k8snetworking.api.K8sNetworkService) K8sPort(org.onosproject.k8snetworking.api.K8sPort) K8sNetworkingUtil.genFormatString(org.onosproject.k8snetworking.util.K8sNetworkingUtil.genFormatString)

Aggregations

K8sNetworkService (org.onosproject.k8snetworking.api.K8sNetworkService)7 K8sNetwork (org.onosproject.k8snetworking.api.K8sNetwork)6 Set (java.util.Set)4 Objects (java.util.Objects)3 ExecutorService (java.util.concurrent.ExecutorService)3 Executors.newSingleThreadExecutor (java.util.concurrent.Executors.newSingleThreadExecutor)3 Ethernet (org.onlab.packet.Ethernet)3 IpPrefix (org.onlab.packet.IpPrefix)3 Tools.groupedThreads (org.onlab.util.Tools.groupedThreads)3 ComponentConfigService (org.onosproject.cfg.ComponentConfigService)3 ClusterService (org.onosproject.cluster.ClusterService)3 LeadershipService (org.onosproject.cluster.LeadershipService)3 NodeId (org.onosproject.cluster.NodeId)3 ApplicationId (org.onosproject.core.ApplicationId)3 CoreService (org.onosproject.core.CoreService)3 Maps (com.google.common.collect.Maps)2 Map (java.util.Map)2 IpAddress (org.onlab.packet.IpAddress)2 MacAddress (org.onlab.packet.MacAddress)2 K8S_NETWORKING_APP_ID (org.onosproject.k8snetworking.api.Constants.K8S_NETWORKING_APP_ID)2