Konfigurieren eines verwalteten Spring Cloud-Konfigurationsservers in Azure Spring Apps

Hinweis

Azure Spring Apps ist der neue Name für den Azure Spring Cloud-Dienst. Obwohl der Dienst umbenannt wurde, wird der alte Name noch an einigen Stellen verwendet, solange wir Ressourcen wie Screenshots, Videos und Diagramme aktualisieren.

Dieser Artikel gilt für: ✔️ Java ✔️ C#

Dieser Artikel gilt für: ✔️ Basic-/Standard-Dienstebene Enterprise-Dienstebene

In diesem Artikel wird gezeigt, wie Sie einen verwalteten Spring Cloud-Konfigurationsserver im Azure Spring Apps-Dienst konfigurieren.

Die Spring Cloud-Konfigurationsserver bietet server- und clientseitige Unterstützung für eine externalisierte Konfiguration in einem verteilten System. Die Konfigurationsserverinstanz bietet Ihnen einen zentralen Ort zum Verwalten externer Eigenschaften für Anwendungen in allen Umgebungen. Weitere Informationen finden Sie in der Referenz zum Spring Cloud-Konfigurationsserver.

Voraussetzungen

Einschränkung

Bei der Verwendung eines Konfigurationsservers mit einem Git-Back-End gelten einige Einschränkungen. Einige Eigenschaften werden für den Zugriff auf den Konfigurationsserver und die Dienstermittlung automatisch in Ihre Anwendungsumgebung eingefügt. Wenn Sie diese Eigenschaften auch in den Dateien Ihres Konfigurationsservers konfigurieren, treten unter Umständen Konflikte oder unerwartetes Verhalten auf. Zu den Eigenschaften zählen folgende:

eureka.client.service-url.defaultZone
eureka.client.tls.keystore
eureka.instance.preferIpAddress
eureka.instance.instance-id
server.port
spring.cloud.config.tls.keystore
spring.application.name
spring.jmx.enabled

Achtung

Es wird dringend empfohlen, die oben genannten Eigenschaften nicht in die Anwendungsdateien des Konfigurationsservers einzufügen.

Erstellen der Konfigurationsserverdateien

Azure Spring Apps unterstützt Azure DevOps, GitHub, GitLab und Bitbucket zum Speichern Ihrer Konfigurationsserverdateien. Wenn Sie Ihr Repository vorbereitet haben, erstellen Sie die Konfigurationsdateien anhand der folgenden Anweisungen, und speichern Sie sie dort.

Darüber hinaus sind einige der konfigurierbaren Eigenschaften nur für bestimmte Typen verfügbar. In den folgenden Unterabschnitten sind die Eigenschaften für die einzelnen Repositorytypen aufgeführt.

Öffentliches Repository

Bei der Verwendung eines öffentlichen Repositorys sind die konfigurierbaren Eigenschaften stärker eingeschränkt.

Alle konfigurierbaren Eigenschaften, die zum Einrichten des öffentlichen Git-Repositorys verwendet werden, sind in der folgenden Tabelle aufgeführt:

Hinweis

Das Verwenden eines Bindestrichs (-) zum Trennen von Wörtern ist die einzige Namenskonvention, die derzeit unterstützt wird. Beispielsweise können Sie standard-bezeichnung verwenden, jedoch nicht StandardBezeichnung.

Eigenschaft Erforderlich Funktion
uri Ja Der URI des Git-Repositorys, das als Back-End des Konfigurationsservers verwendet wird, beginnt mit http:// , https:// , git@ oder ssh:// .
default-label Nein Die Standardbezeichnung für das Git-Repository sollte der Branchname, der Tagname oder die Commit-ID des Repositorys sein.
search-paths Nein Ein Array von Zeichenfolgen, die zum Durchsuchen von Unterverzeichnissen des Git-Repositorys verwendet werden

Privates Repository mit SSH-Authentifizierung

Alle konfigurierbaren Eigenschaften, die zum Einrichten des privaten Git-Repositorys mit SSH verwendet werden, sind in der folgenden Tabelle aufgeführt:

Hinweis

Das Verwenden eines Bindestrichs (-) zum Trennen von Wörtern ist die einzige Namenskonvention, die derzeit unterstützt wird. Beispielsweise können Sie standard-bezeichnung verwenden, jedoch nicht StandardBezeichnung.

Eigenschaft Erforderlich Funktion
uri Ja Der URI des Git-Repositorys, das als Konfigurationsserver-Back-End verwendet wird, muss mit http:// , https:// , git@ oder ssh:// beginnen.
default-label Nein Die Standardbezeichnung für das Git-Repository sollte der Branchname, der Tagname oder die Commit-ID des Repositorys sein.
search-paths Nein Ein Array von Zeichenfolgen, die zum Durchsuchen von Unterverzeichnissen des Git-Repositorys verwendet werden
private-key Nein Der private SSH-Schlüssel für den Zugriff auf das Git-Repository, erforderlich, wenn der URI mit git@ oder ssh:// beginnt.
host-key Nein Der Hostschlüssel des Git-Repositoryservers sollte das durch host-key-algorithm abgedeckte Algorithmuspräfix nicht enthalten.
host-key-algorithm Nein Der Algorithmus für den Hostschlüssel sollte ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 oder ecdsa-sha2-nistp521 sein. Nur erforderlich, wenn vorhanden ist.
strict-host-key-checking Nein Gibt an, ob die Konfigurationsserverinstanz nicht gestartet werden kann, wenn das private host-key genutzt wird. Muss true (Standardwert) oder false sein.

Hinweis

Config Server verwendet master (aus Git selbst) als Standardbeschriftung, wenn Sie keine eigene angeben. Allerdings wurde der Standardbranch auf GitHub kürzlich von master in main geändert. Um einen Azure Spring Apps Config Server-Fehler zu vermeiden, müssen Sie beim Einrichten von Config Server mit GitHub auf die Standardbeschriftung achten. Dies gilt insbesondere für neu erstellte Repositorys.

Privates Repository mit Standardauthentifizierung

Alle konfigurierbaren Eigenschaften, die zum Einrichten des privaten Git-Repositorys mit Standardauthentifizierung verwendet werden, sind unten aufgeführt.

Hinweis

Das Verwenden eines Bindestrichs (-) zum Trennen von Wörtern ist die einzige Namenskonvention, die derzeit unterstützt wird. Verwenden können Sie beispielsweise standard-bezeichnung, aber nicht StandardBezeichnung.

Eigenschaft Erforderlich Funktion
uri Ja Der URI des Git-Repositorys, das als Konfigurationsserver-Back-End verwendet wird, muss mit http:// , https:// , git@ oder ssh:// beginnen.
default-label Nein Die Standardbezeichnung für das Git-Repository sollte der Branchname, der Tagname oder die Commit-ID des Repositorys sein.
search-paths Nein Ein Array von Zeichenfolgen, die zum Durchsuchen von Unterverzeichnissen des Git-Repositorys verwendet werden
username Nein Der Benutzername, der für den Zugriff auf den Git-Repositoryserver verwendet wird, erforderlich, wenn der Git-Repositoryserver unterstützt
password Nein Dies ist das Kennwort oder persönliche Zugriffstoken, das für den Zugriff auf den Git-Repositoryserver verwendet wird, und ist erforderlich, wenn der Git-Repositoryserver unterstützt.

Hinweis

Für viele Git-Repositoryserver wird die Verwendung von Token anstelle von Kennwörtern für die HTTP-Standardauthentifizierung unterstützt. In einigen Repositorys können Token unendlich lange aufbewahrt werden. Für bestimmte Git-Repositoryserver, z. B. Azure DevOps Server, wird aber erzwungen, dass Token innerhalb einiger Stunden ablaufen. Für Repositorys mit erzwungenem Ablauf von Token sollte die tokenbasierte Authentifizierung mit Azure Spring Apps nicht genutzt werden. GitHub hat die Unterstützung für die Kennwortauthentifizierung entfernt, sodass Sie ein persönliches Zugriffstoken anstelle der Kennwortauthentifizierung für GitHub verwenden müssen. Weitere Informationen finden Sie unter Tokenauthentifizierung.

Andere Git-Repositorys

Alle konfigurierbaren Eigenschaften, die zum Einrichten von Repositorys mit Muster verwendet werden, sind unten aufgeführt.

Hinweis

Das Verwenden eines Bindestrichs (-) zum Trennen von Wörtern ist die einzige Namenskonvention, die derzeit unterstützt wird. Verwenden können Sie beispielsweise standard-bezeichnung, aber nicht StandardBezeichnung.

Eigenschaft Erforderlich Funktion
repos Nein Eine Zuordnung aus den Einstellungen für ein Git-Repository mit einem angegebenen Namen.
repos."uri" Ja bei repos Der URI des Git-Repositorys, das als Konfigurationsserver-Back-End verwendet wird, muss mit http:// , https:// , git@ oder ssh:// beginnen.
repos."name" Ja bei repos Ein Name zum Identifizieren eines Git-Repositorys, nur erforderlich, wenn vorhanden ist. Beispiel: team-A, team-B.
repos."pattern" Nein Ein Array von Zeichenfolgen zum Abgleichen eines Anwendungsnamens. Verwenden Sie für jedes Muster das Format {application}/{profile} mit Platzhaltern.
repos."default-label" Nein Die Standardbezeichnung für das Git-Repository sollte der Branchname, der Tagname oder die Commit-ID des Repositorys sein.
repos."search-paths" Nein Ein Array von Zeichenfolgen, die zum Durchsuchen von Unterverzeichnissen des Git-Repositorys verwendet werden
repos."username" Nein Der Benutzername, der für den Zugriff auf den Git-Repositoryserver verwendet wird, erforderlich, wenn der Git-Repositoryserver unterstützt
repos."password" Nein Dies ist das Kennwort oder persönliche Zugriffstoken, das für den Zugriff auf den Git-Repositoryserver verwendet wird, und ist erforderlich, wenn der Git-Repositoryserver unterstützt.
repos."private-key" Nein Der private SSH-Schlüssel für den Zugriff auf das Git-Repository, erforderlich, wenn der URI mit git@ oder ssh:// beginnt.
repos."host-key" Nein Der Hostschlüssel des Git-Repositoryservers sollte das durch host-key-algorithm abgedeckte Algorithmuspräfix nicht enthalten.
repos."host-key-algorithm" Nein Der Algorithmus für den Hostschlüssel sollte ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 oder ecdsa-sha2-nistp521 sein. Nur erforderlich, wenn vorhanden ist.
repos."strict-host-key-checking" Nein Gibt an, ob die Konfigurationsserverinstanz nicht gestartet werden kann, wenn das private host-key genutzt wird. Muss true (Standardwert) oder false sein.

Die folgende Tabelle enthält einige Beispiele für den Abschnitt Zusätzliche Repositorys. Weitere Informationen finden Sie in der Spring-Dokumentation unter Musterabgleich und Mehrere Repositorys.

