Ansluta till en hanterad gateway för Spring i Azure Container Apps (förhandsversion)

Gateway for Spring är ett effektivt och kraftfullt sätt att dirigera, hantera och hantera API-begäranden som en del av en arkitektur för mikrotjänster. Den fungerar som en API Gateway som dirigerar externa begäranden till olika tjänster och lägger till olika funktioner som filtrering, belastningsutjämning med mera. I den här artikeln får du lära dig hur du skapar en gateway som dirigerar begäranden till dina containerappar.

I den här självstudien får du lära dig att:

  • Skapa en gateway för Spring Java-komponent
  • Uppdatera gatewayen för våren med anpassade vägar för att omdirigera begäranden till containerappar

Viktigt!

I den här handledningen används tjänster som kan påverka din Azure-faktura. Om du bestämmer dig för att följa med steg för steg ska du ta bort resurserna i den här artikeln för att undvika oväntad fakturering.

Förutsättningar

Att tänka på

När du kör i Gateway för Spring i Azure Container Apps bör du vara medveten om följande information:

Artikel Förklaring
Omfattning Gatewayen för Spring körs i samma miljö som den anslutna containerappen.
Resurser Containerresursallokeringen för Gateway for Spring är fast, antalet CPU-kärnor är 0,5 och minnesstorleken är 1Gi.
Prissättning Gateway for Spring-faktureringen faller under förbrukningsbaserad prissättning. Resurser som förbrukas av hanterade Java komponenter debiteras med aktiva/inaktiva priser. Du kan ta bort komponenter som inte längre används för att stoppa faktureringen.

Konfiguration

Innan du börjar arbeta med Gateway for Spring måste du först skapa nödvändiga resurser.

Kör följande kommandon för att skapa resursgruppen och Container Apps-miljön.

  1. Skapa variabler som stöd för programkonfigurationen. Dessa värden tillhandahålls för dig i den här lektionen. Vi använder administratörens aktuatorslutpunkt för spring sample-appen i den här lektionen.

    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"
    
    Variabel beskrivning
    LOCATION Den Azure region där du skapar din containerapp och Java komponent.
    ENVIRONMENT Det Azure Container Apps miljönamnet för demoprogrammet.
    RESOURCE_GROUP Namnet på Azure resursgrupp för demoprogrammet.
    JAVA_COMPONENT_NAME Namnet på den Java komponent som skapats för containerappen. I det här fallet skapar du en Gateway för Spring Java-komponent.
    IMAGE Containeravbildningen som används i containerappen.
  2. Logga in på Azure med Azure CLI.

    az login
    
  3. Skapa en resursgrupp.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Skapa din containerappmiljö.

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

    Den här miljön används för att vara värd för både Gateway for Spring-komponenten och din containerapp.

Använda komponenten Gateway for Spring Java

