Bearbeiten

Bereitstellen von Microservices mit Azure Container Apps

Azure Container Apps
Azure Cosmos DB
Azure-Servicebus

Dieses Beispielszenario zeigt ein Beispiel für eine vorhandene Workload, die ursprünglich für die Ausführung auf Kubernetes konzipiert wurde, aber stattdessen in Azure Container Apps ausgeführt werden kann. Azure Container Apps eignet sich gut für Brownfield-Workloads, bei denen Teams eine komplexe Infrastruktur- und Containerorchestrierung vereinfachen möchten. Die Beispielworkload führt eine containerisierte Microserviceanwendung aus.

Im Beispiel wird die Workload, die in der Microservicearchitektur auf Azure Kubernetes Service verwendet wird, auf der Anwendungsplattform Azure Container Apps neu gehostet.

Tipp

GitHub logo Die Architektur stützt sich auf eine Beispielimplementierung, die einige der in diesem Artikel beschriebenen Entwurfsentscheidungen veranschaulicht.

Aufbau

Diagram showing microservices deployed with Azure Container Apps.

Laden Sie eine Visio-Datei dieser Architektur herunter.

In diesem Szenario stammen die Containerimages aus Azure Container Registry und werden in einer Container Apps-Umgebung bereitgestellt.

Die Dienste, die gemeinsam die gleiche Umgebung nutzen, profitieren von Folgendem:

  • Interne Eingangsdaten- und Dienstermittlung
  • Einzelner Log Analytics-Arbeitsbereich für die Runtimeprotokollierung
  • Sichere Verwaltung von Geheimnissen und Zertifikaten

Die Workflowdienstcontainer-App wird im einzelnen Überarbeitungsmodus ausgeführt. Eine Container-App im Einzelrevisionsmodus besitzt eine einzelne Revision, die von null bis n Replikaten unterstützt wird. Ein Replikat besteht aus dem Anwendungscontainer und allen ggf. erforderlichen Sidecarcontainern. In diesem Beispiel werden keine Sidecarcontainer verwendet. Daher stellt jedes Container-App-Replikat einen einzelnen Container dar. Da in diesem Beispiel keine Skalierung genutzt wird, wird für jede Container-App nur ein einzelnes Replikat ausgeführt.

Der Workflow verwendet einen Hybridansatz zum Verwalten von Geheimnissen. In den Diensten, bei denen eine solche Implementierung keine Codeänderungen erforderlich macht, werden verwaltete Identitäten verwendet. Der Drohnenplanungsdienst und der Drohnenlieferdienst verwenden benutzerseitig zugewiesene Identitäten für die Authentifizierung bei Azure Key Vault, um auf die dort gespeicherten Geheimnisse zuzugreifen. Die restlichen Dienste speichern Geheimnisse über den Container-Apps-Dienst auf Anwendungsebene.

Diagram showing the runtime architecture for the solution.

Dieses Diagramm veranschaulicht die Runtimearchitektur für die Lösung.

Laden Sie eine Visio-Datei dieser Architektur herunter.

Datenfluss

  1. Erfassungsdienst: Empfängt Clientanforderungen, puffert sie und sendet sie über Azure Service Bus an den Workflowdienst.
  2. Workflowdienst: Verwendet Nachrichten von Azure Service Bus und sendet sie an zugrunde liegende Dienste.
  3. Paketdienst: Dient zur Paketverwaltung.
  4. Drohnenplanungsdienst: Kümmert sich um die Zeitplanung für die Drohnen und überwacht sie während des Flugs.
  5. Lieferdienst: Verwaltet geplante oder aktuell durchgeführte Lieferungen.

Komponenten

Der Drohnenlieferdienst nutzt mehrere Azure-Dienste gemeinsam.

Azure Container Apps

Azure Container Apps ist die primäre Komponente.

Ein Großteil der Komplexitäten der vorherigen AKS-Architektur werden durch folgende Features ersetzt:

  • Integrierte Dienstermittlung
  • Vollständig verwaltete HTTP- und HTTP/2-Endpunkte
  • Integrierter Lastenausgleich
  • Protokollierung und Überwachung
  • Automatische Skalierung basierend auf HTTP-Datenverkehr oder auf Ereignissen (unterstützt von KEDA)
  • Anwendungsupgrades und Versionsverwaltung

Externer Speicher und andere Komponenten

Azure Key Vault dient zum sicheren Speichern von Geheimnissen wie API-Schlüsseln, Kennwörtern und Zertifikaten sowie zum sicheren Zugreifen auf diese Geheimnisse.

Azure Container Registry dient zum Speichern privater Containerimages. Sie können auch andere Containerregistrierungen nutzen, z. B. Docker Hub.

