Delen via


Overzicht van .NET in Azure Container Apps

Als u een .NET-toepassing wilt implementeren in een cloudeigen omgeving zoals Azure Container Apps, moet u beslissingen nemen om ervoor te zorgen dat uw toepassing probleemloos en veilig wordt uitgevoerd. In deze handleiding worden de belangrijkste concepten besproken die betrokken zijn bij het implementeren van een .NET-toepassing in Azure Container Apps.

Azure Container Apps is een volledig beheerde serverloze containerservice waarmee u containertoepassingen kunt uitvoeren zonder dat u de onderliggende infrastructuur hoeft te beheren. Container Apps bevat ingebouwde ondersteuning voor functies, waaronder automatische schaalaanpassing, statuscontroles en TLS-certificaten (Transport Layer Security).

In dit artikel worden de concepten en problemen beschreven die belangrijk voor u zijn bij het implementeren van een .NET-toepassing in Azure Container Apps.

Een resourcetype selecteren

Container Apps ondersteunt twee typen resources: apps en taken. Apps worden continu uitgevoerde services, terwijl taken kortstondige taken zijn die zijn ontworpen om tot voltooiing te worden uitgevoerd.

Houd rekening met verschillen tussen deze twee toepassingstypen terwijl het gedrag ervan van invloed is op de manier waarop u uw .NET-toepassing beheert terwijl u zich voorbereidt op het implementeren van uw app. In de volgende tabel wordt het verschil in use cases tussen en taken beschreven.

Gebruiksscenario Brontype
Een ASP.NET Core-web-API die HTTP-aanvragen verwerkt App
Een .NET Core-consoletoepassing die bepaalde gegevens verwerkt en vervolgens wordt afgesloten Project
Een doorlopend actieve achtergrondservice waarmee berichten uit een wachtrij worden verwerkt App
Een optimalisatieservice voor installatiekopieën die alleen wordt uitgevoerd wanneer grote installatiekopieën worden opgeslagen in een opslagaccount. Project
Een toepassing die gebruikmaakt van een framework zoals Hangfire, Quartz.NET of de Azure WebJobs SDK App

Uw .NET-toepassing containeriseren en implementeren

Voor beide apps of taken moet u een containerinstallatiekopieën bouwen om uw .NET-toepassing te verpakken. Zie Docker-installatiekopieën voor ASP.NET Core voor meer informatie over het bouwen van een containerinstallatiekopieën.

Zodra de toepassing is ingesteld, kunt u uw toepassing implementeren in Azure Container Apps door de volgende handleidingen te volgen:

Het HTTP-inkomend verkeer gebruiken

Azure Container Apps bevat een ingebouwd HTTP-inkomend verkeer waarmee u uw apps beschikbaar kunt maken voor verkeer dat afkomstig is van buiten de container. Het inkomend verkeer van Container Apps bevindt zich tussen uw app en de eindgebruiker. Omdat het inkomend verkeer fungeert als intermediair, eindigt alles wat de eindgebruiker ziet bij het inkomend verkeer en wat uw app ziet, begint bij het inkomend verkeer.

Het toegangsbeheerobject beheert TLS-beëindiging en aangepaste domeinen, waardoor u deze handmatig in uw app hoeft te configureren. Via het toegangsbeheerobject wordt poort 443 beschikbaar gesteld voor HTTPS-verkeer en optioneel poort 80 voor HTTP-verkeer. Het toegangsbeheerobject stuurt aanvragen door naar uw app op de doelpoort.

Als uw app metagegevens nodig heeft over de oorspronkelijke aanvraag, kan deze gebruikmaken van door X doorgestuurde headers.

Zie HTTP-inkomend verkeer in Azure Container Apps voor meer informatie.

Een doelpoort definiëren

Voor het ontvangen van verkeer wordt het inkomend verkeer geconfigureerd op een doelpoort waar uw app naar verkeer luistert.

Wanneer ASP.NET Core wordt uitgevoerd in een container, luistert de toepassing naar poorten zoals geconfigureerd in de containerinstallatiekopieën. Wanneer u de officiële ASP.NET Core-installatiekopieën gebruikt, is uw app geconfigureerd om te luisteren naar HTTP op een standaardpoort. De standaardpoort is afhankelijk van de ASP.NET Core-versie.

Runtime Doelpoort
ASP.NET Core 7 en eerder 80
ASP.NET Core 8 en hoger 8080

Wanneer u het inkomend verkeer configureert, stelt u de doelpoort in op het nummer dat overeenkomt met de containerinstallatiekopieën die u gebruikt.

Door X doorgestuurde headers definiëren

Wanneer het toegangsbeheerobject de oorspronkelijke HTTP-aanvraag afhandelt, ziet uw app het toegangsbeheerobject als de client. Er zijn enkele situaties waarin uw app het IP-adres van de oorspronkelijke client of het oorspronkelijke protocol (HTTP of HTTPS) moet kennen. U hebt toegang tot het protocol en de IP-gegevens via de header van X-Forwarded-* de aanvraag.

U kunt de oorspronkelijke waarden uit deze headers lezen door toegang te krijgen tot het ForwardedHeaders object.

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders =
        ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    options.KnownNetworks.Clear();
    options.KnownProxies.Clear();
});

Zie ASP.NET Core configureren voor gebruik met proxyservers en load balancers voor meer informatie over het werken met aanvraagheaders.

Cloudeigen .NET-toepassingen bouwen

