示例#1
0
        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);
             */
        }
示例#2
0
 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));
 }
示例#3
0
        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;
        }
示例#4
0
        /// <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());
                    });
                });
            });
        }