Översikt över .NET i Azure Container Apps
För att distribuera ett .NET-program till en molnbaserad miljö som Azure Container Apps finns det beslut som du måste fatta för att säkerställa att programmet körs smidigt och säkert. Den här guiden beskriver viktiga begrepp som ingår i distributionen av ett .NET-program till Azure Container Apps.
Azure Container Apps är en fullständigt hanterad serverlös containertjänst som gör att du kan köra containerbaserade program utan att behöva hantera den underliggande infrastrukturen. Container Apps innehåller inbyggt stöd för funktioner som autoskalning, hälsokontroller och TLS-certifikat (Transport Layer Security).
Den här artikeln beskriver de begrepp och problem som är viktiga för dig när du distribuerar ett .NET-program i Azure Container Apps.
Välj en resurstyp
Container Apps stöder två typer av resurser: appar och jobb. Appar kör kontinuerligt tjänster, medan jobb är kortvariga uppgifter som är utformade för att köras till slutförande.
När du förbereder dig för att distribuera din app bör du överväga skillnader mellan dessa två programtyper eftersom deras beteende påverkar hur du hanterar ditt .NET-program. I följande tabell beskrivs skillnaden i användningsfall mellan och jobb.
Användningsfall | Resurstyp |
---|---|
Ett ASP.NET Core-webb-API som hanterar HTTP-begäranden | App |
Ett .NET Core-konsolprogram som bearbetar vissa data och sedan avslutar | Projekt |
En löpande bakgrundstjänst som bearbetar meddelanden från en kö | App |
En tjänst för bildoptimering som endast körs när stora avbildningar sparas på ett lagringskonto. | Projekt |
Ett program som använder ett ramverk som Hangfire, Quartz.NET eller Azure WebJobs SDK | App |
Containerisera och distribuera .NET-programmet
För både appar och jobb måste du skapa en containeravbildning för att paketera .NET-programmet. Mer information om hur du skapar containeravbildningar finns i Docker-avbildningar för ASP.NET Core.
När du har konfigurerat det kan du distribuera programmet till Azure Container Apps genom att följa dessa guider:
- Självstudie: Distribuera till Azure Container Apps med Hjälp av Visual Studio
- Snabbstart: Skapa och distribuera från en lagringsplats till Azure Container Apps
- Skapa ett jobb med Azure Container Apps
Använda HTTP-ingressen
Azure Container Apps innehåller en inbyggd HTTP-ingress som gör att du kan exponera dina appar för trafik som kommer utanför containern. Container Apps-ingressen finns mellan din app och slutanvändaren. Eftersom ingressen fungerar som en mellanhand slutar det som slutanvändaren ser vid ingressen och det som appen ser börjar vid ingressen.
Ingressen hanterar TLS-avslutning och anpassade domäner, vilket eliminerar behovet av att konfigurera dem manuellt i din app. Via ingressen exponeras porten 443
för HTTPS-trafik och valfritt port 80
för HTTP-trafik. Ingressen vidarebefordrar begäranden till din app på målporten.
Om din app behöver metadata om den ursprungliga begäran kan den använda X-vidarebefordrade rubriker.
Mer information finns i HTTP-ingress i Azure Container Apps.
Definiera en målport
För att ta emot trafik konfigureras ingressen på en målport där appen lyssnar efter trafik.
När ASP.NET Core körs i en container lyssnar programmet på portar som konfigurerats i containeravbildningen. När du använder de officiella ASP.NET Core-avbildningarna är appen konfigurerad för att lyssna på HTTP på en standardport. Standardporten beror på ASP.NET Core-versionen.
Körmiljö | Målport |
---|---|
ASP.NET Core 7 och tidigare | 80 |
ASP.NET Core 8 och senare | 8080 |
När du konfigurerar ingressen anger du målporten till det nummer som motsvarar den containeravbildning som du använder.
Definiera X-vidarebefordrade rubriker
När ingressen hanterar den ursprungliga HTTP-begäran ser appen ingressen som klienten. Det finns vissa situationer där din app behöver känna till den ursprungliga klientens IP-adress eller det ursprungliga protokollet (HTTP eller HTTPS). Du kan komma åt protokollet och IP-informationen via begärandehuvudetX-Forwarded-*
.
Du kan läsa ursprungliga värden från dessa rubriker genom att ForwardedHeaders
komma åt objektet.
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
Mer information om hur du arbetar med begärandehuvuden finns i Konfigurera ASP.NET Core att fungera med proxyservrar och lastbalanserare.
Skapa molnbaserade .NET-program
Program som distribueras till Container Apps fungerar ofta bäst när du bygger vidare på grunderna i molnbaserade principer. Följande avsnitt hjälper dig att beskriva vanliga problem med molnbaserade program.
Tillämpningskonfiguration
När du distribuerar .NET-programmet till Azure Container Apps använder du miljövariabler för att lagra konfigurationsinformation i stället för att använda appsettings.json. Med den här metoden kan du konfigurera ditt program på olika sätt i olika miljöer. Om du använder miljövariabler blir det dessutom enklare att hantera konfigurationsvärden utan att behöva återskapa och distribuera om containeravbildningen.
I Azure Container Apps anger du miljövariabler när du definierar din app eller jobbets container. Lagra känsliga värden i hemligheter och referera till dem som miljövariabler. Mer information om hur du hanterar hemligheter finns i Hantera hemligheter i Azure Container Apps.
Hanterad identitet
Azure Container Apps stöder hanterad identitet, vilket gör att din app kan komma åt andra Azure-tjänster utan att behöva byta autentiseringsuppgifter. Mer information om säker kommunikation mellan Azure-tjänster finns i Hanterade identiteter i Azure Container Apps.
Loggning
I en molnbaserad miljö är loggning avgörande för övervakning och felsökning av dina program. Som standard använder Azure Container Apps Azure Log Analytics för att samla in loggar från dina containrar. Du kan konfigurera andra loggningsproviders. Mer information om programloggning finns i Logglagring och övervakningsalternativ i Azure Container Apps.
När du konfigurerar en loggningsprovider som skriver loggar till konsolen samlar Azure Container Apps in och lagrar loggmeddelanden åt dig.
Hälsotillståndsavsökningar
Azure Container Apps innehåller inbyggt stöd för hälsoavsökningar, vilket gör att du kan övervaka hälsotillståndet för dina program. Om en avsökning fastställer att programmet är i ett feltillstånd startas containern om automatiskt. Mer information om hälsoavsökningar finns i Hälsoavsökningar i Azure Container Apps.
Om du vill kunna implementera anpassad logik för att fastställa hälsotillståndet för ditt program kan du konfigurera en slutpunkt för hälsokontroll. Mer information om slutpunkter för hälsokontroll finns i Hälsokontroller i ASP.NET Core.
Överväganden för automatisk skalning
Som standard skalar Azure Container Apps automatiskt dina ASP.NET Core-appar baserat på antalet inkommande HTTP-begäranden. Du kan också konfigurera anpassade regler för automatisk skalning baserat på andra mått, till exempel CPU- eller minnesanvändning. Mer information om skalning finns i Ange skalningsregler i Azure Container Apps.
I .NET 8.0.4 och senare konfigureras ASP.NET Core-appar som använder dataskydd automatiskt för att hålla skyddade data tillgängliga för alla repliker när programmet skalar. När appen börjar skalas hanterar en nyckelhanterare skriv- och delningsnycklarna i flera revisioner. När appen distribueras anges true
miljövariabeln autoConfigureDataProtection
automatiskt för att aktivera den här funktionen. Mer information om den här automatiska konfigurationen finns i den här GitHub-pull-begäran.
Autoskalning ändrar antalet repliker i din app baserat på de regler du definierar. Som standard dirigerar Container Apps slumpmässigt inkommande trafik till replikerna i din ASP.NET Core-app. Eftersom trafiken kan delas upp mellan olika repliker bör appen vara tillståndslös så att programmet inte får tillståndsrelaterade problem.
Funktioner som förfalskningsskydd, autentisering, SignalR, Blazor Server och Razor Pages är beroende av dataskydd kräver extra konfiguration för att fungera korrekt vid skalning till flera repliker.
Konfigurera dataskydd
ASP.NET Core har särskilda funktioner som skyddar och avskyddar data, till exempel sessionsdata och token för förfalskningsskydd. Som standard lagras dataskyddsnycklar i filsystemet, vilket inte är lämpligt för en molnbaserad miljö.
Om du distribuerar ett .NET Aspire-program konfigureras dataskydd automatiskt åt dig. I alla andra situationer måste du konfigurera dataskydd manuellt.
Konfigurera ASP.NET Core SignalR
ASP.NET Core SignalR kräver en backplan för att distribuera meddelanden till flera serverrepliker. När du distribuerar din ASP.NET Core-app med SignalR till Azure Container Apps måste du konfigurera en av de backplan som stöds, till exempel Azure SignalR Service eller Redis. Mer information om backplan finns i ASP.NET Core SignalR-värd och skalning.
Konfigurera Blazor Server
ASP.NET Core Blazor Server-apparnas lagringstillstånd på servern, vilket innebär att varje klient måste vara ansluten till samma serverreplik under sessionen. När du distribuerar Blazor Server-appen till Azure Container Apps måste du aktivera klibbiga sessioner för att säkerställa att klienter dirigeras till samma replik. Mer information finns i Sessionstillhörighet i Azure Container Apps.