Dela via


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 självstudien 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 for Spring i Azure Container Apps bör du vara medveten om följande information:

Artikel Förklaring
Definitionsområde 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 används av hanterade Java-komponenter debiteras enligt aktiva/inaktiva priser. Du kan ta bort komponenter som inte längre används för att stoppa faktureringen.

Ställ in

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"
    
    Olika beskrivning
    LOCATION Den Plats i Azure-regionen där du skapar din containerapp och Java-komponent.
    ENVIRONMENT Miljönamnet för Azure Container Apps för ditt demoprogram.
    RESOURCE_GROUP Namnet på Azure-resursgruppen för demoprogrammet.
    JAVA_COMPONENT_NAME Namnet på Java-komponenten 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 gatewayen för Spring Java-komponenten

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 gatewayvägarna till routningsbegäranden

  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 egenskaper)

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 gatewayintegrering. 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 gemener serviceId i predikat och filter. Standardvärdet är false. Användbart med Eureka när det automatiskt versaler serviceId. Så skulle MYSERVICE matcha /myservice/** false
spring.cloud.gateway.discovery.locator.predicates
spring.cloud.gateway.discovery.locator.route-id-prefix Prefixet routeIdför , är discoveryClient.getClass().getSimpleName() som standard + "_". 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 ta bort poster för den här vägen 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 ForwardedHeadersFilterAktiverar . 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å huvudet som returnerar kapacitetskonfigurationen för burst. 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å huvudet som returnerar konfigurationen av påfyllningshastigheten. X-RateLimit-Replenish-Rate
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header Namnet på huvudet som returnerar den begärda tokenkonfigurationen. 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 som matchar 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å rubriken som innehåller HTTP-koden för den proxied begäran.
spring.cloud.gateway.streaming-media-types
spring.cloud.gateway.x-forwarded.enabled Om är XForwardedHeadersFilter aktiverat. true
spring.cloud.gateway.x-forwarded.for-append Om du lägger till X-Forwarded-For som en lista är aktiverat. true
spring.cloud.gateway.x-forwarded.for-enabled Om X-Forwarded-For är aktiverat. true
spring.cloud.gateway.x-forwarded.host-append Om du lägger till X-Forwarded-Host som en lista är aktiverat. true
spring.cloud.gateway.x-forwarded.host-enabled Om X-Forwarded-Host är aktiverat. true
spring.cloud.gateway.x-forwarded.order Ordningen på XForwardedHeadersFilter. 0
spring.cloud.gateway.x-forwarded.port-append Om du lägger till X-Forwarded-Port som en lista är aktiverat. true
spring.cloud.gateway.x-forwarded.port-enabled Om X-Forwarded-Port är aktiverat. true
spring.cloud.gateway.x-forwarded.prefix-append Om du lägger till X-Forwarded-Prefix som en lista är aktiverat. true
spring.cloud.gateway.x-forwarded.prefix-enabled Om X-Forwarded-Prefix är aktiverat. true
spring.cloud.gateway.x-forwarded.proto-append Om du lägger till X-Forwarded-Proto som en lista är aktiverat. true
spring.cloud.gateway.x-forwarded.proto-enabled 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 Den anslutna tidsgränsen i millis. 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 typ FIXED, den maximala tiden i millis att vänta på att förvärvas.
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 millis varefter kanalen är stängd. 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 Kanalpoolens mappningsnamn, som standard är proxy. proxy
spring.cloud.gateway.httpclient.pool.type Typ av pool som HttpClient ska användas, standardvärdet ELASTICär .
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 3000 ms. 3000ms
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout Tidsgräns för SSL-läsning 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. Detta ä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 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 logging.file av.