io.fabric8.kubernetes.api.model.EndpointSubset#io.fabric8.kubernetes.api.model.EndpointPort源码实例Demo

下面列出了io.fabric8.kubernetes.api.model.EndpointSubset#io.fabric8.kubernetes.api.model.EndpointPort 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

private EndpointPort findEndpointPort(EndpointSubset s) {
	List<EndpointPort> ports = s.getPorts();
	EndpointPort endpointPort;
	if (ports.size() == 1) {
		endpointPort = ports.get(0);
	}
	else {
		Predicate<EndpointPort> portPredicate;
		if (!StringUtils.isEmpty(properties.getPrimaryPortName())) {
			portPredicate = port -> properties.getPrimaryPortName()
					.equalsIgnoreCase(port.getName());
		}
		else {
			portPredicate = port -> true;
		}
		endpointPort = ports.stream().filter(portPredicate).findAny()
				.orElseThrow(IllegalStateException::new);
	}
	return endpointPort;
}
 
private KubernetesServiceInstance assertServiceInstance(boolean secure) {
	EndpointAddress address = new EndpointAddress();
	address.setIp("1.2.3.4");
	EndpointPort port = new EndpointPort();
	port.setPort(8080);
	KubernetesServiceInstance instance = new KubernetesServiceInstance("123",
			"myservice", address, port, Collections.emptyMap(), secure);

	assertThat(instance.getInstanceId()).isEqualTo("123");
	assertThat(instance.getServiceId()).isEqualTo("myservice");
	assertThat(instance.getHost()).isEqualTo("1.2.3.4");
	assertThat(instance.getPort()).isEqualTo(8080);
	assertThat(instance.isSecure()).isEqualTo(secure);
	assertThat(instance.getScheme()).isEqualTo(secure ? "https" : "http");
	return instance;
}
 
public KubernetesServiceInstance(String instanceId, String serviceId,
		EndpointAddress endpointAddress, EndpointPort endpointPort,
		Map<String, String> metadata, Boolean secure) {
	this.instanceId = instanceId;
	this.serviceId = serviceId;
	this.endpointAddress = endpointAddress;
	this.endpointPort = endpointPort;
	this.metadata = metadata;
	this.secure = secure;
}
 
private List<EndpointPort> getEndpointPorts(Map<Integer, String> ports) {
	return ports.entrySet().stream().map(e -> {
		EndpointPortBuilder endpointPortBuilder = new EndpointPortBuilder();
		endpointPortBuilder.withPort(e.getKey());
		if (!Strings.isNullOrEmpty(e.getValue())) {
			endpointPortBuilder.withName(e.getValue());
		}
		return endpointPortBuilder.build();
	}).collect(toList());
}
 
private List<ServiceInstance> getNamespaceServiceInstances(EndpointSubsetNS es,
		String serviceId) {
	String namespace = es.getNamespace();
	List<EndpointSubset> subsets = es.getEndpointSubset();
	List<ServiceInstance> instances = new ArrayList<>();
	if (!subsets.isEmpty()) {
		final Service service = this.client.services().inNamespace(namespace)
				.withName(serviceId).get();
		final Map<String, String> serviceMetadata = this.getServiceMetadata(service);
		KubernetesDiscoveryProperties.Metadata metadataProps = this.properties
				.getMetadata();

		for (EndpointSubset s : subsets) {
			// Extend the service metadata map with per-endpoint port information (if
			// requested)
			Map<String, String> endpointMetadata = new HashMap<>(serviceMetadata);
			if (metadataProps.isAddPorts()) {
				Map<String, String> ports = s.getPorts().stream()
						.filter(port -> !StringUtils.isEmpty(port.getName()))
						.collect(toMap(EndpointPort::getName,
								port -> Integer.toString(port.getPort())));
				Map<String, String> portMetadata = getMapWithPrefixedKeys(ports,
						metadataProps.getPortsPrefix());
				if (log.isDebugEnabled()) {
					log.debug("Adding port metadata: " + portMetadata);
				}
				endpointMetadata.putAll(portMetadata);
			}

			List<EndpointAddress> addresses = s.getAddresses();
			for (EndpointAddress endpointAddress : addresses) {
				String instanceId = null;
				if (endpointAddress.getTargetRef() != null) {
					instanceId = endpointAddress.getTargetRef().getUid();
				}

				EndpointPort endpointPort = findEndpointPort(s);
				instances.add(new KubernetesServiceInstance(instanceId, serviceId,
						endpointAddress, endpointPort, endpointMetadata,
						this.isServicePortSecureResolver
								.resolve(new DefaultIsServicePortSecureResolver.Input(
										endpointPort.getPort(),
										service.getMetadata().getName(),
										service.getMetadata().getLabels(),
										service.getMetadata().getAnnotations()))));
			}
		}
	}

	return instances;
}
 
