Megosztás a következőn keresztül:


.NET .NET Aspire belső hurok hálózatkezelésének áttekintése

A .NET.NET Aspire fejlesztés egyik előnye, hogy lehetővé teszi a natív felhőbeli alkalmazások helyi fejlesztését, tesztelését és hibakeresését. A belső hurkos hálózatkezelés a .NET.NET Aspire kulcsfontosságú eleme, amely lehetővé teszi az alkalmazások számára, hogy kommunikáljanak egymással a fejlesztési környezetben. Ebből a cikkből megtudhatja, hogyan kezeli a .NET.NET Aspire különböző hálózati forgatókönyveket proxykkal, végpontokkal, végpontkonfigurációkkal és indítási profilokkal.

Hálózatépítés a belső hurokban

A belső hurok az alkalmazás helyi fejlesztésének és tesztelésének folyamata, mielőtt üzembe helyeznénk egy célkörnyezetben. .NET .NET Aspire számos eszközt és funkciót kínál a belső hurok hálózatkezelési élményének egyszerűsítéséhez és javításához, például:

  • Profilok indítása: Az indítási profilok olyan konfigurációs fájlok, amelyek meghatározzák az alkalmazás helyi futtatásának módját. Az alkalmazás végpontjainak, környezeti változóinak és indítási beállításainak meghatározásához indítási profilokat (például launchSettings.json fájlt) használhat.
  • Kestrel-konfiguráció: A Kestrel-konfiguráció lehetővé teszi a Kestrel-webkiszolgáló által figyelt végpontok megadását. Az alkalmazásbeállításokban konfigurálhatja a Kestrel-végpontokat, és .NET.NET Aspire automatikusan ezeket a beállításokat használja végpontok létrehozásához.
  • végpontok/végpontkonfigurációk: A végpontok az alkalmazás és az attól függő szolgáltatások, például adatbázisok, üzenetsorok vagy API-k közötti kapcsolatok. A végpontok olyan információkat nyújtanak, mint a szolgáltatásnév, a gazdagépport, a séma és a környezeti változó. A végpontokat implicit módon (indítási profilokon keresztül) vagy explicit módon is hozzáadhatja az alkalmazáshoz WithEndpointmeghívásával.
  • Proxyk: .NET.NET Aspire automatikusan elindít egy proxyt az alkalmazáshoz hozzáadott minden szolgáltatási kötéshez, és hozzárendel egy portot a proxyhoz, amelyre figyelhet. A proxy ezután továbbítja a kéréseket arra a portra, amelyre az alkalmazás figyel, ami eltérhet a proxyporttól. Így elkerülheti a portütközéseket, és konzisztens és kiszámítható URL-címekkel érheti el az alkalmazást és a szolgáltatásokat.

A végpontok működése

A .NET.NET Aspire szolgáltatáskötése két integrációt foglal magában: egy szolgáltatás egy külső erőforrást jelöl, amelyet az alkalmazás igényel (például egy adatbázist, üzenetsort vagy API-t), valamint egy kötési, amely kapcsolatot hoz létre az alkalmazás és a szolgáltatás között, és biztosítja a szükséges információkat.

.NET .NET Aspire két szolgáltatáskötési típust támogat: implicit, automatikusan létrejön a különböző környezetekben az alkalmazás viselkedését meghatározó meghatározott indítási profilok alapján, és explicit, amelyeket manuálisan hoztak létre a WithEndpointhasználatával.

Kötés létrehozásakor , akár implicit, akár explicit, .NET.NET Aspire elindít egy egyszerűsített fordított proxyt egy adott porton, amely kezeli az alkalmazástól a szolgáltatáshoz érkező kérések útválasztását és terheléselosztását. A proxy egy .NET.NET Aspire megvalósítási részlet, amely nem igényel konfigurációt vagy felügyeleti problémát.

A végpontok működésének szemléltetéséhez tekintse meg az .NET.NET Aspire kezdősablonok belső hurkos hálózatkezelési diagramját:

.NET.NET Aspire Starter Application-sablon belső hurkos hálózatkezelési diagramja.

Profilok indítása

