1. 程式人生 > >【譯】Introducing YARP Preview 1

【譯】Introducing YARP Preview 1

1 YARP

    YARP是一個專案,用於建立反向代理伺服器。它開始於我們注意到來自微軟內部團隊的一系列問題。他們要麼為其服務構建反向代理,要麼詢問 API 和用於構建 API 的技術。因此我們決定讓他們聚在一起開發一個通用解決方案,該解決方案形成了YARP。

    YARP是一個反向代理工具包,用於使用 ASP.NET 和 .NET 中的基礎設施在 .NET 中構建代理伺服器。YARP 的主要區別是,它被設計為易於自定義和調整,以滿足不同方案的特定需求。YARP 插入ASP.NET管道以處理傳入請求,然後它擁有自己的子管道,用於執行將請求代理到後端伺服器的步驟。客戶可以新增其他module,或根據需要更換常備module。

    隨著其開發已基本到位,我們製作了 YARP 的第一個正式版本(Preview 1),以便更好地協作並獲得反饋。

2 Preview 1 是什麼

    • 核心代理的基礎結構
    • 基於配置的路由定義
    • 擴充套件性的管道模型
    • Forwarded標頭(硬編碼)
    • 目標 .NET Core 3.1 和 .NET Core 5

3 Preview 1 不包括

    • 會話親和性(又稱會話保持)
    • Forwarded標頭(可配置)
    • 基於程式碼的路由定義和預請求路由
    • 指標和日誌
    • 效能調整
    • 連線篩選

4 快速開始

Step 01 下載.net framework

    YARP 適用於 .NET Core 3.1 或 .NET 5 Preview 4(或更高版本)。

Step 02 建立一個ASP.NET Core專案

Step 03 開啟專案,新增引用,確保其包含

<PropertyGroup>
    <TargetFramework>netcoreapp5.0</TargetFramework>
</PropertyGroup>

  和

<ItemGroup>
    <PackageReference Include="Microsoft.ReverseProxy" Version="1.0.0-preview.1.*" />
</ItemGroup>

Step 04 Startup.cs

  YARP 當前使用配置檔案來定義代理的路由和終結點。在ConfigureServices方法中載入。

public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddReverseProxy()
        .LoadFromConfig(Configuration.GetSection("ReverseProxy"));
}

  Configure方法定義ASP.NET的請求處理管道。反向代理插入到ASP.NET的終結點路由,然後具有其自己的代理子管道。在這裡,可以新增代理管道模組(如負載均衡)來自定義請求的處理。

/// <summary>
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
/// </summary>
public void Configure(IApplicationBuilder app)
{
    app.UseHttpsRedirection();

    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapReverseProxy(proxyPipeline =>
        {
            proxyPipeline.UseProxyLoadBalancing();
        });
    });
}

Step 05 配置

  YARP 的配置定義在appsettings.json中:

"ReverseProxy": {
    "Routes": [
      {
        "RouteId": "app1",
        "BackendId": "backend1",
        "Match": {
          "Methods": [ "GET", "POST" ],
          "Host": "localhost",
          "Path": "/app1/"
        }
      },
      {
        "RouteId": "route2",
        "BackendId": "backend2",
        "Match": {
          "Host": "localhost"
        }
      }
    ],
    "Backends": {
      "backend1": {
        "LoadBalancing": {
          "Mode": "Random"
        },
        "Destinations": {
          "backend1_destination1": {
            "Address": "https://example.com:10000/"
          },
          "backend1_destination2": {
            "Address": "http://example.com:10001/"
          }
        }
      },
      "backend2": {
        "Destinations": {
          "backend2_destination1": {
            "Address": "https://example.com:10002/"
          }
        }
      }
    }
  }
    • Backends:請求可以路由到的伺服器群集。
    • Destinations:是用於指標、日誌記錄和會話保持的識別符號。
    • Address:URL字首(基地址)
    • Routes:根據請求的各個方面(如主機名、路徑、方法、請求標頭等)將傳入請求對映到後端群集。路由是有序的,因此,需要首先定義 app1 路由,因為 route2 將作為尚未匹配的所有路徑的 catchall。

  好啦,先介紹到這裡。

原文連結

  https://devblogs.microsoft.com/dotnet/introducing-yarp-preview-1/?utm_source=vs_developer_news&utm_medium=referral

&n