private async Task LoadFromIngress(IReverseProxyConfigManager proxyManager) { var config = KubernetesClientConfiguration.BuildConfigFromConfigFile(); var backendsRepo = new InMemoryBackendsRepo(); var routesRepo = new InMemoryRoutesRepo() var client = new Kubernetes(config); //inject this? var ingress = await client.ListIngressForAllNamespacesWithHttpMessagesAsync(watch : true); using (ingress.Watch <Extensionsv1beta1Ingress, Extensionsv1beta1IngressList>((type, item) => { Console.WriteLine(type); Console.WriteLine(item.Metadata.Name); })){ var ctrlc = new ManualResetEventSlim(false); Console.CancelKeyPress += (sender, eventArgs) => ctrlc.Set(); ctrlc.Wait(); } /* * await backendsRepo.SetBackendsAsync(config.Backends, CancellationToken.None); * await routesRepo.SetRoutesAsync(config.Routes, CancellationToken.None); * * var errorReporter = new LoggerConfigErrorReporter(_logger); * await _proxyManager.ApplyConfigurationsAsync(errorReporter, CancellationToken.None); */ }
public ProxyConfigLoader( ILogger <ProxyConfigLoader> logger, IClustersRepo clustersRepo, IRoutesRepo routesRepo, IReverseProxyConfigManager proxyManager, IOptionsMonitor <ProxyConfigOptions> proxyConfig) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _clustersRepo = clustersRepo ?? throw new ArgumentNullException(nameof(clustersRepo)); _routesRepo = routesRepo ?? throw new ArgumentNullException(nameof(routesRepo)); _proxyManager = proxyManager ?? throw new ArgumentNullException(nameof(proxyManager)); _proxyConfig = proxyConfig ?? throw new ArgumentNullException(nameof(proxyConfig)); }
public ProxyConfigLoader( ILogger <ProxyConfigLoader> logger, IBackendsRepo backendsRepo, IRoutesRepo routesRepo, IReverseProxyConfigManager proxyManager, IOptionsMonitor <ProxyConfigOptions> proxyConfig) { Contracts.CheckValue(logger, nameof(logger)); Contracts.CheckValue(backendsRepo, nameof(backendsRepo)); Contracts.CheckValue(routesRepo, nameof(routesRepo)); Contracts.CheckValue(proxyManager, nameof(proxyManager)); Contracts.CheckValue(proxyConfig, nameof(proxyConfig)); _logger = logger; _backendsRepo = backendsRepo; _routesRepo = routesRepo; _proxyManager = proxyManager; _proxyConfig = proxyConfig; }
/// <summary> /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. /// </summary> public void Configure(IApplicationBuilder app, IReverseProxyConfigManager proxyManager) { app.UseHttpsRedirection(); LoadFromIngress(proxyManager).Wait(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapReverseProxy(proxyPipeline => { proxyPipeline.UseProxyLoadBalancing(); // Customize the request before forwarding proxyPipeline.Use((context, next) => { var connection = context.Connection; context.Request.Headers.AppendCommaSeparatedValues("X-Forwarded-For", new IPEndPoint(connection.RemoteIpAddress, connection.RemotePort).ToString()); return(next()); }); }); }); }