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
- 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/health
dirigeras begäran till appensactuator/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 routeId fö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 |
ForwardedHeadersFilter Aktiverar . |
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 NULL finns det ingen maximal inaktivitetstid. |
|
spring.cloud.gateway.httpclient.pool.max-life-time |
Varaktighet efter vilken kanalen stängs. Om NULL finns 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älplogging.file
av.