Exemplo n.º 1
0
    /// <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);
    }