Tutorial: Herstellen einer Verbindung mit einem verwalteten Eureka Server für Spring in Azure Container-Apps

Eureka Server für Spring ist eine Dienstregistrierung, die es Microservices ermöglicht, sich selbst zu registrieren und andere Dienste zu entdecken. Als Azure Container Apps-Komponente können Sie Ihre Container-App für die automatische Registrierung an einen Eureka Server für Spring binden.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen einer Java-Komponente vom Typ „Eureka Server für Spring“
  • Binden Ihrer Container-App an eine Java-Komponente vom Typ „Eureka Server für Spring“

Wichtig

In diesem Tutorial werden Dienste verwendet, die sich auf Ihre Azure-Rechnung auswirken können. Wenn Sie sich dafür entscheiden, Schritt für Schritt vorzugehen, sollten Sie die in diesem Artikel verwendeten Ressourcen löschen, um unerwartete Abrechnungen zu vermeiden.

Voraussetzungen

Zum Abschließen dieses Projekts benötigen Sie die folgenden Elemente:

Anforderung Anweisungen
Azure-Konto Ein aktives Abonnement ist erforderlich. Falls Sie keins haben, können Sie kostenlos eins erstellen.
Azure CLI Installieren Sie die Azure CLI.

Überlegungen

Beachten Sie bei der Ausführung in Eureka Server für Spring in Azure Container Apps die folgenden Details:

Artikel Erklärung
Umfang Die Komponente vom Typ „Eureka Server für Spring“ wird in der gleichen Umgebung ausgeführt wie die verbundene Container-App.
Skalieren Eureka Server für Spring kann nicht skaliert werden. Die Skalierungseigenschaften minReplicas und maxReplicas sind beide auf 1. Um Hochverfügbarkeit zu erreichen, können Sie Erstellen eines hochverfügbaren Eureka-Diensts in Azure Container Apps verwenden.
Ressourcen Die Containerressourcenzuordnung für Eureka Server für Spring ist vorgegeben. Die Anzahl der CPU-Kerne beträgt 0,5, und die Speichergröße beträgt 1Gi.
Preise Die Abrechnung für Eureka Server für Spring ist verbrauchsabhängig. Ressourcen, die von verwalteten Java-Komponenten verbraucht werden, werden in den Aktiven/Leerlaufraten abgerechnet. Sie können Komponenten löschen, die nicht mehr zum Beenden der Abrechnung verwendet werden.
Binding Container-Apps stellen über eine Bindung eine Verbindung mit einer Komponente vom Typ „Eureka Server für Spring“ her. Die Bindungen enthalten Konfigurationen in Container-App-Umgebungsvariablen. Nachdem eine Bindung eingerichtet wurde, kann die Container-App die Konfigurationswerte aus Umgebungsvariablen lesen und eine Verbindung mit Eureka Server für Spring herstellen.

Setup

Bevor Sie mit dem Eureka Server für Spring arbeiten, müssen Sie zuerst die erforderlichen Ressourcen erstellen.

Führen Sie die folgenden Befehle aus, um Ihre Ressourcengruppe, Container-Apps-Umgebung zu erstellen.

  1. Erstellen Sie Variablen, um Ihre Anwendungskonfiguration zu unterstützen. Diese Werte werden Ihnen im Rahmen dieser Lerneinheit bereitgestellt.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export EUREKA_COMPONENT_NAME=eureka
    export APP_NAME=my-eureka-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
    
    Variable Beschreibung
    LOCATION Der Standort der Azure-Region, an dem Sie Ihre Container-App und die Java-Komponente erstellen
    ENVIRONMENT Der Name der Azure Container Apps-Umgebung für Ihre Demoanwendung.
    RESOURCE_GROUP Der Name der Azure-Ressourcengruppe für Ihre Demoanwendung
    EUREKA_COMPONENT_NAME Der Name der für Ihre Container-App erstellten Java-Komponente. In diesem Fall erstellen Sie eine Java-Komponente vom Typ „Eureka Server für Spring“.
    IMAGE Das containerimage, das in Ihrer Container-App verwendet wird.
  2. Melden Sie sich über die Azure-Befehlszeilenschnittstelle bei Azure an.

    az login
    
  3. Erstellen Sie eine Ressourcengruppe.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Erstellen Sie die Container Apps-Umgebung.

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

Erstellen der Java-Komponente „Eureka Server für Spring“

Nachdem Sie nun über eine Umgebung verfügen, können Sie Ihre Container-App erstellen und an eine Java-Komponenteninstanz von Eureka Server für Spring binden.

  1. Erstellen Sie die Java-Komponente vom Typ „Eureka Server für Spring“

    az containerapp env java-component eureka-server-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME
    
  2. Optional: Aktualisieren Sie die Konfiguration der Java-Komponente „Eureka Server für Spring.

    az containerapp env java-component eureka-server-for-spring update \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME 
      --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
    

Binden Ihrer Container-App an die Java-Komponente „Eureka Server für Spring“

  1. Erstellen Sie die Container-App, und binden Sie sie an den Eureka Server für Spring.

    az containerapp create \
      --name $APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT \
      --image $IMAGE \
      --min-replicas 1 \
      --max-replicas 1 \
      --ingress external \
      --target-port 8080 \
      --bind $EUREKA_COMPONENT_NAME \
      --query properties.configuration.ingress.fqdn
    

