Tutorial: Konfigurieren eines Sidecar-Containers für benutzerdefinierte Container in Azure App Service (Vorschau)

In diesem Tutorial fügen Sie den OpenTelemetry-Collector als Sidecar-Container zu einer benutzerdefinierten Linux-Container-App in Azure App Service hinzu.

In Azure App Service können Sie bis zu vier Sidecar-Container für jede benutzerdefinierte Sidecar-Container-App hinzufügen. Mit Sidecar-Containern können Sie zusätzliche Dienste und Features für Ihre Containeranwendung bereitstellen, ohne sie eng mit Ihrem Hauptanwendungscontainer zu koppeln. Sie können beispielsweise Überwachungs-, Protokollierungs-, Konfigurations- und Netzwerkdienste als Sidecar-Container hinzufügen. Ein OpenTelemetry-Collector-Sidecar ist ein solches Überwachungsbeispiel.

Weitere Informationen zu Sidecars finden Sie unter Sidecar-Muster.

Hinweis

Während des Vorschauzeitraums muss die Sidecar-Unterstützung bei der App-Erstellung aktiviert werden. Es gibt derzeit keine Möglichkeit, die Sidecar-Unterstützung für eine vorhandene App zu aktivieren.

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

1. Einrichten der erforderlichen Ressourcen

Erstellen Sie zunächst die Ressourcen, die im Tutorial verwendet werden. (Weitere Informationen finden Sie in der Übersicht über Cloud Shell.) Sie werden für dieses bestimmte Szenario verwendet und sind im Allgemeinen nicht für Sidecar-Container erforderlich.

  1. Führen Sie in Azure Cloud Shell die folgenden Befehle aus:

    git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs
    cd app-service-sidecar-tutorial-prereqs
    azd provision
    
  2. Geben Sie bei entsprechender Aufforderung den gewünschten Umgebungsnamen, das gewünschte Abonnement und die gewünschte Region an. Zum Beispiel:

    • Umgebungsname: my-sidecar-env
    • Abonnement: Ihr Abonnement
    • Region: (Europa) Europa, Westen

    Wenn die Bereitstellung abgeschlossen ist, sollte die folgende Ausgabe angezeigt werden:

     APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=...
    
     Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/.../resourceGroups/...
     
  3. Öffnen Sie den Ressourcengruppenlink auf einer Browserregisterkarte. Sie müssen diese Verbindungszeichenfolge später verwenden.

    Hinweis

    azd provision verwendet die enthaltenen Vorlagen, um die folgenden Azure-Ressourcen zu erstellen:

2. Erstellen einer Sidecar-fähigen App

  1. Wählen Sie auf der Verwaltungsseite der Ressourcengruppen die Option Erstellen aus.

  2. Suchen Sie nach Web-App, und wählen Sie dann den Pfeil nach unten neben Erstellen und anschließend Web-App aus.

    Screenshot: Azure Marketplace-Seite, auf der nach der Web-App gesucht und auf die Schaltfläche zum Erstellen der Web-App geklickt wird

  3. Konfigurieren Sie den Bereich Grundlagen wie folgt:

    • Name: Ein eindeutiger Name
    • Veröffentlichen: Container
    • Betriebssystem: Linux
    • Region: Dieselbe Region, die Sie auch für azd provision ausgewählt haben
    • Linux-Plan: Ein neuer App Service-Plan

    Screenshot: Assistent zum Erstellen von Web-Apps mit hervorgehobenen Einstellungen für eine benutzerdefinierte Linux-Container-App

  4. Wählen Sie Container aus. Konfigurieren Sie den Bereich Container wie folgt:

    • Sidecar-Unterstützung: Aktiviert
    • Imagequelle: Azure Container Registry
    • Registrierung: Die von azd provision erstellte Registrierung
    • Image: nginx
    • Tag: latest
    • Port: 80

    Screenshot: Assistent zum Erstellen von Web-Apps mit hervorgehobenen Einstellungen für das Containerimage und die Sidecar-Unterstützung

    Hinweis

    Diese Einstellungen werden in Sidecar-fähigen Apps unterschiedlich konfiguriert. Weitere Informationen finden Sie unter Unterschiede bei Sidecar-fähigen Apps.

  5. Klicken Sie auf Überprüfen + erstellen und dann auf Erstellen.

  6. Wählen Sie nach Abschluss der Bereitstellung die Option Zu Ressource wechseln aus.

  7. Navigieren Sie auf einer neuen Browserregisterkarte zu https://<app-name>.azurewebsites.net, und sehen Sie sich die Nginx-Standardseite an.

3. Hinzufügen eines Sidecar-Containers

