Automatisera omkonfigurationen av infrastrukturen med hjälp av Azure

Azure Container Instances
Azure Application Gateway
Azure Functions
Azure Monitor

Containerisering är en vanlig metod för appmodernisering. Du kan överväga att använda Azure Kubernetes Service för avancerade arbetsbelastningar eller använda Azure Container Instances för enkla containerarbetsbelastningar, till exempel ett enkelt webbprogram. Den här artikeln fokuserar på att implementera serverlös automatisering på infrastrukturnivå för containerinstanser när Application Gateway används som brandvägg.

Vi börjar med ett vanligt scenario. För att skydda Azure-containerinstanser kan du använda containergrupper i Azure Container Instances. Genom att använda containergrupper kan du distribuera Azure-containerinstanser i ett virtuellt nätverk så att containrarna kan komma åt andra privata resurser eller andra Azure-tjänster via en privat Azure-slutpunkt. För kunder som är värdar för webbprogram är det vanligt att använda en brandvägg för webbprogram som Azure Application Gateway för att fronta inkommande trafik när du använder Azure Container Instances som en serverdelspool. Den här artikeln är en bra utgångspunkt: Exponera en statisk IP-adress för en containergrupp.

En potentiell utmaning med den här metoden är att använda en icke-statisk privat IP-adress som en serverdelspool. Den privata IP-adressen kan roteras under underhåll, vilket kräver att molnadministratören konfigurerar om serverdelspoolen manuellt. Om nya containrar läggs till för skalning måste administratören också konfigurera om för att säkerställa att trafiken dirigeras till rätt serverdelspool. Och liveness-avsökningar och beredskapsavsökningar stöds inte i containergrupper, vilket gör det svårare att identifiera avbrott i arbetsbelastningen.

I den här artikeln beskrivs förbättringar för att åtgärda dessa vanliga problem genom implementering av Application Insights och Azure Monitor för övervakning och användning av Azure Functions för att utföra automatisk rotation av privata IP-adresser. Den här metoden förbättrar redundansen för arbetsbelastningen.

Potentiella användningsfall

Den här arkitekturen fungerar bäst för:

  • Serverlös distribution.
  • Minimal åtgärd för en molnbaserad arbetsbelastning med automatisering.
  • En enkel containerarbetsbelastning som inte kräver avancerad containerorkestrering.
  • En mycket redundant, extern arbetsbelastning med automatisk omkonfiguration.
  • En containerarbetsbelastning som kräver åtkomst till privata resurser, som de som exponeras av privata Azure-slutpunkter.

Arkitektur

Flödesdiagram som visar hur Azure Cosmos DB används av en privat slutpunkt för Azure Container Instances. Den frontas av Azure Application Gateway.

Ladda ned en Visio-fil med den här arkitekturen.

Dataflöde

Del 1: Typiskt trafikflöde för webbprogram

1a. Application Gateway har brandväggsfunktioner för webbprogram, vilket är idealiskt för att fronta offentlig trafik innan den når serverdelsarbetsbelastningen. Application Gateway exponerar den offentliga IP-adressen, så Azure DDoS Protection ger ytterligare ett skyddslager.

1b. Serverdelspoolen för Application Gateway konfigureras med den privata IP-adressen för Azure-containerinstansen i en containergrupp. Azure-containerinstanser i containergrupper levereras inte med fullständigt kvalificerade domännamn (FQDN), så IP-adressen måste användas.

1c. Containrar i Azure Container Instances kan använda privata resurser, till exempel Azure Cosmos DB, via privata länkar.

Del 2: Förbättringar med automatisering

2a. Application Gateway innehåller ett felfritt mått för antal värdar som du kan använda som en liveness-avsökning för Azure-containerinstanser, eftersom containergrupper i Container Instances inte stöder live- eller beredskapsavsökningar.

2b. Application Insights används i containrar för att samla in andra mått, inklusive hjärtslag, som kan skickas till Application Insights för övervakning via en anpassad tråd.

2c. Du kan konfigurera aviseringar baserat på tröskelvärden som definieras i steg 2a och 2b. Anta till exempel att systemet har tre containerinstanser som körs som en serverdelspool. Du kan konfigurera en avisering att utlösas när antalet felfria värdar är mindre än 3. I en åtgärdsgrupp med aviseringsregler kan du använda en Azure-funktion som åtgärdstyp för att utlösa den anpassade åtgärden.

2d. I Azure-funktionen används en Azure SDK för att hämta konfigurationen av befintliga containerinstanser och återskapa samma instanser. Den här funktionen utlöses av aviseringen som definieras i steg 2c. Den här funktionen kan ta lång tid att köra, beroende på konfigurationens komplexitet. Azure-funktioner kan överskrida tidsgränsen så att du kan använda Azure Durable Functions för att hantera tidskrävande processer och hämta statusuppdateringar.

Komponenter

Automation

  • Azure Durable Functions: Till skillnad från Azure Functions är Durable Functions tillståndskänsligt och stöder flera tillståndskänsliga arbetsflödesmönster. I det här exemplet används övervakningsmönstret.
  • Azure SDK:er: Azure SDK:er är samlingar med bibliotek som du kan använda för att interagera med Azure-tjänster på önskat programmeringsspråk. SDK:erna ger dig mer flexibilitet för att integrera logik som utför automatisering.

Övervakning

  • Azure Monitor-mått: Den här funktionen i Azure Monitor samlar in fördefinierade numeriska data från Azure-tjänster.
  • Åtgärdsgrupper: En åtgärdsgrupp är en samling av meddelandeinställningar som definierats av resursägaren. Du kan definiera meddelandekanaler och åtgärder baserat på utlösta aviseringar.

