in src/routingmanager/RoutingManagerApp.cs [518:582]
private async Task<(V1Probe, V1Probe)> GetHttpProbesForServiceNamesAsync(
string resourceType,
string resourceName,
IEnumerable<V1Service> allServices,
IEnumerable<V1Pod> allPods,
IEnumerable<string> serviceNames,
CancellationToken cancellationToken)
{
var servicesUnderIngressRoute = new List<V1Service>();
V1Probe httpReadinessProbe = null;
V1Probe httpLivenessProbe = null;
await serviceNames.ExecuteForEachAsync(serviceName =>
{
cancellationToken.ThrowIfCancellationRequested();
V1Service retrievedService = allServices.FirstOrDefault(svc => StringComparer.OrdinalIgnoreCase.Equals(svc.Metadata.Name, serviceName));
if (retrievedService != null)
{
servicesUnderIngressRoute.Add(retrievedService);
}
return Task.CompletedTask;
});
foreach (var service in servicesUnderIngressRoute)
{
cancellationToken.ThrowIfCancellationRequested();
V1Pod selectedPod = null;
// For all runs after the first one, we need to rely on the original service selector annotation because we modify the user's service's label selectors
if (service.Metadata.Annotations?.ContainsKey(Constants.OriginalServiceSelectorAnnotation) == true)
{
selectedPod = allPods.FirstOrDefault(pod => IsMatchSelectorsWithLabels(service.Metadata.GetOriginalServiceSelectors(), pod.Metadata.Labels));
}
else
{
selectedPod = allPods.FirstOrDefault(pod => IsMatchSelectorsWithLabels(service.Spec.Selector, pod.Metadata.Labels));
}
if (selectedPod == null)
{
continue;
}
var firstContainerInPod = selectedPod.Spec.Containers.FirstOrDefault();
httpLivenessProbe = firstContainerInPod?.LivenessProbe;
httpReadinessProbe = firstContainerInPod?.ReadinessProbe;
if (httpLivenessProbe != null && httpLivenessProbe != null)
{
_log.Info("Extracted probes for envoy pod under the '{0}' '{1}'", resourceType, new PII(resourceName));
if (httpLivenessProbe?.HttpGet?.Port?.Value != null
&& !int.TryParse(httpLivenessProbe.HttpGet.Port.Value, out _))
{
httpLivenessProbe.HttpGet.Port = GetIntValueOfNamedPortFromContainer(firstContainerInPod, httpLivenessProbe.HttpGet.Port.Value);
}
if (httpReadinessProbe?.HttpGet?.Port?.Value != null
&& !int.TryParse(httpReadinessProbe.HttpGet.Port.Value, out _))
{
httpReadinessProbe.HttpGet.Port = GetIntValueOfNamedPortFromContainer(firstContainerInPod, httpReadinessProbe.HttpGet.Port.Value);
}
break;
}
}
return (httpLivenessProbe, httpReadinessProbe);
}