Amikor meghívja AddProject-t, az alkalmazás gazdagépe a Tulajdonságok/launchSettings.json-at keresi az alapértelmezett végpontkészlet meghatározásához. Az alkalmazás gazda az alábbi szabályok alapján választ ki egy adott indítási profilt:

  1. Explicit launchProfileName argumentum lett átadva AddProjecthívásakor.
  2. A DOTNET_LAUNCH_PROFILE környezeti változó. További információ: .NET környezeti változók.
  3. Az első indítási profil a launchSettings.json-ban van definiálva.

Vegye figyelembe a következő launchSettings.json fájlt:

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
      "applicationUrl": "https://localhost:7239;http://localhost:5066",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

A cikk további részében képzeljük el, hogy létrehozott egy IDistributedApplicationBuilder-t, amely hozzá van rendelve a builder nevű változóhoz a CreateBuilder() API-val.

var builder = DistributedApplication.CreateBuilder(args);

A http és https indítási profilok megadásához konfigurálja a applicationUrl értékeket mindkettőben a launchSettings.json fájlban. Ezek az URL-címek végpontok létrehozására szolgálnak ehhez a projekthez. Ez a következő egyenértékű:

builder.AddProject<Projects.Networking_Frontend>("frontend")
       .WithHttpEndpoint(port: 5066)
       .WithHttpsEndpoint(port: 7239);

Fontos

Ha nincs launchSettings.json (vagy indítási profil), nincsenek kötődések alapértelmezésként.

További információ: .NET.NET Aspire és profilok indítása.

Kestrel által konfigurált végpontok

.NET .NET Aspire támogatja a Kestrel végpontkonfigurációját. Fontolja meg például egy olyan projekt appsettings.json fájljának használatát, amely egy Kestrel-végpontot definiál a HTTPS-sémával és az 5271-s porttal:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://*:5271"
      }
    }
  }
}

Az előző konfiguráció egy Https végpontot határoz meg. A Url tulajdonság értéke https://*:5271, ami azt jelenti, hogy a végpont a 5271-es porton minden interfészen figyel. További információ: Végpontok konfigurálása a ASP.NET Core Kestrel-webkiszolgáló.

Ha a Kestrel-végpont konfigurálva van, a projektnek el kell távolítania a konfigurált applicationUrl a launchSettings.json fájlból.

Jegyzet

Ha a applicationUrl megtalálható a launchSettings.json fájlban, és a Kestrel-végpont konfigurálva van, az alkalmazásgazda kivételt fog eredményezni.

Projekterőforrás hozzáadásakor van egy túlterhelési lehetőség, amely lehetővé teszi, hogy a Kestrel-végpont legyen használva a launchSettings.json fájl helyett:

builder.AddProject<Projects.Networking_ApiService>(
    name: "apiservice",
    configure: static project =>
    {
        project.ExcludeLaunchProfile = true;
        project.ExcludeKestrelEndpoints = false;
    })
    .WithHttpsEndpoint();

További információ: AddProject.

Portok és proxyk

Szolgáltatáskötés definiálásakor a gazdaport mindig a szolgáltatás előtt ülő proxynak. Ez lehetővé teszi, hogy egy szolgáltatás egy vagy több replikája hasonlóan viselkedjen. Emellett az WithReference API-t használó összes erőforrásfüggőség a környezeti változó proxyvégpontjára támaszkodik.

Vegye figyelembe a következő metódusláncot, amely meghívja AddProject, WithHttpEndpoint, majd WithReplicas:

builder.AddProject<Projects.Networking_Frontend>("frontend")
       .WithHttpEndpoint(port: 5066)
       .WithReplicas(2);

Az előző kód a következő hálózati diagramot eredményezi:

.NET.NET Aspire előtérbeli alkalmazás hálózati diagramja adott gazdagépporttal és két replikával.

Az előző diagram a következőket ábrázolja:

  • Egy webböngésző az alkalmazás belépési pontjaként.
  • 5066-os gazdagép port.
  • A böngésző és az előtérbeli szolgáltatás replikái között ülő előtérproxy az 5066-os portot figyeli.
  • A frontend_0 előtérbeli szolgáltatásreplika figyeli a véletlenszerűen hozzárendelt 65001-s portot.
  • A frontend_1 előtérbeli szolgáltatásreplika figyeli a véletlenszerűen hozzárendelt 65002-s portot.

A WithReplicashívása nélkül csak egy front-end szolgáltatás létezik. A proxy továbbra is az 5066-os porton figyel, de az előtérbeli szolgáltatás egy véletlenszerű porton figyel:

builder.AddProject<Projects.Networking_Frontend>("frontend")
       .WithHttpEndpoint(port: 5066);

Két port van definiálva:

  • 5066-os gazdagép port.
  • Egy véletlenszerű proxyport, amelyhez a mögöttes szolgáltatás hozzá lesz kötve.

.NET.NET Aspire előtérbeli alkalmazás hálózati diagramja adott gazdagépporttal és véletlenszerű porttal.

Az előző diagram a következőket ábrázolja:

  • Egy webböngésző az alkalmazás belépési pontjaként.
  • 5066-os gazdagép port.
  • A böngésző és az előtérbeli szolgáltatás között ülő előtérproxy, amely az 5066-os portot figyeli.
  • Az előtérbeli szolgáltatás figyeli a 65001 véletlenszerű portot.

A szolgáltatás számára ezt a portot a ASPNETCORE_URLS-on keresztül biztosítják a projekterőforrások. Más erőforrások hozzáférése ehhez a porthoz egy környezeti változó megadásával a szolgáltatáskötésen:

builder.AddNpmApp("frontend", "../NodeFrontend", "watch")
       .WithHttpEndpoint(port: 5067, env: "PORT");

Az előző kód elérhetővé teszi a véletlenszerű portot a PORT környezeti változóban. Az alkalmazás ezzel a porttal figyeli a proxy bejövő kapcsolatait. Fontolja meg a következő diagramot:

.NET.NET Aspire kliensoldali alkalmazás hálózati diagramja adott gazdagépporttal és környezeti változó porttal.

Az előző diagram a következőket ábrázolja:

  • Egy webböngésző az alkalmazás belépési pontjaként.
  • Egy 5067-es gazdagépport.
  • A böngésző és az előtérbeli szolgáltatás között ülő előtérproxy, amely az 5067-ös portot figyeli.
  • A frontend szolgáltatás a 65001-es portot figyeli.

Borravaló

A végpont proxiálásának elkerülése érdekében állítsa a IsProxied tulajdonságot false a WithEndpoint kiterjesztési metódusának meghívásakor. További információ: Végpontbővítmények: további szempontok.

A gazdagépport kihagyása

Ha kihagyja a gazdagépportot, .NET.NET Aspire véletlenszerű portot hoz létre mind a gazdagép, mind a szolgáltatásport számára. Ez akkor hasznos, ha el szeretné kerülni a portütközéseket, és nem érdekli a gazdagép vagy a szolgáltatási port. Vegye figyelembe a következő kódot:

builder.AddProject<Projects.Networking_Frontend>("frontend")
       .WithHttpEndpoint();

Ebben a forgatókönyvben mind a gazdagép, mind a szolgáltatás portjai véletlenszerűek, ahogy az alábbi ábrán is látható.

.NET.NET Aspire előtérbeli alkalmazás hálózatkezelési diagramja véletlenszerű gazdagépporttal és proxyporttal.

Az előző diagram a következőket ábrázolja:

  • Egy webböngésző az alkalmazás belépési pontjaként.
  • Egy véletlenszerű gazdaport, 65000.
  • A böngésző és az előtérbeli szolgáltatás között ülő előtérproxy, amely a 65000-s portot figyeli.
  • Az előtérbeli szolgáltatás 65001 véletlenszerű porton figyel.

Tárolóportok

Tárolóerőforrás hozzáadásakor .NET.NET Aspire automatikusan hozzárendel egy véletlenszerű portot a tárolóhoz. Tárolóport megadásához konfigurálja a tárolóerőforrást a kívánt porttal:

builder.AddContainer("frontend", "mcr.microsoft.com/dotnet/samples", "aspnetapp")
       .WithHttpEndpoint(port: 8000, targetPort: 8080);

Az előző kód:

  • Létrehoz egy frontendnevű tárolóerőforrást a mcr.microsoft.com/dotnet/samples:aspnetapp lemezképből.
  • Egy http végpontot tesz elérhetővé, ha a gazdagépet a 8000-s porthoz köti, és megfelelteti a tároló 8080-ra.

Fontolja meg a következő diagramot:

.NET.NET Aspire előtérbeli alkalmazás hálózati diagramja docker-gazdagéppel.

Végpontkiterjesztési módszerek