Azure Cosmos DB speichert Daten mithilfe der Open-Source-Lösung Azure Cosmos DB for MongoDB. Microservices sind normalerweise zustandslos und schreiben ihren Zustand in externe Datenspeicher. Azure Cosmos DB is eine NoSQL-Datenbank mit Open-Source-APIs for MongoDB und Cassandra.

Azure Service Bus bietet zuverlässiges Cloud-Messaging-as-a-Service (MaaS) und einfache Hybridintegration. Service Bus unterstützt asynchrone Messagingmuster, die bei Microserviceanwendungen üblich sind.

Azure Cache for Redis fügt der Anwendungsarchitektur eine Zwischenspeicherungsebene hinzu, um die Geschwindigkeit und Leistung bei hohen Datenverkehrslasten zu verbessern.

Azure Monitor sammelt und speichert Metriken und Protokolle von der Anwendung. Nutzen Sie diese Daten zum Überwachen der Anwendung, zum Einrichten von Warnungen und Dashboards sowie zum Durchführen von Fehlerursachenanalysen. In diesem Szenario wird ein Log Analytics-Arbeitsbereich zur umfassenden Überwachung der Infrastruktur und der Anwendung verwendet.

Application Insights bietet eine erweiterbare Anwendungsleistungsverwaltung (Application Performance Management, APM) sowie Überwachungsfunktionen für die Dienste. Jeder Dienst wird mit dem Application Insights SDK instrumentiert, um die App zu überwachen und die Daten an Azure Monitor weiterzuleiten.

Bicep-Vorlagen zum Konfigurieren und Bereitstellen der Anwendungen.

Alternativen

Ein alternatives Szenario dieses Beispiels ist die Fabrikam-Drohnenlieferanwendung mit Kubernetes. Diese steht auf GitHub im Repository für Fabrikam-Drohnenlieferungen mit Azure Kubernetes Service (AKS) zur Verfügung.

Szenariodetails

Ihr Unternehmen kann die Bereitstellung und Verwaltung von Microservicecontainern mithilfe von Azure Container Apps vereinfachen. Container Apps bietet eine vollständig verwaltete serverlose Umgebung für die Erstellung und Bereitstellung moderner Anwendungen.

Fabrikam, Inc. (ein fiktives Unternehmen) hat eine Anwendung für Drohnenlieferungen implementiert, mit der Benutzer eine Drohne anfordern können, die auszuliefernde Waren abholt. Wenn ein Kunde einen Abholtermin festlegt, weist ein Back-End-System eine Drohne zu und teilt dem Benutzer die voraussichtliche Lieferzeit mit.

Die Microserviceanwendung wurde in einem Azure Kubernetes Service-Cluster (AKS) bereitgestellt. Das Fabrikam-Team nutzte jedoch nicht die erweiterten oder plattformspezifischen AKS-Funktionen. Schließlich wurde die Anwendung ohne viel Aufwand zu Azure Container Apps migriert. Durch die Portierung der Lösung auf Azure Container Apps konnte Fabrikam die folgenden Vorteile erreichen:

  • Migrieren der Anwendung fast ohne Änderungen: Bei der Migration der Anwendung von AKS zu Azure Container Apps waren fast keine Codeänderungen erforderlich.
  • Bereitstellen der Infrastruktur und der Workload mit Bicep-Vorlagen: Für die Bereitstellung der Anwendungscontainer waren keine Kubernetes-YAML-Manifeste erforderlich.
  • Verfügbarmachen der Anwendung über den verwalteten Eingangsdienst: Dank integrierter Unterstützung des externen, HTTPS-basierten Eingangsdienstes zum Verfügbarmachen des Datenerfassungsdienstes muss kein eigener Eingangsdienst mehr konfiguriert werden.
  • Pullen von Containerimages aus ACR: Azure Container Apps erfordert kein bestimmtes Basisimage und keine bestimmte Registrierung.
  • Verwalten des Anwendungslebenszyklus: Die Revisionsfunktion unterstützt das Ausführen mehrerer Revisionen einer bestimmten Container-App sowie die Aufteilung des Datenverkehrs für A/B-Tests oder Blau/Grün-Bereitstellungsszenarien.
  • Verwenden einer verwalteten Identität: Das Fabrikam-Team konnte eine verwaltete Identität für die Authentifizierung mit Azure Key Vault und Azure Container Registry verwenden.

Mögliche Anwendungsfälle

  • Bereitstellen einer Microservice-basierten Brownfield-Anwendung in einem PaaS-Angebot (Platform-as-a-Service) zur Vermeidung der betrieblichen Komplexität im Zusammenhang mit der Verwaltung eines Containerorchestrators
  • Optimieren von Vorgängen und Verwaltung durch Migrieren von Containerdiensten zu einer Plattform, die die native Skalierung auf Null unterstützt
  • Ausführen eines zeitintensiven Hintergrundprozesses – beispielsweise den Workflowdienst im Einzelrevisionsmodus

