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:
- Zelfstudie: Implementeren in Azure Container Apps met Visual Studio
- Quickstart: Bouwen en implementeren vanuit een opslagplaats naar Azure Container Apps
- Een taak maken met Azure Container Apps
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.