in shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/parser/DivideIngressParser.java [290:328]
private List<DivideUpstream> parseUpstream(final V1IngressBackend backend, final String namespace, final Map<String, String> annotations) {
List<DivideUpstream> upstreamList = new ArrayList<>();
if (Objects.nonNull(backend) && Objects.nonNull(backend.getService()) && Objects.nonNull(backend.getService().getName())) {
String serviceName = backend.getService().getName();
// shenyu routes directly to the container
V1Endpoints v1Endpoints = endpointsLister.namespace(namespace).get(serviceName);
List<V1EndpointSubset> subsets = v1Endpoints.getSubsets();
String[] protocol = null;
if (Objects.nonNull(annotations) && annotations.containsKey(IngressConstants.UPSTREAMS_PROTOCOL_ANNOTATION_KEY)) {
protocol = annotations.get(IngressConstants.UPSTREAMS_PROTOCOL_ANNOTATION_KEY).split(",");
}
if (Objects.isNull(subsets) || CollectionUtils.isEmpty(subsets)) {
LOG.info("Endpoints {} do not have subsets", serviceName);
} else {
for (V1EndpointSubset subset : subsets) {
List<V1EndpointAddress> addresses = subset.getAddresses();
if (Objects.isNull(addresses) || addresses.isEmpty()) {
continue;
}
int i = 0;
for (V1EndpointAddress address : addresses) {
String upstreamIp = address.getIp();
String defaultPort = parsePort(backend.getService());
if (Objects.nonNull(defaultPort)) {
DivideUpstream upstream = new DivideUpstream();
upstream.setUpstreamUrl(upstreamIp + ":" + defaultPort);
upstream.setWeight(100);
upstream.setProtocol(Objects.isNull(protocol) ? "http://" : protocol[i++]);
upstream.setWarmup(0);
upstream.setStatus(true);
upstream.setUpstreamHost("");
upstreamList.add(upstream);
}
}
}
}
}
return upstreamList;
}