Weitere gängige Verwendungsmöglichkeiten von Azure Container Apps:

  • Ausführen von Containerworkloads auf einer serverlosen, nutzungsbasierten Plattform
  • Automatisches Skalieren von Anwendungen basierend auf HTTP/HTTPS-Datenverkehr und/oder ereignisgesteuerten Triggern mit KEDA-Unterstützung
  • Minimieren des Wartungsaufwands für Containeranwendungen
  • Bereitstellen von API-Endpunkten
  • Hosten von Hintergrundverarbeitungsanwendungen
  • Verarbeiten der ereignisgesteuerten Verarbeitung

Überlegungen

Diese Überlegungen beruhen auf den Säulen des Azure Well-Architected Frameworks, d. h. einer Reihe von Grundsätzen, mit denen die Qualität von Workloads verbessert werden kann. Weitere Informationen finden Sie unter Microsoft Azure Well-Architected Framework.

Verfügbarkeit

Mit Container Apps können Sie die Anwendungen einfacher bereitstellen, verwalten, pflegen und überwachen. Die Verfügbarkeit kann durch die folgenden wichtigen Features sichergestellt werden:

  • Überarbeitungen helfen Ihnen bei der Bereitstellung von Anwendungsupdates ohne Downtime. Sie können Überarbeitungen verwenden, um die Bereitstellung von Anwendungsupdates zu verwalten und den Datenverkehr zwischen den Überarbeitungen zu teilen, um blaue bzw. grüne Bereitstellungen und A/B-Tests zu unterstützen (derzeit nicht in dieser Beispielworkload verwendet).
  • Die umfassenden Überwachungsfeatures von Container-Apps bieten eine ganzheitliche Ansicht Ihrer ausgeführten Anwendungen. Container Apps ist mit Azure Monitor und Log Analytics integriert, sodass Sie die Ausführung von Container-Apps nachverfolgen und Warnungen basierend auf Metriken und Ereignissen festlegen können.
  • Wenn eine App unerwartet beendet wird, wird sie vom Container Apps-Dienst automatisch neu gestartet.
  • Sie können Regeln für die automatische Skalierung aktivieren, um dem Bedarf bei zunehmendem Datenverkehr und zunehmenden Workloads gerecht zu werden.
  • Die Leistung wird durch die dynamischen Lastenausgleichsfeatures von Azure Container Apps optimiert (derzeit nicht in dieser Beispielworkload verwendet).

Erstklassige Betriebsprozesse

Die Säule „Optimaler Betrieb“ deckt die Betriebsprozesse ab, die für die Bereitstellung einer Anwendung und deren Ausführung in der Produktion sorgen. Weitere Informationen finden Sie unter Übersicht über die Säule „Optimaler Betrieb“.

Der Container Apps-Dienst bietet folgende Features für erstklassige Betriebsprozesse:

  • GitHub Actions-Integration zum Einrichten automatisierter CI/CD-Bereitstellungen
  • Modus mit mehreren Revisionen und Aufteilung des Datenverkehrs zum Testen von Änderungen am Anwendungscode und an Skalierungsregeln
  • Azure Monitor- und Log Analytics-Integration, um Erkenntnisse zu Ihrer Containeranwendung zu gewinnen

Effiziente Leistung

Leistungseffizienz ist die Fähigkeit Ihrer Workload, auf effiziente Weise eine den Anforderungen der Benutzer entsprechende Skalierung auszuführen. Weitere Informationen finden Sie unter Übersicht über die Säule „Leistungseffizienz“.

Leistungsaspekte in dieser Lösung:

  • Die Workload wird auf mehrere Microserviceanwendungen verteilt.
  • Jeder Microservice ist unabhängig und teilt sich keine Ressourcen mit den anderen Microservices, sodass sie unabhängig skaliert werden können.
  • Die automatische Skalierung kann aktiviert werden, wenn die Workload zunimmt.
  • Für Anforderungen wird ein dynamischer Lastenausgleich verwendet.
  • Metriken, einschließlich CPU- und Arbeitsspeicherauslastung, Bandbreiteninformationen und Speicherauslastung, sind über Azure Monitor verfügbar.
  • Log Analytics bietet Protokollaggregation, um Informationen in allen Container Apps-Umgebungen zu sammeln.

Zuverlässigkeit

Zuverlässigkeit stellt sicher, dass Ihre Anwendung Ihre Verpflichtungen gegenüber den Kunden erfüllen kann. Weitere Informationen finden Sie in der Überblick über die Säule „Zuverlässigkeit“.

Container Apps versucht, fehlerhafte Container neu zu starten, und abstrahiert Hardware für Benutzer. Microsoft kümmert sich um vorübergehende Fehler und die Hochverfügbarkeit der zugrunde liegenden Computeressourcen.