In diesem Abschnitt fügen Sie Ihrer benutzerdefinierten Container-App einen Sidecar-Container hinzu.

  1. Wählen Sie auf der Verwaltungsseite der App im linken Menü Bereitstellungscenter aus.

    Im Bereitstellungscenter werden alle Container in der App angezeigt. Derzeit enthält sie nur den Hauptcontainer.

  2. Wählen Sie Hinzufügen aus, und konfigurieren Sie den neuen Container wie folgt:

    • Name: otel-collector
    • Imagequelle: Azure Container Registry
    • Registrierung: Die von azd provision erstellte Registrierung
    • Image: otel-collector
    • Tag: latest
    • Port: 4317

    Port 4317 ist der Standardport, der vom Beispielcontainer zum Empfangen von OpenTelemetry-Daten verwendet wird. Auf ihn kann von jedem anderen Container in der App unter localhost:4317 zugegriffen werden. Genau so sendet der Nginx-Container Daten an das Sidecar (siehe die OpenTelemetry-Modulkonfiguration für das Nginx-Beispielimage).

  3. Wählen Sie Übernehmen.

    Screenshot: Konfigurieren eines Sidecar-Containers im Bereitstellungscenter einer Web-App

    Nun sollten zwei Container im Bereitstellungscenter angezeigt werden. Der Hauptcontainer ist durch Main und der Sidecar-Container durch Sidecar gekennzeichnet. Jede App muss über einen Hauptcontainer verfügen, kann jedoch mehrere Sidecar-Container umfassen.

4. Konfigurieren von Umgebungsvariablen

Für das Beispielszenario ist das Sidecar „otel-collector“ so konfiguriert, dass die OpenTelemetry-Daten nach Azure Monitor exportiert werden. Allerdings wird die Verbindungszeichenfolge als Umgebungsvariable benötigt wird (siehe die OpenTelemetry-Konfigurationsdatei für das otel-collector-Image).

Sie konfigurieren Umgebungsvariablen für die Container wie für jede App Service-App, indem Sie App-Einstellungen konfigurieren. Die App-Einstellungen sind für alle Container in der App zugänglich.

  1. Wählen Sie auf der Verwaltungsseite der App im linken Menü Konfiguration aus.

  2. Fügen Sie eine App-Einstellung hinzu, indem Sie Neue Anwendungseinstellung auswählen und sie wie folgt konfigurieren:

    • Name: APPLICATIONINSIGHTS_CONNECTION_STRING
    • Value: Die Verbindungszeichenfolge in der Ausgabe von azd provision
  3. Wählen Sie Speichern und dann Weiter aus.

    Screenshot: Konfigurationsseite einer Web-App mit zwei hinzugefügten App-Einstellungen

Hinweis

Bestimmte App-Einstellungen gelten nicht für Sidecar-fähige Apps. Weitere Informationen finden Sie unter Unterschiede bei Sidecar-fähigen Apps.

5. Überprüfen in Application Insights

Das Sidecar „otel-collector“ sollte jetzt Daten nach Application Insights exportieren.

  1. Navigieren Sie zurück zur Browserregisterkarte für https://<app-name>.azurewebsites.net, und aktualisieren Sie die Seite mehrmals, um einige Webanforderungen zu generieren.

  2. Wechseln Sie zurück zur Übersichtsseite der Ressourcengruppe, und wählen Sie die Application Insights-Ressource aus. Nun sollten einige Daten in den Standarddiagrammen angezeigt werden.

    Screenshot: Application Insights-Seite mit Daten in den Standarddiagrammen

Hinweis

In diesem sehr gängigen Überwachungsszenario ist Application Insights nur eins der OpenTelemetry-Ziele, die Sie verwenden können, z. B. Jaeger, Prometheus und Zipkin.

Bereinigen von Ressourcen

Wenn Sie die Umgebung nicht mehr benötigen, können Sie die Ressourcengruppe, den App-Dienst und alle zugehörigen Ressourcen löschen. Führen Sie einfach diesen Befehl in Cloud Shell im geklonten Repository aus:

azd down

Unterschiede bei Sidecar-fähigen Apps

Sie konfigurieren Sidecar-fähige Apps anders als Apps, die nicht Sidecar-fähig sind. Insbesondere konfigurieren Sie den Hauptcontainer und Sidecars nicht mit App-Einstellungen, sondern direkt in den Ressourceneigenschaften. Die folgenden App-Einstellungen gelten nicht für Sidecar-fähige Apps:

  • Registrierungsauthentifizierungseinstellungen: DOCKER_REGISTRY_SERVER_URL, DOCKER_REGISTRY_SERVER_USERNAME und DOCKER_REGISTRY_SERVER_PASSWORD
  • Containerport: WEBSITES_PORT

Weitere Ressourcen