public KubernetesServiceInstance(String serviceId, EndpointAddress endpointAddress, EndpointPort endpointPort, Boolean secure) {
    this.serviceId = serviceId;
    this.endpointAddress = endpointAddress;
    this.endpointPort = endpointPort;
    this.secure = secure;
}
 
源代码7 项目: onos   文件: K8sServiceHandler.java
/**
 * Obtains the service port to endpoint address paired map.
 *
 * @param service   kubernetes service
 * @return a map where key is kubernetes service port, and value is the
 * endpoint addresses that are associated with the service port
 */
private Map<ServicePort, Set<String>> getSportEpAddressMap(Service service) {

    Map<ServicePort, Set<String>> map = Maps.newConcurrentMap();

    String serviceName = service.getMetadata().getName();
    List<Endpoints> endpointses = k8sEndpointsService.endpointses()
            .stream()
            .filter(ep -> serviceName.equals(ep.getMetadata().getName()))
            .collect(Collectors.toList());

    service.getSpec().getPorts().stream()
            .filter(Objects::nonNull)
            .filter(sp -> sp.getTargetPort() != null)
            .filter(sp -> sp.getTargetPort().getIntVal() != null ||
                    sp.getTargetPort().getStrVal() != null)
            .forEach(sp -> {
                Integer targetPortInt = sp.getTargetPort().getIntVal() != null ?
                        sp.getTargetPort().getIntVal() : 0;
                String targetPortName = sp.getTargetPort().getStrVal() != null ?
                        sp.getTargetPort().getStrVal() : "";
                String targetProtocol = sp.getProtocol();

                for (Endpoints endpoints : endpointses) {
                    for (EndpointSubset endpointSubset : endpoints.getSubsets()) {

                        // in case service port name is specified but not port number
                        // we will lookup the container port number and use it
                        // as the target port number
                        if (!targetPortName.equals("") && targetPortInt == 0) {
                            for (EndpointAddress addr : endpointSubset.getAddresses()) {
                                Pod pod = podByIp(k8sPodService, addr.getIp());
                                targetPortInt = portNumberByName(pod, targetPortName);
                            }
                        }

                        if (targetPortInt == 0) {
                            continue;
                        }

                        for (EndpointPort endpointPort : endpointSubset.getPorts()) {
                            if (targetProtocol.equals(endpointPort.getProtocol()) &&
                                    (targetPortInt.equals(endpointPort.getPort()) ||
                                            targetPortName.equals(endpointPort.getName()))) {
                                Set<String> addresses = endpointSubset.getAddresses()
                                        .stream().map(EndpointAddress::getIp)
                                        .collect(Collectors.toSet());
                                map.put(sp, addresses);
                            }
                        }
                    }
                }
            });

    return map;
}
 
源代码8 项目: onos   文件: K8sServiceHandler.java
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);
    }
}
 
/**
 * @param serviceId the id of the service.
 * @param endpointAddress the address where the service instance can be found.
 * @param endpointPort the port on which the service is running.
 * @param metadata a map containing metadata.
 * @param secure indicates whether or not the connection needs to be secure.
 * @deprecated - use other constructor
 */
@Deprecated
public KubernetesServiceInstance(String serviceId, EndpointAddress endpointAddress,
		EndpointPort endpointPort, Map<String, String> metadata, Boolean secure) {
	this(null, serviceId, endpointAddress, endpointPort, metadata, secure);
}