A IResourceWithEndpoints interfészt megvalósító összes erőforrás használhatja a WithEndpoint bővítménymetelyeket. Ennek a bővítménynek több túlterhelésű verziója is van, amelyek lehetővé teszik, hogy megadja a sémát, a konténers portot, a gazdagépportot, a környezeti változó nevét, valamint azt, hogy a végpont proxy-n keresztül elérhető-e.

Van egy túlterhelés is, amely lehetővé teszi egy delegált megadását a végpont konfigurálásához. Ez akkor hasznos, ha a végpontot a környezet vagy más tényezők alapján kell konfigurálni. Vegye figyelembe a következő kódot:

builder.AddProject<Projects.Networking_ApiService>("apiService")
       .WithEndpoint(
            endpointName: "admin",
            callback: static endpoint =>
       {
           endpoint.Port = 17003;
           endpoint.UriScheme = "http";
           endpoint.Transport = "http";
       });

Az előző kód egy visszahívási meghatalmazottat biztosít a végpont konfigurálásához. A végpont neve admin, és a http séma és átvitel, valamint az 17003-as gazdagépport használatára van konfigurálva. A fogyasztó név szerint hivatkozik erre a végpontra, vegye figyelembe a következő AddHttpClient hívást:

builder.Services.AddHttpClient<WeatherApiClient>(
    client => client.BaseAddress = new Uri("http://_admin.apiservice"));

A Uri a admin sentinel előtaggal ellátott _ végpontnév használatával jön létre. Ez a konvenció azt jelzi, hogy a admin szegmens a apiservice szolgáltatáshoz tartozó végpontnév. További információért lásd: .NET.NET Aspire szolgáltatásfelderítés.

További szempontok

A WithEndpoint bővítmény metódus meghívásakor a callback túlterhelése elérhetővé teszi a nyers EndpointAnnotation, amely lehetővé teszi a fogyasztó számára a végpont számos aspektusának testreszabását.

A AllocatedEndpoint tulajdonság lehetővé teszi a szolgáltatás végpontjának lekérését vagy beállítását. A IsExternal és a IsProxied tulajdonságai határozzák meg a végpont kezelését és a közzétételt: IsExternal dönti el, hogy nyilvánosan elérhető-e, míg IsProxied biztosítja a DCP kezelését, lehetővé téve a belső portkülönbségeket és replikációt.

Borravaló

Ha olyan külső végrehajtható fájlt üzemeltet, amely a saját proxyját futtatja, és portkötési problémákba ütközik, mert a DCP már megköti a portot, próbálja meg a IsProxied tulajdonságot falseértékre állítani. Ez megakadályozza, hogy a DCP kezelje a proxyt, így a végrehajtható fájl sikeresen megkötheti a portot.

A Name tulajdonság azonosítja a szolgáltatást, míg a Port és a TargetPort tulajdonságok határozzák meg a kívánt és a figyelési portokat.

A hálózati kommunikációhoz a Protocol tulajdonság támogatja TCP és UDP-, és a Transport tulajdonság a átviteli protokollt (HTTP, HTTP2, HTTP3) jelöli. Végül, ha a szolgáltatás URI-címezhető, a UriScheme tulajdonság biztosítja az URI-sémát a szolgáltatás URI-jának létrehozására.

További információkért tekintse meg a EndpointAnnotation tulajdonságokelérhető tulajdonságait.

Végpontszűrés

Az összes .NET.NET Aspire projekterőforrás-végpont alapértelmezett heurisztikus halmazt követ. Egyes végpontok a futásidőben a ASPNETCORE_URLS-ban jelennek meg, néhányat közzétesznek HTTP/HTTPS_PORTSformájában, és egyes konfigurációkat a Kestrel konfigurációból oldanak fel. Az alapértelmezett viselkedéstől függetlenül szűrheti a környezeti változókban szereplő végpontokat a WithEndpointsInEnvironment bővítménymetódus használatával:

builder.AddProject<Projects.Networking_ApiService>("apiservice")
    .WithHttpsEndpoint() // Adds a default "https" endpoint
    .WithHttpsEndpoint(port: 19227, name: "admin")
    .WithEndpointsInEnvironment(
        filter: static endpoint =>
        {
            return endpoint.Name is not "admin";
        });

Az előző kód hozzáad egy alapértelmezett HTTPS-végpontot, valamint egy admin végpontot az 19227-as porton. A admin végpont azonban ki van zárva a környezeti változókból. Ez akkor hasznos, ha csak belső használatra szeretne végpontot elérhetővé tenni.