Die Leistungsüberwachung über Log Analytics und Azure Monitor ermöglicht die Evaluierung der Anwendung unter Last. Metriken und Protokollierungsinformationen bieten Ihnen die Daten, die erforderlich sind, um Trends zu erkennen und somit Fehler zu verhindern und die Ursachenanalyse von Fehlern auszuführen, wenn diese auftreten.

Sicherheit

Sicherheit bietet Schutz vor vorsätzlichen Angriffen und dem Missbrauch Ihrer wertvollen Daten und Systeme. Weitere Informationen finden Sie unter Übersicht über die Säule „Sicherheit“.

Geheimnisse

  • Ihre Container-App kann vertrauliche Werte als Geheimnisse speichern und abrufen. Nachdem ein Geheimnis für die Container-App definiert wurde, kann es von der Anwendung sowie von allen zugehörigen Skalierungsregeln verwendet werden. Im Modus mit mehreren Revisionen werden von allen Revisionen die gleichen Geheimnisse verwendet. Da Geheimnisse als Änderung des Anwendungsbereichs betrachtet werden, wird keine neue Revision erstellt, wenn Sie den Wert eines Geheimnisses ändern. Damit der neue Geheimniswert jedoch von ausgeführten Revisionen geladen wird, müssen sie neu gestartet werden. In diesem Szenario werden Anwendungs- und Umgebungsvariablenwerte verwendet.
  • Umgebungsvariablen: Vertrauliche Werte können sicher auf Anwendungsebene gespeichert werden. Wenn Umgebungsvariablen geändert werden, wird von der Container-App eine neue Revision erzeugt.

Netzwerksicherheit

  • Eingang: Um den externen Zugriff einzuschränken, wird nur der Datenerfassungsdienst für den externen Eingang konfiguriert. Auf die Back-End-Dienste kann nur über das interne virtuelle Netzwerk in der Container Apps-Umgebung zugegriffen werden. Stellen Sie Dienste nur bei Bedarf über das Internet zur Verfügung. Da diese Architektur die integrierte externe Eingangsfunktion verwendet, bietet diese Lösung nicht die Möglichkeit, Ihren Eingangspunkt vollständig hinter einer Web Application Firewall (WAF) zu positionieren oder in DDoS Protection-Pläne aufzunehmen. Alle Workloads, die über das Web zugänglich sind, sollten mit einer Web Application Firewall versehen sein.
  • Virtuelles Netzwerk: Wenn Sie eine Umgebung erstellen, können Sie ein benutzerdefiniertes virtuelles Netzwerk bereitstellen. Andernfalls wird ein virtuelles Netzwerk automatisch von Microsoft generiert und verwaltet. Sie können dieses von Microsoft verwaltete virtuelle Netzwerk nicht bearbeiten, z. B. durch Hinzufügen von Netzwerksicherheitsgruppen (NSGs) oder Erzwingen von Tunneldatenverkehr zu einer ausgehenden Firewall. In diesem Beispiel wird ein automatisch generiertes virtuelles Netzwerk verwendet.

Weitere Optionen für die Netzwerktopologie finden Sie unter Netzwerkarchitektur in Azure Container Apps.

Workloadidentitäten

  • Container Apps unterstützt verwaltete Microsoft Entra-Identitäten, sodass Ihre App sich bei anderen mit Microsoft Entra ID geschützten Ressourcen wie Azure Key Vault authentifizieren kann, ohne dass Anmeldeinformationen in Ihrer Container-App verwaltet werden müssen. Eine Container-App kann vom System zugewiesene, benutzerseitig zugewiesene oder beide Arten verwalteter Identitäten verwenden. Für Dienste, die keine AD-Authentifizierung unterstützen, sollten Sie Geheimnisse in Azure Key Vault speichern und eine verwaltete Identität für den Zugriff auf die Geheimnisse verwenden.
  • Verwenden Sie verwaltete Identitäten für den Zugriff auf Azure Container Registry. In Azure Container Apps kann für die Workload eine andere verwaltete Identität verwendet werden als für den Zugriff auf die Containerregistrierung. Dies wird empfohlen, wenn Sie eine präzise Zugriffssteuerung für Ihre verwalteten Identitäten erreichen möchten.

Kostenoptimierung

  • Azure Container Apps besitzt ein nutzungsbasiertes Preismodell.
  • Azure Container Apps unterstützt die Skalierung auf Null. Wenn eine Container-App auf Null skaliert wird, fallen keine Gebühren an.
  • In diesem Szenario sind Azure Cosmos DB und Azure Cache for Redis die Hauptkostenfaktoren.

Bereitstellen dieses Szenarios

Führen Sie zum Bereitstellen dieses Szenarios die Schritte aus, die im Repository für das Azure Container Apps-Beispielszenario in der „README.md“ angegeben sind.

Beitragende

Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:

Hauptautor:

Nächste Schritte