Muster BESCHREIBUNG
test-config-server-app-0/* Das Muster und der Repository-URI entsprechen einer Spring Boot-Anwendung mit dem Namen test-config-server-app-0 mit einem beliebigen Profil.
test-config-server-app-1/dev Das Muster und der Repository-URI entsprechen einer Spring Boot-Anwendung mit dem Namen test-config-server-app-1 mit einem beliebigen Profil.
test-config-server-app-2/prod Das Muster und der Repository-URI entsprechen einer Spring Boot-Anwendung mit dem Namen test-config-server-app-2 mit einem Produktionsprofil.

Screenshot of Azure portal showing the Config Server page with the Patterns column of the 'Additional repositories' table highlighted.

Anfügen des Konfigurationsserverrepositorys an Azure Spring Cloud

Nachdem Sie Ihre Konfigurationsdateien in einem Repository gespeichert haben, müssen Sie dieses nun mit Azure Spring Apps verbinden.

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zur Seite Übersicht von Azure Spring Apps.

  3. Wählen Sie im Navigationsbereich auf der linken Seite die Option Konfigurationsserver aus.

  4. Geben Sie im Abschnitt Standardrepository für URI den Wert „“ ein.

  5. Wählen Sie Überprüfen aus.

    Navigate to config server

  6. Klicken Sie nach Abschluss der Überprüfung auf Anwenden, um die Änderungen zu speichern.

    Validating config server

  7. Die Aktualisierung der Konfiguration kann einige Minuten dauern.

    Updating config server

  8. Sie sollten eine Benachrichtigung erhalten, wenn die Konfiguration abgeschlossen ist.

Direkte Eingabe von Repositoryinformationen im Azure-Portal

Standardrepository

  • Öffentliches Repository: Fügen Sie im Abschnitt Standardrepository im Feld URI den Repository-URI ein. Legen Sie die Bezeichnung auf config fest. Stellen Sie sicher, dass die Einstellung Authentifizierung den Wert Public aufweist, und wählen Sie dann Anwenden aus, um den Vorgang abzuschließen.

  • Privates Repository: Azure Spring Apps unterstützt die grundlegende Authentifizierung per Kennwort/Token und SSH.

    • Standardauthentifizierung: Fügen Sie im Abschnitt Standardrepository im Feld URI den Repository-URI ein, und wählen Sie dann die Schaltfläche Authentifizierung (Stiftsymbol) aus. Wählen Sie im Bereich Authentifizierung bearbeiten in der Dropdownliste Authentifizierungstyp die Option HTTP Basic aus, und geben Sie dann Ihren Benutzernamen mit dem Kennwort/Token für den Zugriff auf Azure Spring Apps ein. Wählen Sie OK und dann Anwenden aus, um die Einrichtung Ihrer Konfigurationsserverinstanz abzuschließen.

    The Edit Authentication pane basic auth

    Achtung

    Einige Git-Repositoryserver verwenden ein persönliches Token oder ein Zugriffstoken (z. B. ein Kennwort) für die Standardauthentifizierung. Dieser Typ von Token kann als Kennwort in Azure Spring Apps verwendet werden, da es nie abläuft. Für andere Git-Repositoryserver wie Bitbucket und Azure DevOps Server läuft das Zugriffstoken nach einer oder zwei Stunden ab. Dies bedeutet, dass sich diese Option nicht für die Verwendung dieser Repositoryserver mit Azure Spring Apps eignet. GitHub hat die Unterstützung für die Kennwortauthentifizierung entfernt, sodass Sie ein persönliches Zugriffstoken anstelle der Kennwortauthentifizierung für GitHub verwenden müssen. Weitere Informationen finden Sie unter Tokenauthentifizierung.

    • SSH: Fügen Sie im Abschnitt Standardrepository im Feld URI den Repository-URI ein, und wählen Sie dann die Schaltfläche Authentifizierung (Stiftsymbol) aus. Wählen Sie im Bereich Authentifizierung bearbeiten in der Dropdownliste Authentifizierungstyp die Option SSH aus, und geben Sie dann Ihren privaten Schlüssel ein. Optional können Sie den Hostschlüssel und den Hostschlüsselalgorithmus angeben. Stellen Sie sicher, dass Sie Ihren öffentlichen Schlüssel in das Repository Ihres Konfigurationsservers einfügen. Wählen Sie OK und dann Anwenden aus, um die Einrichtung Ihrer Konfigurationsserverinstanz abzuschließen.

    The Edit Authentication pane ssh auth

Zusätzliche Repositorys

Wenn Sie ein optional Zusätzliche Repositorys verwenden möchten, um den Dienst zu konfigurieren, geben Sie den URI und die Authentifizierung auf die gleiche Weise an wie beim Standard-Repository. Geben Sie einen Namen für das Muster an, und wählen Sie dann Anwenden aus, um es an Ihre Instanz anzufügen.

Eingeben der Repositoryinformationen in eine YAML-Datei

Wenn Sie eine YAML-Datei mit Ihren Repositoryeinstellungen erstellt haben, können Sie die Datei direkt von Ihrem lokalen Computer in Azure Spring Apps importieren. Eine einfache YAML-Datei für ein privates Repository mit Standardauthentifizierung würde wie folgt aussehen:

spring:
    cloud:
        config:
            server:
                git:
                    uri: https://github.com/azure-spring-cloud-samples/config-server-repository.git
                    username: <username>
                    password: <password/token>

Wählen Sie die Schaltfläche Einstellungen importieren und dann die YAML-Datei in Ihrem Projektverzeichnis aus. Wählen Sie Importieren aus. Es wird ein -Vorgang von Ihren Benachrichtigungen angezeigt. Nach 1 bis 2 Minuten sollte der erfolgreiche Abschluss gemeldet werden.

The Config Server Notifications pane

Die Informationen aus der YAML-Datei sollten im Azure-Portal angezeigt werden. Wählen Sie Anwenden aus, um den Vorgang abzuschließen.

Verwenden von Azure Repos für die Azure Spring Apps-Konfiguration

Azure Spring Apps kann auf Git-Repositorys zugreifen, die öffentlich sind und per SSH oder mithilfe der HTTP-Standardauthentifizierung gesichert werden. Wir verwenden diese letzte Option, da sie mit Azure Repos leichter erstellt und verwaltet werden kann.

Abrufen von URL und Anmeldeinformationen des Repositorys

  1. Klicken Sie im Azure Repos-Portal für Ihr Projekt auf die Schaltfläche Klonen:

    Picture of Clone Button

  2. Kopieren Sie die Klon-URL aus dem Textfeld. Diese URL hat normalerweise folgendes Format:

    https://<organization name>@dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    Entfernen Sie alles nach https:// und vor dev.azure.com einschließlich @. Die resultierende URL muss folgendes Format aufweisen:

    https://dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    Speichern Sie diese URL zur Verwendung im nächsten Abschnitt.

  3. Klicken Sie auf Git-Anmeldeinformationen generieren. Ein Benutzername und ein Kennwort werden angezeigt und sollten zur Verwendung im nächsten Abschnitt gespeichert werden.

Konfigurieren von Azure Spring Apps für den Zugriff auf das Git-Repository

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zur Seite Übersicht von Azure Spring Apps.

  3. Wählen Sie den zu konfigurierenden Dienst aus.

  4. Wählen Sie im linken Bereich der Dienstseite unter Einstellungen die Registerkarte Konfigurationsserver aus. Konfigurieren Sie das Repository, das wir zuvor erstellt haben:

    • Fügen Sie die Repository-URL hinzu, die Sie im vorherigen Abschnitt gespeichert haben.
    • Wählen Sie Authentifizierung und anschließend HTTP Basic aus.
    • Der Benutzername ist der im vorherigen Abschnitt gespeicherte Benutzername.
    • Das Kennwort ist das im vorherigen Abschnitt gespeicherte Kennwort.
    • Klicken Sie auf Übernehmen, und warten Sie, bis der Vorgang erfolgreich abgeschlossen ist.

    Spring Cloud config server

Löschen der Konfiguration

Sie können die Schaltfläche Zurücksetzen auswählen, die auf der Registerkarte Konfigurationsserver angezeigt wird, um Ihre vorhandenen Einstellungen vollständig zu löschen. Löschen Sie die Einstellungen des Konfigurationsservers, wenn Sie Ihre Konfigurationsserverinstanz mit einer anderen Quelle verbinden möchten, beispielsweise bei der Migration von GitHub zu Azure DevOps.

Config Server-Aktualisierung

Wenn Eigenschaften geändert werden, müssen Dienste, die diese Eigenschaften nutzen, benachrichtigt werden, bevor Änderungen vorgenommen werden können. Die Standardlösung für Spring Cloud Config besteht darin, das Aktualisierungsereignis manuell auszulösen. Dies ist möglicherweise nicht praktikabel, wenn viele App-Instanzen vorhanden sind. Stattdessen können Sie Werte vom Konfigurationsserver automatisch aktualisieren, indem Sie Änderungen in einem Aktualisierungsintervall vom Konfigurationsclient abfragen lassen.

  1. Registrieren Sie eine geplante Aufgabe, um den Kontext in einem bestimmten Intervall zu aktualisieren.

    @ConditionalOnBean({RefreshEndpoint.class})
    @Configuration
    @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class})
    @EnableScheduling
    public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer {
        @Value("${spring.cloud.config.refresh-interval:60}")
        private long refreshInterval;
        @Value("${spring.cloud.config.auto-refresh:false}")
        private boolean autoRefresh;
        private RefreshEndpoint refreshEndpoint;
        public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) {
            this.refreshEndpoint = refreshEndpoint;
        }
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            if (autoRefresh) {
                // set minimal refresh interval to 5 seconds
                refreshInterval = Math.max(refreshInterval, 5);
                scheduledTaskRegistrar.addFixedRateTask(() -> refreshEndpoint.refresh(), refreshInterval * 1000);
            }
        }
    }
    
  2. Aktivieren Sie anschließend die automatische Aktualisierung, und legen Sie das entsprechende Aktualisierungsintervall in Ihrer application.yml-Datei fest. In diesem Beispiel fragt der Client alle 60 Sekunden Konfigurationsänderungen ab. Dies ist der kleinste festlegbare Wert für das Aktualisierungsintervall.

    Standardmäßig ist die automatische Aktualisierung auf FALSE und das Aktualisierungsintervall auf 60 Sekunden gesetzt.

    spring:
        cloud:
             config:
              auto-refresh: true
              refresh-interval: 60
    management:
        endpoints:
             web:
              exposure:
                include:
                  - refresh
    
  3. Fügen Sie Ihrem Code @RefreshScope hinzu. In diesem Beispiel wird die Variable „connectTimeout“ automatisch alle 60 Sekunden aktualisiert.

    @RestController
    @RefreshScope
    public class HelloController {
        @Value("${timeout:4000}")
        private String connectTimeout;
    }
    

Tipp

Weitere Informationen finden Sie in diesem Beispielprojekt.

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie Ihre Spring Cloud-Konfigurationsserverinstanz aktivieren und konfigurieren. Weitere Informationen zum Verwalten Ihrer Anwendung finden Sie unter Skalieren einer Anwendung in Azure Spring Apps.