Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
- Ett Azure-konto med en aktiv prenumeration. Om du inte redan har en kan du skapa en kostnadsfritt.
- Azure CLI.
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.
- 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. 
- Logga in på Azure med Azure CLI. - az login
- Skapa en resursgrupp. - az group create --name $RESOURCE_GROUP --location $LOCATION
- 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.
- 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 \
- 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
- 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}"
- 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/healthdirigeras begäran till appens- actuator/healthslutpunkt 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 DiscoveryClientgatewayintegrering. | 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 serviceIdi predikat och filter. Standardvärdet ärfalse. Användbart med Eureka när det automatiskt versalerserviceId. Så skulleMYSERVICEmatcha/myservice/** | false | 
| spring.cloud.gateway.discovery.locator.predicates | ||
| spring.cloud.gateway.discovery.locator.route-id-prefix | Prefixet routeIdför , ärdiscoveryClient.getClass().getSimpleName()som standard + "_". Tjänst-ID läggs till för att skaparouteId. | |
| 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-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.add-request-parameter.enabled | add-request-parameterAktiverar filtret. | true | 
| spring.cloud.gateway.filter.add-response-header.enabled | add-response-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.circuit-breaker.enabled | circuit-breakerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.dedupe-response-header.enabled | dedupe-response-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.fallback-headers.enabled | fallback-headersAktiverar filtret. | true | 
| spring.cloud.gateway.filter.hystrix.enabled | hystrixAktiverar 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-cacheAktiverar 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 ssekunder,mi minuter ochhi timmar. | 5m | 
| spring.cloud.gateway.filter.map-request-header.enabled | map-request-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.modify-request-body.enabled | modify-request-bodyAktiverar filtret. | true | 
| spring.cloud.gateway.filter.modify-response-body.enabled | modify-response-bodyAktiverar filtret. | true | 
| spring.cloud.gateway.filter.prefix-path.enabled | prefix-pathAktiverar filtret. | true | 
| spring.cloud.gateway.filter.preserve-host-header.enabled | preserve-host-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.redirect-to.enabled | redirect-toAktiverar 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-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.remove-request-parameter.enabled | remove-request-parameterAktiverar filtret. | true | 
| spring.cloud.gateway.filter.remove-response-header.enabled | remove-response-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.request-header-size.enabled | request-header-sizeAktiverar filtret. | true | 
| spring.cloud.gateway.filter.request-header-to-request-uri.enabled | request-header-to-request-uriAktiverar 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-limiterAktiverar filtret. | true | 
| spring.cloud.gateway.filter.request-size.enabled | request-sizeAktiverar filtret. | true | 
| spring.cloud.gateway.filter.retry.enabled | retryAktiverar filtret. | true | 
| spring.cloud.gateway.filter.rewrite-location-response-header.enabled | rewrite-location-response-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.rewrite-location.enabled | rewrite-locationAktiverar filtret. | true | 
| spring.cloud.gateway.filter.rewrite-path.enabled | rewrite-pathAktiverar filtret. | true | 
| spring.cloud.gateway.filter.rewrite-request-parameter.enabled | rewrite-request-parameterAktiverar filtret. | true | 
| spring.cloud.gateway.filter.rewrite-response-header.enabled | rewrite-response-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.save-session.enabled | save-sessionAktiverar 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-headersAktiverar 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-pathAktiverar filtret. | true | 
| spring.cloud.gateway.filter.set-request-header.enabled | set-request-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.set-request-host-header.enabled | set-request-host-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.set-response-header.enabled | set-response-headerAktiverar filtret. | true | 
| spring.cloud.gateway.filter.set-status.enabled | set-statusAktiverar filtret. | true | 
| spring.cloud.gateway.filter.strip-prefix.enabled | strip-prefixAktiverar filtret. | true | 
| spring.cloud.gateway.forwarded.enabled | ForwardedHeadersFilterAktiverar . | true | 
| spring.cloud.gateway.global-filter.adapt-cached-body.enabled | Aktiverar det adapt-cached-bodyglobala filtret. | true | 
| spring.cloud.gateway.global-filter.forward-path.enabled | Aktiverar det forward-pathglobala filtret. | true | 
| spring.cloud.gateway.global-filter.forward-routing.enabled | Aktiverar det forward-routingglobala filtret. | true | 
| spring.cloud.gateway.global-filter.load-balancer-client.enabled | Aktiverar det load-balancer-clientglobala filtret. | true | 
| spring.cloud.gateway.global-filter.local-response-cache.enabled | local-response-cacheAktiverar 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 ettLocalResponseCachefilter. | true | 
| spring.cloud.gateway.global-filter.netty-routing.enabled | netty-routing globalAktiverar filtret. | true | 
| spring.cloud.gateway.global-filter.netty-write-response.enabled | Aktiverar det netty-write-responseglobala filtret. | true | 
| spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled | Aktiverar det reactive-load-balancer-clientglobala filtret. | true | 
| spring.cloud.gateway.global-filter.remove-cached-body.enabled | Aktiverar det remove-cached-bodyglobala filtret. | true | 
| spring.cloud.gateway.global-filter.route-to-request-url.enabled | Aktiverar det route-to-request-urlglobala filtret. | true | 
| spring.cloud.gateway.global-filter.websocket-routing.enabled | Aktiverar det websocket-routingglobala 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 XForwardedHeadersFilteraktiverat. | true | 
| spring.cloud.gateway.x-forwarded.for-append | Om du lägger till X-Forwarded-Forsom 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-Hostsom 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-Portsom 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-Prefixsom 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-Protosom 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 HttpClientska användas, standardvärdetELASTICä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ärdet3000 ms. | 3000ms | 
| spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout | Tidsgräns för SSL-läsning close_notify. Standardvärdet är0 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älplogging.fileav.