Nätverk

  • Azure DDoS Protection: Azure DDoS (Basic) Protection är kostnadsfritt och aktiverat på alla offentliga IP-adresser. Azure DDoS Network Protection ger fler funktioner, till exempel att mata in loggar till andra platser och möjligheten att engagera DDoS Protection Rapid Response-teamet.
  • Azure Application Gateway: Azure Web Application Firewall ger skydd för offentliga program mot kryphål som SQL-inmatning och XSS-attacker.
  • Azure Private Link: Azure Private Link ger åtkomst till Azure PaaS-tjänster via en privat slutpunkt på Microsofts stamnät för att ytterligare förbättra nätverksåtkomstsäkerheten.

Program

  • Azure Container Instances: Azure Container Instances kör containeravbildningar sömlöst utan att du behöver konfigurera en annan infrastruktur. Du bör överväga Azure Kubernetes Service (AKS) för avancerad containerorkestrering.
  • Azure Cosmos DB: Azure Cosmos DB är en fullständigt hanterad NoSQL-databas som stöder flera plattformar, till exempel SQL, Cassandra och MongoDB.
  • Azure Key Vault: Som bästa praxis för säkerhet lagrar utvecklare inte anslutningssträng som klartext i programmets källkod. Azure Key Vault fungerar som en central plats för att lagra hemligheter med förbättrad säkerhet. Program kan hämta nödvändiga nycklar med förbättrad säkerhet.

Alternativ

Föregående scenario uppdaterar en serverdelspool för Application Gateway. Alternativt kan du använda en privat DNS-zon i Azure som målserverdel för Application Gateway och använda Azure-funktioner för att uppdatera en post i stället för att göra ändringar i Application Gateway. Det här alternativet skulle minska distributionstiden. Å andra sidan skulle Application Gateway-mått inte kunna identifiera antalet värdar eftersom det skulle abstraheras av DNS. Den här automatiseringen skulle därför behöva utlösas via en programövervakningslösning som Application Insights eller Azure Monitor direkt.

Azure tillhandahåller flera alternativ för att vara värd för containerbaserade arbetsbelastningar, till exempel Azure Kubernetes Service och Azure App Service.

Azure Kubernetes Service tillhandahåller avancerade containerorkestrerings- och nätverksfunktioner som tjänstresursen, som inte är tillgänglig i Container Instances. Den här referensarkitekturen uppfyller det här kravet.

App Service kan också vara värd för containerarbetsbelastningar och App Service-miljön gör det möjligt för utvecklare att distribuera App Service i Azure Virtual Network. Prisstrukturen för Container Instances, jämfört med App Service, gör den intressant för små arbetsbelastningar.

Att tänka på

Tillgänglighet

Eftersom liveness- och beredskapsavsökningar inte stöds i containergrupper rekommenderar vi att du använder Azure Monitor Metrics och Azure Application Insights för övervakning. Containerhälsa och drifttid är inte deterministiska metoder för att avgöra om ett system är operativsystem från slutpunkt till slutpunkt.

Operations

Azure Durable Functions används för att konfigurera om infrastrukturen om det uppstår ett fel i containerinstanser eller om den privata IP-adressen för en containergrupp ändras. Som anges i dokumentationen tar etableringsprocessen lite längre tid. Användarna kan uppleva minimal stilleståndstid om containrarna inte är klara i tid.

Den här arkitekturen lägger till ett lager av återhämtning. Men vi rekommenderar fortfarande att du konfigurerar övervakning i programmet och övervakar Azure-status för plattformsfel.

Skalbarhet

Cpu- och minneskraven definieras när containrar skapas, så du kommer inte att kunna utföra vertikal skalning direkt. Du kan lägga till containrar i containergruppen för att skala vågrätt. Observera dock att varje container i containergruppen förbrukar en privat IP-adress, så gränsen är den etablerade undernätsstorleken.

En annan viktig faktor vid skalning är programmets tillstånd. Programmet måste hantera tillståndet, antingen lokalt eller med hjälp av externa tjänster som Azure Cache for Redis, för att säkerställa att skalning på begäran inte skapar dataförlust i programmet.

Säkerhet

Möjligheten att distribuera PaaS till ett virtuellt nätverk (VNet-inmatning) förbättrar inte säkerheten om konfigurationen inte är korrekt konfigurerad. VNet-inmatning ger administratörer mer nätverkskontroll, vilket ger fördelar som strängare nätverkssäkerhetsgrupper och användning av resurser som inte exponeras offentligt.

Private Link projicerar en privat slutpunkt i det virtuella nätverket, vilket gör att programmet kan komma åt Azure PaaS direkt via en privat IP-adress. Samtidigt kan administratörer ytterligare styra vem som har åtkomst till relevant Azure PaaS.

Om du lagrar containeravbildningar i Azure Container Registry kan du aktivera Microsoft Defender för containerregister för att utföra sårbarhetsgenomsökningar av containeravbildningar.

Distribuera det här scenariot

Exempel på källkod, där Azure Functions utför automatisering, är tillgängligt på GitHub.

Du behöver ett huvudnamn för tjänsten (klient-ID och hemlighet). Den används av Azure Functions för att utföra Azure Resource Manager-åtgärder. Tjänstens huvudnamn kräver minst ägarrättigheter i resursgruppen så att den kan uppdatera Application Gateway och skapa Azure-containerinstanser. Exemplet skapar ett enkelt Python-program som är containerbaserat och lagras i Container Registry. Uppdatera registret med ditt eget program.

Prissättning

Använd priskalkylatorn för Azure för att beräkna kostnaderna för Azure-resurser.

Se det här exemplet på föregående implementering.

Deltagare

Den här artikeln underhålls av Microsoft. Det har ursprungligen skrivits av följande medarbetare.

Huvudförfattare:

Nästa steg

Bläddra bland våra arkitekturer:

Relaterad vägledning: