Udostępnij za pośrednictwem


Samouczek: nawiązywanie połączenia z zarządzaną bramą platformy Spring w usłudze Azure Container Apps (wersja zapoznawcza)

Usługa Gateway for Spring oferuje wydajny i zaawansowany sposób kierowania żądań interfejsu API oraz zarządzania nimi w ramach architektury mikrousług. Służy jako brama interfejsu API, która kieruje żądania zewnętrzne do różnych usług, dodając różne możliwości, takie jak filtrowanie, równoważenie obciążenia i inne. Z tego artykułu dowiesz się, jak utworzyć bramę, która kieruje żądania do aplikacji kontenera.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie bramy dla składnika Spring Java
  • Aktualizowanie bramy platformy Spring przy użyciu tras niestandardowych w celu przekierowywania żądań do aplikacji kontenera

Ważne

W tym samouczku są używane usługi, które mogą mieć wpływ na rachunek za korzystanie z platformy Azure. Jeśli zdecydujesz się wykonać kroki krok po kroku, upewnij się, że usunięto zasoby opisane w tym artykule, aby uniknąć nieoczekiwanych rozliczeń.

Wymagania wstępne

Kwestie wymagające rozważenia

Podczas uruchamiania w usłudze Gateway dla platformy Spring w usłudze Azure Container Apps należy pamiętać o następujących szczegółach:

Towar Wyjaśnienie
Scope Brama platformy Spring działa w tym samym środowisku co połączona aplikacja kontenera.
Zasoby Alokacja zasobów kontenera dla usługi Gateway dla platformy Spring jest stała, liczba rdzeni procesora CPU wynosi 0,5, a rozmiar pamięci to 1Gi.
Cennik Opłaty za bramę dla platformy Spring są objęte cenami opartymi na użyciu. Zasoby używane przez zarządzane składniki Java są rozliczane według stawek aktywnych/bezczynnych. Możesz usunąć składniki, które nie są już używane do zatrzymywania rozliczeń.

Ustawienia

Przed rozpoczęciem pracy z bramą platformy Spring należy najpierw utworzyć wymagane zasoby.

Wykonaj następujące polecenia, aby utworzyć grupę zasobów i środowisko usługi Container Apps.

  1. Utwórz zmienne do obsługi konfiguracji aplikacji. Te wartości są udostępniane na potrzeby tej lekcji. W tej lekcji użyjemy punktu końcowego siłownika administratora dla przykładowej aplikacji spring.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-spring-cloud-resource-group
    export ENVIRONMENT=my-spring-cloud-environment
    export JAVA_COMPONENT_NAME=mygateway
    export APP_NAME=myapp
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"
    
    Zmienna opis
    LOCATION Lokalizacja regionu świadczenia usługi Azure, w której tworzysz aplikację kontenera i składnik Java.
    ENVIRONMENT Nazwa środowiska usługi Azure Container Apps dla aplikacji demonstracyjnej.
    RESOURCE_GROUP Nazwa grupy zasobów platformy Azure dla aplikacji demonstracyjnej.
    JAVA_COMPONENT_NAME Nazwa składnika Java utworzonego dla aplikacji kontenera. W tym przypadku utworzysz bramę dla składnika Spring Java.
    IMAGE Obraz kontenera używany w aplikacji kontenera.
  2. Zaloguj się na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

    az login
    
  3. Utwórz grupę zasobów.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Utwórz środowisko aplikacji kontenera.

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

    To środowisko służy do hostowania zarówno składnika Gateway for Spring, jak i aplikacji kontenera.

Używanie składnika Gateway for Spring Java

Teraz, gdy masz środowisko usługi Container Apps, możesz utworzyć aplikację kontenera przy użyciu bramy dla składników spring java w celu kierowania żądań do nich.

  1. Utwórz składnik Gateway for Spring Java.

    az containerapp env java-component gateway-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
    
  2. Utwórz aplikację kontenera, która ma w pełni kwalifikowaną nazwę domeny (FQDN).

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

    To polecenie zwraca adres URL aplikacji kontenera, która korzysta z danych konfiguracji. Skopiuj adres URL do edytora tekstów, aby można było go użyć w następnym kroku.

Aktualizowanie tras bramy w celu kierowania żądań

  1. Utwórz plik YAML z następującą zawartością. Zastąp ciąg <MYAPP_URL> nazwą FQDN aplikacji kontenera z poprzedniego kroku.

    springCloudGatewayRoutes:
    - id: "route1"
      uri: "<MYAPP_URL>"
      predicates:
        - "Path=/myapp/{path}"
      filters:
        - "SetPath=/actuator/{path}"
    
  2. Uruchom następujące polecenie, aby zaktualizować składnik Gateway for Spring przy użyciu konfiguracji trasy.

    az containerapp env java-component gateway-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \ 
        --route-yaml <PTAH_TO_ROUTE_YAML_FILE> \
        --query properties.ingress.fqdn
    

    To polecenie aktualizuje trasę bramy i zwraca adres URL bramy, który korzysta z danych konfiguracji.

    Polecenie zwraca adres URL bramy. Odwiedzanie tego adresu URL przy użyciu ścieżki /myapp/health powinno kierować żądanie do punktu końcowego actuator/health aplikacji, zwracając {"status":"UP","groups":["liveness","readiness"]}polecenie .

Czyszczenie zasobów

Zasoby utworzone w tym samouczku mają wpływ na rachunek za platformę Azure. Jeśli nie zamierzasz korzystać z tych usług długoterminowych, uruchom następujące polecenie, aby usunąć wszystkie elementy utworzone w tym samouczku.

az group delete --resource-group $RESOURCE_GROUP

Format pliku trasy

Składnik Gateway for Spring obsługuje definiowanie tras za pomocą właściwości z identyfikatorem, identyfikatorem URI, predykatami i filtrami. Aby uzyskać więcej informacji, zobacz dokumentację usługi Spring Cloud Gateway. Poniżej przedstawiono przykładowy plik YAML, który pokazuje, jak skonfigurować te właściwości.

  springCloudGatewayRoutes:
  - id: "route1"
    uri: "https://otherjavacomponent.myenvironment.test.net"
    predicates:
      - "Path=/v1/{path}"
      - "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
    filters:
      - "SetPath=/{path}"
  - id: "route2"
    uri: "https://otherjavacomponent.myenvironment.test.net"
    predicates:
      - "Path=/v2/{path}"
      - "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
    filters:
      - "SetPath=/{path}"

