Cannot resolve scoped service 'KubeClient.IKubeApiClient' from root provider.
See original GitHub issueExpected Behavior / New Feature
redirect to service in k8s cluster
Actual Behavior / Motivation for New Feature
[19-08-01 11:02:11.11Z INF] requestId: 0HLOMDUGQ7EF3:00000004, previousRequestId: no previous request id, message: EndpointRateLimiting is not enabled for /{everything} <s:Development/Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware> [19-08-01 11:02:11.11Z INF] requestId: 0HLOMDUGQ7EF3:00000004, previousRequestId: no previous request id, message: No authentication needed for /devices/v1/devices <s:Development/Ocelot.Authentication.Middleware.AuthenticationMiddleware> [19-08-01 11:02:11.11Z INF] requestId: 0HLOMDUGQ7EF3:00000004, previousRequestId: no previous request id, message: /{everything} route does not require user to be authorised <s:Development/Ocelot.Authorisation.Middleware.AuthorisationMiddleware> [19-08-01 11:02:11.11Z WRN] requestId: 0HLOMDUGQ7EF3:00000004, previousRequestId: no previous request id, message: unabe to find load balancer for /devices/{everything}|Get| exception is System.InvalidOperationException: Cannot resolve scoped service ‘KubeClient.IKubeApiClient’ from root provider. at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(Type serviceType, IServiceScope scope, IServiceScope rootScope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.Microsoft.Extensions.DependencyInjection.ServiceLookup.IServiceProviderEngineCallback.OnResolve(Type serviceType, IServiceScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider) at Ocelot.Provider.Kubernetes.KubernetesProviderFactory.GetkubeProvider(IServiceProvider provider, ServiceProviderConfiguration config, String name, IOcelotLoggerFactory factory) at Ocelot.ServiceDiscovery.ServiceDiscoveryProviderFactory.GetServiceDiscoveryProvider(ServiceProviderConfiguration config, String key) at Ocelot.ServiceDiscovery.ServiceDiscoveryProviderFactory.Get(ServiceProviderConfiguration serviceConfig, DownstreamReRoute reRoute) at Ocelot.LoadBalancer.LoadBalancers.LoadBalancerFactory.Get(DownstreamReRoute reRoute, ServiceProviderConfiguration config) at Ocelot.LoadBalancer.LoadBalancers.LoadBalancerHouse.Get(DownstreamReRoute reRoute, ServiceProviderConfiguration config) <s:Development/Ocelot.LoadBalancer.Middleware.LoadBalancingMiddleware> [19-08-01 11:02:11.11Z WRN] requestId: 0HLOMDUGQ7EF3:00000004, previousRequestId: no previous request id, message: Error Code: UnableToFindLoadBalancerError Message: unabe to find load balancer for /devices/{everything}|Get| exception is System.InvalidOperationException: Cannot resolve scoped service ‘KubeClient.IKubeApiClient’ from root provider. at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(Type serviceType, IServiceScope scope, IServiceScope rootScope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.Microsoft.Extensions.DependencyInjection.ServiceLookup.IServiceProviderEngineCallback.OnResolve(Type serviceType, IServiceScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider) at Ocelot.Provider.Kubernetes.KubernetesProviderFactory.GetkubeProvider(IServiceProvider provider, ServiceProviderConfiguration config, String name, IOcelotLoggerFactory factory) at Ocelot.ServiceDiscovery.ServiceDiscoveryProviderFactory.GetServiceDiscoveryProvider(ServiceProviderConfiguration config, String key) at Ocelot.ServiceDiscovery.ServiceDiscoveryProviderFactory.Get(ServiceProviderConfiguration serviceConfig, DownstreamReRoute reRoute) at Ocelot.LoadBalancer.LoadBalancers.LoadBalancerFactory.Get(DownstreamReRoute reRoute, ServiceProviderConfiguration config) at Ocelot.LoadBalancer.LoadBalancers.LoadBalancerHouse.Get(DownstreamReRoute reRoute, ServiceProviderConfiguration config) errors found in ResponderMiddleware. Setting error response for request path:/devices/v1/devices, request method: GET <s:Development/Ocelot.Responder.Middleware.ResponderMiddleware>
Steps to Reproduce the Problem
Follow this docs https://ocelot.readthedocs.io/en/latest/features/kubernetes.html
services.AddOcelot(_configuration).AddKubernetes(false); // or true
My service in k8s: devices-api.dev:10010
Config:
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/{everything}",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/devices/{everything}",
"ServiceName": "devices-api.dev",
"UpstreamHttpMethod": [ "Get" ]
}
],
"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Namespace": "dev",
"Type": "kube"
}
}
}
Specifications
- Version: Ocelot 13.5.2, Ocelot.Provider.Kubernetes 13.5.2
- Platform: Docker
- Subsystem: ASP.NET Core that runs in docker container in k8s cluster
Issue Analytics
- State:
- Created 4 years ago
- Comments:15 (1 by maintainers)
@neetra no, I just don’t use it. I run Ocelot in kubernetes but without
AddKubernetes
Nope. Works just fine. Its without setting it to false in runtime that we get an issue…