Nu när du har en Container Apps-miljö kan du skapa din containerapp med hjälp av en gateway för Spring Java-komponenter för att dirigera begäran till dem.

  1. Skapa komponenten Gateway for Spring Java.

    az containerapp env java-component gateway-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
    
  2. Skapa den containerapp som har det fullständigt kvalificerade domännamnet (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
    

    Det här kommandot returnerar URL:en för din containerapp som använder konfigurationsdata. Kopiera URL:en till en textredigerare så att du kan använda den i nästa steg.

Uppdatera gatewayrutter för att dirigera förfrågningar

  1. Skapa en YAML-fil med följande innehåll. Ersätt <MYAPP_URL> med containerappens FQDN från föregående steg.

    springCloudGatewayRoutes:
    - id: "route1"
      uri: "<MYAPP_URL>"
      predicates:
        - "Path=/myapp/{path}"
      filters:
        - "SetPath=/actuator/{path}"
    
  2. Kör följande kommando för att uppdatera gatewayen för Spring-komponenten med din routningskonfiguration.

    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
    

    Det här kommandot uppdaterar gatewayvägen och returnerar URL:en för din gateway som använder konfigurationsdata.

    Kommandot returnerar gatewayens URL. Om du besöker den här URL:en med sökvägen /myapp/health dirigeras begäran till appens actuator/health slutpunkt och returneras {"status":"UP","groups":["liveness","readiness"]}.

Rensa resurser

De resurser som skapas i den här självstudien påverkar din Azure-faktura. Om du inte ska använda dessa tjänster på lång sikt kör du följande kommando för att ta bort allt som skapats i den här självstudien.

az group delete --resource-group $RESOURCE_GROUP

Routningsfilformat

Gateway for Spring-komponenten har stöd för att definiera vägar via egenskaper med ID, URI, predikat och filter. Mer information finns i Dokumentation om Spring Cloud Gateway. Följande är en YAML-exempelfil som visar hur du konfigurerar dessa egenskaper.

  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 över tillåtna konfigurationer för din gateway för Spring (#configurable-properties)

I följande tabell beskrivs de gatewaykomponentegenskaper som du kan konfigurera för din app. Mer information finns i Spring Cloud Gateway Vanliga programegenskaper.

Egenskapsnamn beskrivning Standardvärde
spring.cloud.gateway.default-filters Lista över filterdefinitioner som tillämpas på varje väg.
spring.cloud.gateway.enabled Aktiverar gateway-funktioner. true
spring.cloud.gateway.fail-on-route-definition-error Alternativ för att misslyckas vid routningsdefinitionsfel, standardvärdet är true. Annars loggas en varning. true
spring.cloud.gateway.handler-mapping.order Ordningen på RoutePredicateHandlerMapping. 1
spring.cloud.gateway.loadbalancer.use404 false
spring.cloud.gateway.discovery.locator.enabled Flagga som möjliggör DiscoveryClient gatewayintegration. false
spring.cloud.gateway.discovery.locator.filters
spring.cloud.gateway.discovery.locator.include-expression SpEL-uttryck som utvärderar om en tjänst ska inkluderas i gatewayintegrering eller inte. Standardvärdet är true. true
spring.cloud.gateway.discovery.locator.lower-case-service-id Alternativ för att använda gemener på serviceId i predikat och filter. Standardvärdet är false. Användbart med Eureka när den automatiskt skriver med versaler serviceId. Så skulle MYSERVICE matcha /myservice/** false
spring.cloud.gateway.discovery.locator.predicates
spring.cloud.gateway.discovery.locator.route-id-prefix Prefixet för routeId standardinställs till discoveryClient.getClass().getSimpleName() + "_". Tjänst-ID läggs till för att skapa routeId.
spring.cloud.gateway.discovery.locator.url-expression SpEL-uttryck som skapar URI:n för varje väg. Standardvärdet är 'lb://'+serviceId. 'lb://'+serviceId
spring.cloud.gateway.filter.add-request-header.enabled add-request-header Aktiverar filtret. true
spring.cloud.gateway.filter.add-request-parameter.enabled add-request-parameter Aktiverar filtret. true
spring.cloud.gateway.filter.add-response-header.enabled add-response-header Aktiverar filtret. true
spring.cloud.gateway.filter.circuit-breaker.enabled circuit-breaker Aktiverar filtret. true
spring.cloud.gateway.filter.dedupe-response-header.enabled dedupe-response-header Aktiverar filtret. true
spring.cloud.gateway.filter.fallback-headers.enabled fallback-headers Aktiverar filtret. true
spring.cloud.gateway.filter.hystrix.enabled hystrix Aktiverar filtret. true
spring.cloud.gateway.filter.json-to-grpc.enabled Aktiverar JSON till gRPC-filtret. true
spring.cloud.gateway.filter.local-response-cache.enabled local-response-cache Aktiverar filtret. false
spring.cloud.gateway.filter.local-response-cache.request.no-cache-strategy
spring.cloud.gateway.filter.local-response-cache.size Maximal storlek på cachen för att avlägsna poster för den här rutten i KB, MB och GB.
spring.cloud.gateway.filter.local-response-cache.time-to-live Tid för att förfalla en cachepost, uttryckt i s sekunder, m i minuter och h i timmar. 5m
spring.cloud.gateway.filter.map-request-header.enabled map-request-header Aktiverar filtret. true
spring.cloud.gateway.filter.modify-request-body.enabled modify-request-body Aktiverar filtret. true
spring.cloud.gateway.filter.modify-response-body.enabled modify-response-body Aktiverar filtret. true
spring.cloud.gateway.filter.prefix-path.enabled prefix-path Aktiverar filtret. true
spring.cloud.gateway.filter.preserve-host-header.enabled preserve-host-header Aktiverar filtret. true
spring.cloud.gateway.filter.redirect-to.enabled redirect-to Aktiverar filtret. 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 Aktiverar filtret. true
spring.cloud.gateway.filter.remove-request-parameter.enabled remove-request-parameter Aktiverar filtret. true
spring.cloud.gateway.filter.remove-response-header.enabled remove-response-header Aktiverar filtret. true
spring.cloud.gateway.filter.request-header-size.enabled request-header-size Aktiverar filtret. true
spring.cloud.gateway.filter.request-header-to-request-uri.enabled request-header-to-request-uri Aktiverar filtret. 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 Aktiverar filtret. true
spring.cloud.gateway.filter.request-size.enabled request-size Aktiverar filtret. true
spring.cloud.gateway.filter.retry.enabled retry Aktiverar filtret. true
spring.cloud.gateway.filter.rewrite-location-response-header.enabled rewrite-location-response-header Aktiverar filtret. true
spring.cloud.gateway.filter.rewrite-location.enabled rewrite-location Aktiverar filtret. true
spring.cloud.gateway.filter.rewrite-path.enabled rewrite-path Aktiverar filtret. true
spring.cloud.gateway.filter.rewrite-request-parameter.enabled rewrite-request-parameter Aktiverar filtret. true
spring.cloud.gateway.filter.rewrite-response-header.enabled rewrite-response-header Aktiverar filtret. true
spring.cloud.gateway.filter.save-session.enabled save-session Aktiverar filtret. 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 Aktiverar filtret. 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 Aktiverar filtret. true
spring.cloud.gateway.filter.set-request-header.enabled set-request-header Aktiverar filtret. true
spring.cloud.gateway.filter.set-request-host-header.enabled set-request-host-header Aktiverar filtret. true
spring.cloud.gateway.filter.set-response-header.enabled set-response-header Aktiverar filtret. true
spring.cloud.gateway.filter.set-status.enabled set-status Aktiverar filtret. true
spring.cloud.gateway.filter.strip-prefix.enabled strip-prefix Aktiverar filtret. true
spring.cloud.gateway.forwarded.enabled Aktiverar ForwardedHeadersFilter. true
spring.cloud.gateway.global-filter.adapt-cached-body.enabled Aktiverar det adapt-cached-body globala filtret. true
spring.cloud.gateway.global-filter.forward-path.enabled Aktiverar det forward-path globala filtret. true
spring.cloud.gateway.global-filter.forward-routing.enabled Aktiverar det forward-routing globala filtret. true
spring.cloud.gateway.global-filter.load-balancer-client.enabled Aktiverar det load-balancer-client globala filtret. true
spring.cloud.gateway.global-filter.local-response-cache.enabled local-response-cache Aktiverar filtret för alla vägar, vilket gör att du kan lägga till en specifik konfiguration på vägnivå med hjälp av ett LocalResponseCache filter. true
spring.cloud.gateway.global-filter.netty-routing.enabled netty-routing global Aktiverar filtret. true
spring.cloud.gateway.global-filter.netty-write-response.enabled Aktiverar det netty-write-response globala filtret. true
spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled Aktiverar det reactive-load-balancer-client globala filtret. true
spring.cloud.gateway.global-filter.remove-cached-body.enabled Aktiverar det remove-cached-body globala filtret. true
spring.cloud.gateway.global-filter.route-to-request-url.enabled Aktiverar det route-to-request-url globala filtret. true
spring.cloud.gateway.global-filter.websocket-routing.enabled Aktiverar det websocket-routing globala filtret. true
spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping Om global CORS-konfiguration ska läggas till i URL-hanteraren. false
spring.cloud.gateway.globalcors.cors-configurations
spring.cloud.gateway.redis-rate-limiter.burst-capacity-header Namnet på rubriken som returnerar burstkapacitetskonfigurationen. X-RateLimit-Burst-Capacity
spring.cloud.gateway.redis-rate-limiter.config
spring.cloud.gateway.redis-rate-limiter.include-headers Om rubriker som innehåller information om hastighetsbegränsning ska inkluderas eller inte. Standardvärdet är true. true
spring.cloud.gateway.redis-rate-limiter.remaining-header Namnet på rubriken som returnerar antalet återstående begäranden under den aktuella sekunden. X-RateLimit-Remaining
spring.cloud.gateway.redis-rate-limiter.replenish-rate-header Namnet på rubriken som returnerar konfigurationen för återfyllningshastighet. X-RateLimit-Replenish-Rate
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header Namnet på rubriken som returnerar den begärda tokenkonfigurationerna. X-RateLimit-Requested-Tokens
spring.cloud.gateway.restrictive-property-accessor.enabled Begränsar metod- och egenskapsåtkomst i SpEL. true
spring.cloud.gateway.predicate.after.enabled Aktiverar predikatet after . true
spring.cloud.gateway.predicate.before.enabled Aktiverar predikatet before . true
spring.cloud.gateway.predicate.between.enabled Aktiverar predikatet between . true
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled Aktiverar predikatet cloud-foundry-route-service . true
spring.cloud.gateway.predicate.cookie.enabled Aktiverar predikatet cookie . true
spring.cloud.gateway.predicate.header.enabled Aktiverar predikatet header . true
spring.cloud.gateway.predicate.host.enabled Aktiverar predikatet host . true
spring.cloud.gateway.predicate.host.include-port Inkludera porten i matchningen av värdnamnet. true
spring.cloud.gateway.predicate.method.enabled Aktiverar predikatet method . true
spring.cloud.gateway.predicate.path.enabled Aktiverar predikatet path . true
spring.cloud.gateway.predicate.query.enabled Aktiverar predikatet query . true
spring.cloud.gateway.predicate.read-body.enabled Aktiverar predikatet read-body . true
spring.cloud.gateway.predicate.remote-addr.enabled Aktiverar predikatet remote-addr . true
spring.cloud.gateway.predicate.weight.enabled Aktiverar predikatet weight . true
spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled Aktiverar predikatet xforwarded-remote-addr . true
spring.cloud.gateway.set-status.original-status-header-name Namnet på huvud som innehåller HTTP-koden för den proxifierade begäran.
spring.cloud.gateway.streaming-media-types
spring.cloud.gateway.x-forwarded.enabled Anger om XForwardedHeadersFilter är aktiverat. true
spring.cloud.gateway.x-forwarded.for-append Om appenden av X-Forwarded-For som en lista är möjlig. true
spring.cloud.gateway.x-forwarded.for-enabled Anger om X-Forwarded-For är aktiverat. true
spring.cloud.gateway.x-forwarded.host-append Om appenden av X-Forwarded-Host som en lista är möjlig. true
spring.cloud.gateway.x-forwarded.host-enabled Anger om X-Forwarded-Host är aktiverat. true
spring.cloud.gateway.x-forwarded.order Ordningen för XForwardedHeadersFilter. 0
spring.cloud.gateway.x-forwarded.port-append Om appenden av X-Forwarded-Port som en lista är möjlig. true
spring.cloud.gateway.x-forwarded.port-enabled Anger om X-Forwarded-Port är aktiverat. true
spring.cloud.gateway.x-forwarded.prefix-append Om appenden av X-Forwarded-Prefix som en lista är möjlig. true
spring.cloud.gateway.x-forwarded.prefix-enabled Anger om X-Forwarded-Prefix är aktiverat. true
spring.cloud.gateway.x-forwarded.proto-append Om appenden av X-Forwarded-Proto som en lista är möjlig. true
spring.cloud.gateway.x-forwarded.proto-enabled Anger om X-Forwarded-Proto är aktiverat. true
spring.cloud.gateway.httpclient.compression Aktiverar komprimering för Netty HttpClient. false
spring.cloud.gateway.httpclient.connect-timeout Anslutningens tidsgräns i millisekunder. Standardvärdet är 30s.
spring.cloud.gateway.httpclient.max-header-size Den maximala svarshuvudstorleken.
spring.cloud.gateway.httpclient.max-initial-line-length Den maximala inledande radlängden.
spring.cloud.gateway.httpclient.pool.acquire-timeout Endast för typen FIXED, den maximala tiden i millisekunder att vänta på att hämtas.
spring.cloud.gateway.httpclient.pool.eviction-interval Utför regelbundna borttagningskontroller i bakgrunden med ett angivet intervall. Inaktiverad som standard ({@link Duration#ZERO}). 0
spring.cloud.gateway.httpclient.pool.max-connections Endast för typen FAST, det maximala antalet anslutningar innan du påbörjar väntande förvärv på befintliga anslutningar.
spring.cloud.gateway.httpclient.pool.max-idle-time Tid i millisekunder varefter kanalen stängs. Om NULLfinns det ingen maximal inaktivitetstid.
spring.cloud.gateway.httpclient.pool.max-life-time Varaktighet efter vilken kanalen stängs. Om NULLfinns det ingen maxlivstid.
spring.cloud.gateway.httpclient.pool.metrics Gör att mått för kanalpooler kan samlas in och registreras i Mikrometer. Inaktiverat som standard. false
spring.cloud.gateway.httpclient.pool.name Mappningsnamnet för kanalpoolen. Standardvärdet är proxy. proxy
spring.cloud.gateway.httpclient.pool.type Typ av pool som HttpClient ska använda, standardmässigt ELASTIC.
spring.cloud.gateway.httpclient.response-timeout Tidsgränsen för svar.
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout SSL-tömningstimeout close_notify . Standardvärdet är 3000 ms. 3000ms
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout SSL-läsningstidsgräns close_notify. Standardvärdet är 0 ms. 0
spring.cloud.gateway.httpclient.ssl.handshake-timeout Tidsgräns för SSL-handskakning. Standardvärdet är 10000 ms. 10000ms
spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager Installerar netty InsecureTrustManagerFactory. Det här värdet är osäkert och lämpar sig inte för produktion. false
spring.cloud.gateway.httpclient.websocket.max-frame-payload-length Maximal ramnyttolastlängd.
spring.cloud.gateway.httpclient.websocket.proxy-ping Pinga proxyramar till underordnade tjänster. Standardvärdet är true. true
spring.cloud.gateway.httpclient.wiretap Aktiverar avlyssningsfelsökning för Netty HttpClient. false
spring.cloud.gateway.httpserver.wiretap Aktiverar avlyssningsfelsökning för Netty HttpServer. false
spring.cloud.gateway.metrics.enabled Aktiverar insamling av måttdata. false
spring.cloud.gateway.metrics.prefix Prefixet för alla mått som genereras av gatewayen. spring.cloud.gateway
spring.cloud.gateway.metrics.tags Mappning av taggar som har lagts till i mått.
spring.cloud.gateway.observability.enabled Anger om stöd för mikrometerobservabilitet ska vara aktiverat. true

Vanliga konfigurationer

I följande lista beskrivs vanliga konfigurationer:

  • Loggningsrelaterade konfigurationer:
    • logging.level.*
    • logging.group.*
    • Alla andra konfigurationer under logging.* namnområdet bör förbjudas. Det bör till exempel vara förbjudet att skriva loggfiler med hjälp av logging.file.