/// <summary> /// Adds ReverseProxy's services to Dependency Injection. /// </summary> /// <param name="services">Dependency injection registration.</param> /// <param name="config">Application configuration.</param> /// <returns>The same <see cref="IServiceCollection"/> for chaining.</returns> public static IReverseProxyBuilder AddKubernetesReverseProxy(this IServiceCollection services, IConfiguration config) { if (config is null) { throw new ArgumentNullException(nameof(config)); } // Add components from the kubernetes controller framework services.AddKubernetesControllerRuntime(); // Add components implemented by this application services.AddHostedService <IngressController>(); services.AddSingleton <ICache, IngressCache>(); services.AddTransient <IReconciler, Reconciler>(); services.Configure <YarpOptions>(config.GetSection("Yarp")); var provider = new KubernetesConfigProvider(); services.AddSingleton <IProxyConfigProvider>(provider); services.AddSingleton <IUpdateConfig>(provider); // Register the necessary Kubernetes resource informers services.RegisterResourceInformer <V1Ingress, V1IngressResourceInformer>(); services.RegisterResourceInformer <V1Service, V1ServiceResourceInformer>(); services.RegisterResourceInformer <V1Endpoints, V1EndpointsResourceInformer>(); services.RegisterResourceInformer <V1IngressClass, V1IngressClassResourceInformer>(); return(services.AddReverseProxy()); }
public static IReverseProxyBuilder LoadFromMessages(this IReverseProxyBuilder builder) { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } var provider = new KubernetesConfigProvider(); builder.Services.AddSingleton <IProxyConfigProvider>(provider); builder.Services.AddSingleton <IUpdateConfig>(provider); return(builder); }