Toepassingen die zijn geïmplementeerd in Container Apps, werken vaak het beste wanneer u bouwt op de basis van cloudeigen principes. In de volgende secties worden veelvoorkomende problemen met betrekking tot cloudtoepassingen beschreven.

Toepassingsconfiguratie

Wanneer u uw .NET-toepassing implementeert in Azure Container Apps, gebruikt u omgevingsvariabelen voor het opslaan van configuratiegegevens in plaats van appsettings.json. Met deze procedure kunt u uw toepassing op verschillende manieren configureren in verschillende omgevingen. Bovendien is het eenvoudiger om configuratiewaarden te beheren met behulp van omgevingsvariabelen zonder dat u de containerinstallatiekopie opnieuw hoeft te bouwen en opnieuw te implementeren.

In Azure Container Apps stelt u omgevingsvariabelen in wanneer u de container van uw app of taak definieert. Sla gevoelige waarden op in geheimen en verwijs ernaar als omgevingsvariabelen. Zie Geheimen beheren in Azure Container Apps voor meer informatie over het beheren van geheimen.

Beheerde identiteit

Azure Container Apps biedt ondersteuning voor beheerde identiteiten, waardoor uw app toegang heeft tot andere Azure-services zonder referenties te hoeven uitwisselen. Zie Beheerde identiteiten in Azure Container Apps voor meer informatie over veilig communiceren tussen Azure-services.

Logboekregistratie

In een cloudeigen omgeving is logboekregistratie essentieel voor het bewaken en oplossen van problemen met uw toepassingen. Azure Container Apps maakt standaard gebruik van Azure Log Analytics om logboeken van uw containers te verzamelen. U kunt andere logboekproviders configureren. Zie Logboekopslag- en bewakingsopties in Azure Container Apps voor meer informatie over toepassingslogboekregistratie.

Wanneer u een logboekprovider configureert die logboeken naar de console schrijft, verzamelt en slaat Azure Container Apps logboekberichten voor u op.

Statuscontroles

Azure Container Apps bevat ingebouwde ondersteuning voor statustests, waarmee u de status van uw toepassingen kunt bewaken. Als een test bepaalt dat uw toepassing een slechte status heeft, wordt uw container automatisch opnieuw opgestart. Zie Statustests in Azure Container Apps voor meer informatie over statustests.

Voor een kans om aangepaste logica te implementeren om de status van uw toepassing te bepalen, kunt u een statuscontrole-eindpunt configureren. Zie Statuscontroles in ASP.NET Core voor meer informatie over statuscontrole-eindpunten.

Overwegingen voor automatisch schalen

Azure Container Apps schaalt standaard automatisch uw ASP.NET Core-apps op basis van het aantal binnenkomende HTTP-aanvragen. U kunt ook aangepaste regels voor automatisch schalen configureren op basis van andere metrische gegevens, zoals CPU of geheugengebruik. Zie Regels voor schalen instellen in Azure Container Apps voor meer informatie over schalen.

In .NET 8.0.4 en hoger worden ASP.NET Core-apps die gebruikmaken van gegevensbeveiliging automatisch geconfigureerd om beveiligde gegevens toegankelijk te houden voor alle replica's wanneer de toepassing wordt geschaald. Wanneer uw app begint te schalen, verwerkt een sleutelbeheerder het schrijven en delen van sleutels voor meerdere revisies. Wanneer de app wordt geïmplementeerd, wordt de omgevingsvariabele autoConfigureDataProtection automatisch ingesteld true om deze functie in te schakelen. Zie deze GitHub-pull-aanvraag voor meer informatie over deze automatische configuratie.

Met automatisch schalen wordt het aantal replica's van uw app gewijzigd op basis van de regels die u definieert. Container Apps routeert standaard willekeurig binnenkomend verkeer naar de replica's van uw ASP.NET Core-app. Omdat verkeer kan worden gesplitst tussen verschillende replica's, moet uw app staatloos zijn, zodat uw toepassing geen statusproblemen ondervindt.

Functies zoals anti-vervalsing, verificatie, SignalR, Blazor Server en Razor Pages zijn afhankelijk van gegevensbeveiliging, waarvoor extra configuratie nodig is om correct te werken bij het schalen naar meerdere replica's.

Gegevensbescherming configureren

ASP.NET Core heeft speciale functies voor het beveiligen en opheffen van beveiliging van gegevens, zoals sessiegegevens en antivervalsingstokens. Standaard worden gegevensbeveiligingssleutels opgeslagen in het bestandssysteem, wat niet geschikt is voor een cloudeigen omgeving.

Als u een .NET Aspire-toepassing implementeert, wordt gegevensbeveiliging automatisch voor u geconfigureerd. In alle andere situaties moet u gegevensbeveiliging handmatig configureren.

ASP.NET Core SignalR configureren

ASP.NET Core SignalR vereist een backplane om berichten te distribueren naar meerdere serverreplica's. Wanneer u uw ASP.NET Core-app met SignalR implementeert in Azure Container Apps, moet u een van de ondersteunde backplanes configureren, zoals Azure SignalR Service of Redis. Zie ASP.NET Core SignalR-hosting en -schaalaanpassing voor meer informatie over backplanes.

Blazor-server configureren

ASP.NET Core Blazor Server-apps slaan de status op de server op, wat betekent dat elke client tijdens de sessie moet zijn verbonden met dezelfde serverreplica. Wanneer u uw Blazor Server-app implementeert in Azure Container Apps, moet u plaksessies inschakelen om ervoor te zorgen dat clients naar dezelfde replica worden gerouteerd. Zie Sessieaffiniteit in Azure Container Apps voor meer informatie.