Ocelot: Cannot resolve scoped service 'KubeClient.IKubeApiClient' from root provider.

Expected 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

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Comments: 15 (1 by maintainers)

Most upvoted comments

@neetra no, I just don’t use it. I run Ocelot in kubernetes but without AddKubernetes