Kopieren Sie die URL Ihrer App in einen Text-Editor, damit Sie sie in einem der nächsten Schritte verwenden können.

Kehren Sie zu der Container-App im Portal zurück, und kopieren Sie die URL Ihrer App in einen Text-Editor, damit Sie sie in einem der nächsten Schritte verwenden können.

Navigieren Sie zur Route /allRegistrationStatus, um alle Anwendungen anzuzeigen, die beim Eureka Server für Spring registriert sind.

Die Bindung fügt mehrere Konfigurationen als Umgebungsvariablen in die Anwendung ein, in erster Linie die eureka.client.service-url.defaultZone Eigenschaft. Diese Eigenschaft gibt den internen Endpunkt der Eureka Server-Java-Komponente an.

Die Bindung fügt auch die folgenden Eigenschaften ein:

"eureka.client.register-with-eureka":    "true"
"eureka.client.fetch-registry":          "true"
"eureka.instance.prefer-ip-address":     "true"

Die eureka.client.register-with-eureka Eigenschaft wird festgelegt, um die Registrierung mit dem Eureka-Server zu true erzwingen. Diese Registrierung überschreibt die lokale Einstellung in application.properties, vom Konfigurationsserver usw. Wenn Sie sie falseauf festlegen möchten, können Sie sie überschreiben, indem Sie eine Umgebungsvariable in Ihrer Container-App festlegen.

Der eureka.instance.prefer-ip-address Wert wird aufgrund der spezifischen DNS-Auflösungsregel in der Container-App-Umgebung festgelegt true . Ändern Sie diesen Wert nicht, sodass Sie die Bindung nicht unterbrechen.

(Optional) Aufheben der Bindung zwischen Container-App und der Java-Komponente von Eureka Server für Spring

Verwenden Sie die Option --unbind, um eine Bindung aus einer Container-App zu entfernen.

  az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Anzeigen der Anwendung über ein Dashboard

Wichtig

Um das Dashboard anzuzeigen, müssen Sie mindestens die Microsoft.App/managedEnvironments/write-Rolle Ihrem Konto in der Ressource der verwalteten Umgebung zugewiesen haben. Sie können entweder explizit die Rolle Owner oder Contributor für die Ressource zuweisen oder die Schritte ausführen, um eine benutzerdefinierte Rollendefinition zu erstellen und sie Ihrem Konto zuzuweisen.

  1. Erstellen Sie die benutzerdefinierte Rollendefinition.

    az role definition create --role-definition '{
        "Name": "<YOUR_ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    Ersetzen Sie den Platzhalter zwischen den spitzen Klammern <> im Wert AssignableScopes durch Ihre Abonnement-ID.

  2. Weisen Sie Ihrem Konto die benutzerdefinierte Rolle in der Ressource der verwalteten Umgebung zu.

    Rufen Sie die Ressourcen-ID der verwalteten Umgebung ab:

        export ENVIRONMENT_ID=$(az containerapp env show \
         --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
         --query id -o tsv)
    
  3. Weisen Sie Ihrem Konto die Rolle zu.

    Ersetzen Sie vor dem Ausführen dieses Befehls den Platzhalter zwischen den <>-Klammern durch Ihre Benutzer- oder Dienstprinzipal-ID.

    az role assignment create \
      --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
      --role "<ROLE_NAME>" \
      --scope $ENVIRONMENT_ID
    

    Hinweis

    <USER_OR_SERVICE_PRINCIPAL_ID> sollte in der Regel die Identität sein, die Sie für den Zugriff auf das Azure-Portal verwenden. <ROLE_NAME> ist der Name, den Sie in Schritt 1 zugewiesen haben.

  4. Rufen Sie die URL des Dashboards „Eureka Server für Spring“ ab.

    az containerapp env java-component eureka-server-for-spring show \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME \
      --query properties.ingress.fqdn -o tsv
    

    Dieser Befehl gibt die URL zurück, die Sie für den Zugriff auf das Dashboard „Eureka Server für Spring“ verwenden können. Über das Dashboard ist Ihre Container-App auch für Sie verfügbar, wie im folgenden Screenshot dargestellt.

Screenshot: Dashboard „Eureka Server für Spring“.

Optional: Integrieren der Java-Komponenten „Eureka Server für Spring“ und „Administrator für Spring“

Wenn Sie die Java-Komponenten „Eureka Server für Spring“ und „Administrator für Spring“ integrieren möchten, lesen Sie den Abschnitt Integrieren des verwalteten Administrators für Spring in Eureka Server für Spring.

Bereinigen von Ressourcen

Die in diesem Tutorial erstellten Ressourcen wirken sich auf Ihre Azure-Abrechnung aus. Führen Sie den folgenden Befehl aus, um alle in diesem Tutorial erstellten Ressourcen zu entfernen, wenn Sie diese Dienste nicht langfristig verwenden werden.

az group delete \
  --resource-group $RESOURCE_GROUP

Nächste Schritte