Lista dozwolonych konfiguracji bramy dla platformy Spring(#configurable-properties)

W poniższej tabeli opisano właściwości składnika bramy, które można skonfigurować dla aplikacji. Aby uzyskać więcej informacji, zobacz Typowe właściwości aplikacji usługi Spring Cloud Gateway.

Nazwa właściwości opis Domyślna wartość
spring.cloud.gateway.default-filters Lista definicji filtrów, które są stosowane do każdej trasy.
spring.cloud.gateway.enabled Umożliwia korzystanie z funkcji bramy. true
spring.cloud.gateway.fail-on-route-definition-error Opcja niepowodzenia w przypadku błędów definicji trasy, wartość domyślna to true. W przeciwnym razie jest rejestrowane ostrzeżenie. true
spring.cloud.gateway.handler-mapping.order Kolejność .RoutePredicateHandlerMapping 1
spring.cloud.gateway.loadbalancer.use404 false
spring.cloud.gateway.discovery.locator.enabled Flaga umożliwiająca DiscoveryClient integrację bramy. false
spring.cloud.gateway.discovery.locator.filters
spring.cloud.gateway.discovery.locator.include-expression Wyrażenie spEL, które ocenia, czy należy uwzględnić usługę w integracji bramy, czy nie. Domyślna wartość to true. true
spring.cloud.gateway.discovery.locator.lower-case-service-id Opcja małych liter serviceId w predykatach i filtrach. Domyślna wartość to false. Przydatne w eureka, gdy automatycznie wielkie litery serviceId. Tak więc, MYSERVICE byłoby zgodne /myservice/** false
spring.cloud.gateway.discovery.locator.predicates
spring.cloud.gateway.discovery.locator.route-id-prefix Prefiks dla routeIdelementu , domyślnie to discoveryClient.getClass().getSimpleName() + "_". Identyfikator usługi jest dołączany w celu utworzenia elementu routeId.
spring.cloud.gateway.discovery.locator.url-expression Wyrażenie spEL, które tworzy identyfikator URI dla każdej trasy. Domyślna wartość to 'lb://'+serviceId. 'lb://'+serviceId
spring.cloud.gateway.filter.add-request-header.enabled add-request-header Włącza filtr. true
spring.cloud.gateway.filter.add-request-parameter.enabled add-request-parameter Włącza filtr. true
spring.cloud.gateway.filter.add-response-header.enabled add-response-header Włącza filtr. true
spring.cloud.gateway.filter.circuit-breaker.enabled circuit-breaker Włącza filtr. true
spring.cloud.gateway.filter.dedupe-response-header.enabled dedupe-response-header Włącza filtr. true
spring.cloud.gateway.filter.fallback-headers.enabled fallback-headers Włącza filtr. true
spring.cloud.gateway.filter.hystrix.enabled hystrix Włącza filtr. true
spring.cloud.gateway.filter.json-to-grpc.enabled Włącza filtr gRPC w formacie JSON. true
spring.cloud.gateway.filter.local-response-cache.enabled local-response-cache Włącza filtr. false
spring.cloud.gateway.filter.local-response-cache.request.no-cache-strategy
spring.cloud.gateway.filter.local-response-cache.size Maksymalny rozmiar pamięci podręcznej w celu eksmisji wpisów dla tej trasy w KB, MB i GB.
spring.cloud.gateway.filter.local-response-cache.time-to-live Czas wygaśnięcia wpisu pamięci podręcznej, wyrażony w s sekundach, m przez minuty i h przez godziny. 5m
spring.cloud.gateway.filter.map-request-header.enabled map-request-header Włącza filtr. true
spring.cloud.gateway.filter.modify-request-body.enabled modify-request-body Włącza filtr. true
spring.cloud.gateway.filter.modify-response-body.enabled modify-response-body Włącza filtr. true
spring.cloud.gateway.filter.prefix-path.enabled prefix-path Włącza filtr. true
spring.cloud.gateway.filter.preserve-host-header.enabled preserve-host-header Włącza filtr. true
spring.cloud.gateway.filter.redirect-to.enabled redirect-to Włącza filtr. true
spring.cloud.gateway.filter.remove-hop-by-hop.headers
spring.cloud.gateway.filter.remove-hop-by-hop.order 0
spring.cloud.gateway.filter.remove-request-header.enabled remove-request-header Włącza filtr. true
spring.cloud.gateway.filter.remove-request-parameter.enabled remove-request-parameter Włącza filtr. true
spring.cloud.gateway.filter.remove-response-header.enabled remove-response-header Włącza filtr. true
spring.cloud.gateway.filter.request-header-size.enabled request-header-size Włącza filtr. true
spring.cloud.gateway.filter.request-header-to-request-uri.enabled request-header-to-request-uri Włącza filtr. true
spring.cloud.gateway.filter.request-rate-limiter.default-key-resolver
spring.cloud.gateway.filter.request-rate-limiter.default-rate-limiter
spring.cloud.gateway.filter.request-rate-limiter.enabled request-rate-limiter Włącza filtr. true
spring.cloud.gateway.filter.request-size.enabled request-size Włącza filtr. true
spring.cloud.gateway.filter.retry.enabled retry Włącza filtr. true
spring.cloud.gateway.filter.rewrite-location-response-header.enabled rewrite-location-response-header Włącza filtr. true
spring.cloud.gateway.filter.rewrite-location.enabled rewrite-location Włącza filtr. true
spring.cloud.gateway.filter.rewrite-path.enabled rewrite-path Włącza filtr. true
spring.cloud.gateway.filter.rewrite-request-parameter.enabled rewrite-request-parameter Włącza filtr. true
spring.cloud.gateway.filter.rewrite-response-header.enabled rewrite-response-header Włącza filtr. true
spring.cloud.gateway.filter.save-session.enabled save-session Włącza filtr. true
spring.cloud.gateway.filter.secure-headers.content-security-policy default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
spring.cloud.gateway.filter.secure-headers.content-type-options nosniff
spring.cloud.gateway.filter.secure-headers.disable
spring.cloud.gateway.filter.secure-headers.download-options noopen
spring.cloud.gateway.filter.secure-headers.enabled secure-headers Włącza filtr. true
spring.cloud.gateway.filter.secure-headers.frame-options DENY
spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies none
spring.cloud.gateway.filter.secure-headers.referrer-policy no-referrer
spring.cloud.gateway.filter.secure-headers.strict-transport-security max-age=631138519
spring.cloud.gateway.filter.secure-headers.xss-protection-header 1 ; mode=block
spring.cloud.gateway.filter.set-path.enabled set-path Włącza filtr. true
spring.cloud.gateway.filter.set-request-header.enabled set-request-header Włącza filtr. true
spring.cloud.gateway.filter.set-request-host-header.enabled set-request-host-header Włącza filtr. true
spring.cloud.gateway.filter.set-response-header.enabled set-response-header Włącza filtr. true
spring.cloud.gateway.filter.set-status.enabled set-status Włącza filtr. true
spring.cloud.gateway.filter.strip-prefix.enabled strip-prefix Włącza filtr. true
spring.cloud.gateway.forwarded.enabled Włącza element ForwardedHeadersFilter. true
spring.cloud.gateway.global-filter.adapt-cached-body.enabled adapt-cached-body Włącza filtr globalny. true
spring.cloud.gateway.global-filter.forward-path.enabled forward-path Włącza filtr globalny. true
spring.cloud.gateway.global-filter.forward-routing.enabled forward-routing Włącza filtr globalny. true
spring.cloud.gateway.global-filter.load-balancer-client.enabled load-balancer-client Włącza filtr globalny. true
spring.cloud.gateway.global-filter.local-response-cache.enabled local-response-cache Włącza filtr dla wszystkich tras, co umożliwia dodanie określonej konfiguracji na poziomie trasy przy użyciu filtruLocalResponseCache. true
spring.cloud.gateway.global-filter.netty-routing.enabled netty-routing global Włącza filtr. true
spring.cloud.gateway.global-filter.netty-write-response.enabled netty-write-response Włącza filtr globalny. true
spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled reactive-load-balancer-client Włącza filtr globalny. true
spring.cloud.gateway.global-filter.remove-cached-body.enabled remove-cached-body Włącza filtr globalny. true
spring.cloud.gateway.global-filter.route-to-request-url.enabled route-to-request-url Włącza filtr globalny. true
spring.cloud.gateway.global-filter.websocket-routing.enabled websocket-routing Włącza filtr globalny. true
spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping Jeśli globalna konfiguracja mechanizmu CORS powinna zostać dodana do procedury obsługi adresów URL. false
spring.cloud.gateway.globalcors.cors-configurations
spring.cloud.gateway.redis-rate-limiter.burst-capacity-header Nazwa nagłówka zwracającego konfigurację pojemności serii. X-RateLimit-Burst-Capacity
spring.cloud.gateway.redis-rate-limiter.config
spring.cloud.gateway.redis-rate-limiter.include-headers Określa, czy nagłówki zawierają informacje o ogranicznikach szybkości. Domyślna wartość to true. true
spring.cloud.gateway.redis-rate-limiter.remaining-header Nazwa nagłówka zwracającego liczbę pozostałych żądań w ciągu bieżącej sekundy. X-RateLimit-Remaining
spring.cloud.gateway.redis-rate-limiter.replenish-rate-header Nazwa nagłówka, który zwraca konfigurację współczynnika uzupełniania. X-RateLimit-Replenish-Rate
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header Nazwa nagłówka zwracającego żądaną konfigurację tokenów. X-RateLimit-Requested-Tokens
spring.cloud.gateway.restrictive-property-accessor.enabled Ogranicza dostęp do metody i właściwości w systemie SpEL. true
spring.cloud.gateway.predicate.after.enabled after Włącza predykat. true
spring.cloud.gateway.predicate.before.enabled before Włącza predykat. true
spring.cloud.gateway.predicate.between.enabled between Włącza predykat. true
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled cloud-foundry-route-service Włącza predykat. true
spring.cloud.gateway.predicate.cookie.enabled cookie Włącza predykat. true
spring.cloud.gateway.predicate.header.enabled header Włącza predykat. true
spring.cloud.gateway.predicate.host.enabled host Włącza predykat. true
spring.cloud.gateway.predicate.host.include-port Dołącz port do pasującego do nazwy hosta. true
spring.cloud.gateway.predicate.method.enabled method Włącza predykat. true
spring.cloud.gateway.predicate.path.enabled path Włącza predykat. true
spring.cloud.gateway.predicate.query.enabled query Włącza predykat. true
spring.cloud.gateway.predicate.read-body.enabled read-body Włącza predykat. true
spring.cloud.gateway.predicate.remote-addr.enabled remote-addr Włącza predykat. true
spring.cloud.gateway.predicate.weight.enabled weight Włącza predykat. true
spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled xforwarded-remote-addr Włącza predykat. true
spring.cloud.gateway.set-status.original-status-header-name Nazwa nagłówka, który zawiera kod HTTP żądania proxied.
spring.cloud.gateway.streaming-media-types
spring.cloud.gateway.x-forwarded.enabled XForwardedHeadersFilter Jeśli wartość jest włączona. true
spring.cloud.gateway.x-forwarded.for-append Jeśli dołączanie X-Forwarded-For jako listy jest włączone. true
spring.cloud.gateway.x-forwarded.for-enabled Jeśli X-Forwarded-For jest włączona. true
spring.cloud.gateway.x-forwarded.host-append Jeśli dołączanie X-Forwarded-Host jako listy jest włączone. true
spring.cloud.gateway.x-forwarded.host-enabled Jeśli X-Forwarded-Host jest włączona. true
spring.cloud.gateway.x-forwarded.order Kolejność .XForwardedHeadersFilter 0
spring.cloud.gateway.x-forwarded.port-append Jeśli dołączanie X-Forwarded-Port jako listy jest włączone. true
spring.cloud.gateway.x-forwarded.port-enabled Jeśli X-Forwarded-Port jest włączona. true
spring.cloud.gateway.x-forwarded.prefix-append Jeśli dołączanie X-Forwarded-Prefix jako listy jest włączone. true
spring.cloud.gateway.x-forwarded.prefix-enabled Jeśli X-Forwarded-Prefix jest włączona. true
spring.cloud.gateway.x-forwarded.proto-append Jeśli dołączanie X-Forwarded-Proto jako listy jest włączone. true
spring.cloud.gateway.x-forwarded.proto-enabled Jeśli X-Forwarded-Proto jest włączona. true
spring.cloud.gateway.httpclient.compression Włącza kompresję dla netty HttpClient. false
spring.cloud.gateway.httpclient.connect-timeout Limit czasu połączenia w milis. Domyślna wartość to 30s.
spring.cloud.gateway.httpclient.max-header-size Maksymalny rozmiar nagłówka odpowiedzi.
spring.cloud.gateway.httpclient.max-initial-line-length Maksymalna długość linii początkowej.
spring.cloud.gateway.httpclient.pool.acquire-timeout Tylko dla typu FIXED, maksymalny czas w milis czekać na uzyskanie.
spring.cloud.gateway.httpclient.pool.eviction-interval Wykonaj regularne kontrole eksmisji w tle w określonym interwale. Wyłączone domyślnie ({@link Duration#ZERO}). 0
spring.cloud.gateway.httpclient.pool.max-connections Tylko dla typu FIXED maksymalna liczba połączeń przed rozpoczęciem oczekującego nabycia w istniejących.
spring.cloud.gateway.httpclient.pool.max-idle-time Czas w milisce, po którym kanał jest zamknięty. Jeśli NULLparametr nie ma maksymalnego czasu bezczynności.
spring.cloud.gateway.httpclient.pool.max-life-time Czas trwania, po którym kanał jest zamknięty. Jeśli NULLparametr nie ma maksymalnego czasu życia.
spring.cloud.gateway.httpclient.pool.metrics Umożliwia zbieranie i rejestrowanie metryk pul kanałów w mikrometrze. Wyłączone domyślnie. false
spring.cloud.gateway.httpclient.pool.name Nazwa mapy puli kanałów jest domyślnie ustawiona na serwer proxy. proxy
spring.cloud.gateway.httpclient.pool.type Typ puli, która ma HttpClient być używana, wartość domyślna to ELASTIC.
spring.cloud.gateway.httpclient.response-timeout Limit czasu odpowiedzi.
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout Limit czasu opróżniania PROTOKOŁU SSL close_notify . Wartość 3000 msdomyślna . 3000ms
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout Limit czasu odczytu SSL close_notify . Domyślna wartość to 0 ms. 0
spring.cloud.gateway.httpclient.ssl.handshake-timeout Limit czasu uzgadniania SSL. Domyślna wartość to 10000 ms. 10000ms
spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager Instaluje netty InsecureTrustManagerFactory. Jest to niezabezpieczone i nie jest odpowiednie dla środowiska produkcyjnego. false
spring.cloud.gateway.httpclient.websocket.max-frame-payload-length Maksymalna długość ładunku ramki.
spring.cloud.gateway.httpclient.websocket.proxy-ping Ramki ping serwera proxy do usług podrzędnych. Domyślna wartość to true. true
spring.cloud.gateway.httpclient.wiretap Włącza debugowanie podsłuchów dla netty HttpClient. false
spring.cloud.gateway.httpserver.wiretap Włącza debugowanie podsłuchów dla netty HttpServer. false
spring.cloud.gateway.metrics.enabled Umożliwia zbieranie danych metryk. false
spring.cloud.gateway.metrics.prefix Prefiks wszystkich metryk emitowanych przez bramę. spring.cloud.gateway
spring.cloud.gateway.metrics.tags Mapa tagów dodawana do metryk.
spring.cloud.gateway.observability.enabled Jeśli obsługa obserwacji mikrometrów powinna być włączona. true

Typowe konfiguracje

Poniższa lista zawiera opis typowych konfiguracji:

  • Rejestrowanie powiązanych konfiguracji:
    • logging.level.*
    • logging.group.*
    • Wszelkie inne konfiguracje w przestrzeni logging.* nazw powinny być zabronione. Na przykład zapisywanie plików dziennika przy użyciu polecenia logging.file powinno być zabronione.