Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Brána for Spring nabízí efektivní a výkonný způsob směrování, správy a zpracování požadavků rozhraní API v rámci architektury mikroslužeb. Slouží jako brána rozhraní API, která směruje externí požadavky do různých služeb a přidává různé funkce, jako je filtrování, vyrovnávání zatížení a další. V tomto článku se dozvíte, jak vytvořit bránu, která směruje požadavky na vaše kontejnerové aplikace.
V tomto kurzu se naučíte:
- Vytvoření brány pro komponentu Spring Java
- Aktualizace brány pro spring s využitím vlastních tras pro přesměrování požadavků do kontejnerových aplikací
Důležité
V tomto návodu se používají služby, které mohou ovlivnit vaše vyúčtování za Azure. Pokud se rozhodnete postupovat podle podrobných pokynů, nezapomeňte odstranit prostředky doporučené v tomto článku, abyste se vyhnuli neočekávané fakturaci.
Požadavky
Hlediska
Při spuštění ve službě Gateway for Spring in Azure Container Apps mějte na paměti následující podrobnosti:
| Položka | Vysvětlení |
|---|---|
| Scope | Brána Spring běží ve stejném prostředí jako připojená kontejnerová aplikace. |
| Materiály | Přidělení prostředků kontejneru pro bránu pro Spring je pevné, počet jader procesoru je 0,5 a velikost paměti je 1Gi. |
| Ceny | Fakturace pro bránu Spring spadá do kategorie cen stanovených podle spotřeby. Prostředky spotřebované spravovanými komponentami Java se účtují podle sazeb za aktivní a nečinné stavy. K zastavení fakturace můžete odstranit komponenty, které se už nepoužívají. |
Nastavení
Než začnete pracovat s bránou pro Spring, musíte nejprve vytvořit požadované prostředky.
Spuštěním následujících příkazů vytvořte skupinu prostředků a prostředí Container Apps.
Vytvořte proměnné pro podporu konfigurace aplikace. Tyto hodnoty jsou k dispozici pro účely této lekce. V této lekci používáme endpoint actuatoru administrátora pro ukázkovou aplikaci 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"Proměnná Popis LOCATIONUmístění Azure oblasti, kde vytvoříte aplikaci kontejneru a Java komponentu. ENVIRONMENTNázev Azure Container Apps prostředí pro vaši ukázkovou aplikaci. RESOURCE_GROUPNázev skupiny prostředků Azure pro ukázkovou aplikaci. JAVA_COMPONENT_NAMENázev komponenty Java vytvořené pro vaši aplikaci kontejneru. V tomto případě vytvoříte bránu pro komponentu Spring Java. IMAGEImage kontejneru použitá v aplikaci kontejneru. Přihlaste se k Azure pomocí Azure CLI.
az loginVytvořte skupinu prostředků.
az group create --name $RESOURCE_GROUP --location $LOCATIONVytvořte prostředí kontejnerových aplikací.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATIONToto prostředí se používá k hostování komponenty Brány pro Spring i aplikace typu kontejner.
Použití komponenty Gateway for Spring Java
Teď, když máte prostředí Container Apps, můžete vytvořit aplikaci kontejneru pomocí brány pro komponenty Spring Java ke směrování požadavků na ně.
Vytvořte komponentu Gateway for Spring Java.
az containerapp env java-component gateway-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \Vytvořte aplikaci kontejneru, která má plně kvalifikovaný název domény (FQDN).
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --ingress external \ --target-port 8080 \ --query properties.configuration.ingress.fqdnTento příkaz vrátí adresu URL vaší aplikace kontejneru, která využívá konfigurační data. Zkopírujte adresu URL do textového editoru, abyste ji mohli použít v dalším kroku.
Aktualizujte trasy brány pro směrování požadavků
Vytvořte soubor YAML s následujícím obsahem. Nahraďte
<MYAPP_URL>plně kvalifikovaným názvem domény aplikace kontejneru z předchozího kroku.springCloudGatewayRoutes: - id: "route1" uri: "<MYAPP_URL>" predicates: - "Path=/myapp/{path}" filters: - "SetPath=/actuator/{path}"Spusťte následující příkaz k aktualizaci komponenty Spring Gateway pomocí vaší konfigurace 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.fqdnTento příkaz aktualizuje trasu brány a vrátí adresu URL brány, která využívá konfigurační data.
Příkaz vrátí adresu URL brány. Při návštěvě této adresy URL s cestou
/myapp/healthby se měl požadavek směrovat na koncový bod vaší aplikaceactuator/health, a{"status":"UP","groups":["liveness","readiness"]}vrátí.
Uvolnit zdroje
Prostředky vytvořené v tomto kurzu mají vliv na fakturu za Azure. Pokud tyto služby nebudete používat dlouhodobě, spuštěním následujícího příkazu odeberte vše vytvořené v tomto kurzu.
az group delete --resource-group $RESOURCE_GROUP
Formát souboru trasy
Komponenta Gateway for Spring podporuje definování tras prostřednictvím vlastností s ID, identifikátorem URI, predikáty a filtry. Další informace najdete v dokumentaci ke službě Spring Cloud Gateway. Následuje příklad souboru YAML, který ukazuje, jak tyto vlastnosti nakonfigurovat.
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}"
Seznam povolených konfigurací pro bránu pro Spring (#configurable-properties)
Následující tabulka popisuje vlastnosti komponenty brány, které můžete pro aplikaci nakonfigurovat. Další informace naleznete v tématu Spring Cloud Gateway Společné vlastnosti aplikace.
| Název vlastnosti | Popis | Výchozí hodnota |
|---|---|---|
spring.cloud.gateway.default-filters |
Seznam definic filtrů, které se použijí pro každou trasu | |
spring.cloud.gateway.enabled |
Umožňuje funkcionalitu brány. | true |
spring.cloud.gateway.fail-on-route-definition-error |
Možnost selhat při chybách definice trasy, výchozí hodnota je pravda. V opačném případě se zaprotokoluje upozornění. | true |
spring.cloud.gateway.handler-mapping.order |
Pořadí RoutePredicateHandlerMapping. |
1 |
spring.cloud.gateway.loadbalancer.use404 |
false |
|
spring.cloud.gateway.discovery.locator.enabled |
Příznak, který umožňuje integraci brány DiscoveryClient. |
false |
spring.cloud.gateway.discovery.locator.filters |
||
spring.cloud.gateway.discovery.locator.include-expression |
Výraz SpEL, který vyhodnocuje, jestli se má zahrnout služba do integrace brány, nebo ne. Výchozí hodnota je true. |
true |
spring.cloud.gateway.discovery.locator.lower-case-service-id |
Možnost malého písmena serviceId v predikátech a filtrech Výchozí hodnota je false. Užitečné s Eureka, když automaticky píše velkými písmeny serviceId.
MYSERVICE To by se tedy shodovalo./myservice/** |
false |
spring.cloud.gateway.discovery.locator.predicates |
||
spring.cloud.gateway.discovery.locator.route-id-prefix |
Výchozí hodnotou pro předponu routeId je discoveryClient.getClass().getSimpleName() + "_". K vytvoření routeId se připojí ID služby. |
|
spring.cloud.gateway.discovery.locator.url-expression |
Výraz SpEL, který vytvoří identifikátor URI pro každou trasu. Výchozí hodnota je 'lb://'+serviceId. |
'lb://'+serviceId |
spring.cloud.gateway.filter.add-request-header.enabled |
add-request-header Povolí filtr. |
true |
spring.cloud.gateway.filter.add-request-parameter.enabled |
add-request-parameter Povolí filtr. |
true |
spring.cloud.gateway.filter.add-response-header.enabled |
add-response-header Povolí filtr. |
true |
spring.cloud.gateway.filter.circuit-breaker.enabled |
circuit-breaker Povolí filtr. |
true |
spring.cloud.gateway.filter.dedupe-response-header.enabled |
dedupe-response-header Povolí filtr. |
true |
spring.cloud.gateway.filter.fallback-headers.enabled |
fallback-headers Povolí filtr. |
true |
spring.cloud.gateway.filter.hystrix.enabled |
hystrix Povolí filtr. |
true |
spring.cloud.gateway.filter.json-to-grpc.enabled |
Povolí json pro filtr gRPC. | true |
spring.cloud.gateway.filter.local-response-cache.enabled |
local-response-cache Povolí filtr. |
false |
spring.cloud.gateway.filter.local-response-cache.request.no-cache-strategy |
||
spring.cloud.gateway.filter.local-response-cache.size |
Maximální velikost mezipaměti, ve které lze vyřadit položky této trasy v kB, MB a GB. | |
spring.cloud.gateway.filter.local-response-cache.time-to-live |
Doba vypršení platnosti položky mezipaměti vyjádřená v s sekundách, m v řádu minut a h hodin. |
5m |
spring.cloud.gateway.filter.map-request-header.enabled |
map-request-header Povolí filtr. |
true |
spring.cloud.gateway.filter.modify-request-body.enabled |
modify-request-body Povolí filtr. |
true |
spring.cloud.gateway.filter.modify-response-body.enabled |
modify-response-body Povolí filtr. |
true |
spring.cloud.gateway.filter.prefix-path.enabled |
prefix-path Povolí filtr. |
true |
spring.cloud.gateway.filter.preserve-host-header.enabled |
preserve-host-header Povolí filtr. |
true |
spring.cloud.gateway.filter.redirect-to.enabled |
redirect-to Povolí 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 Povolí filtr. |
true |
spring.cloud.gateway.filter.remove-request-parameter.enabled |
remove-request-parameter Povolí filtr. |
true |
spring.cloud.gateway.filter.remove-response-header.enabled |
remove-response-header Povolí filtr. |
true |
spring.cloud.gateway.filter.request-header-size.enabled |
request-header-size Povolí filtr. |
true |
spring.cloud.gateway.filter.request-header-to-request-uri.enabled |
request-header-to-request-uri Povolí 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 Povolí filtr. |
true |
spring.cloud.gateway.filter.request-size.enabled |
request-size Povolí filtr. |
true |
spring.cloud.gateway.filter.retry.enabled |
retry Povolí filtr. |
true |
spring.cloud.gateway.filter.rewrite-location-response-header.enabled |
rewrite-location-response-header Povolí filtr. |
true |
spring.cloud.gateway.filter.rewrite-location.enabled |
rewrite-location Povolí filtr. |
true |
spring.cloud.gateway.filter.rewrite-path.enabled |
rewrite-path Povolí filtr. |
true |
spring.cloud.gateway.filter.rewrite-request-parameter.enabled |
rewrite-request-parameter Povolí filtr. |
true |
spring.cloud.gateway.filter.rewrite-response-header.enabled |
rewrite-response-header Povolí filtr. |
true |
spring.cloud.gateway.filter.save-session.enabled |
save-session Povolí 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 Povolí 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 Povolí filtr. |
true |
spring.cloud.gateway.filter.set-request-header.enabled |
set-request-header Povolí filtr. |
true |
spring.cloud.gateway.filter.set-request-host-header.enabled |
set-request-host-header Povolí filtr. |
true |
spring.cloud.gateway.filter.set-response-header.enabled |
set-response-header Povolí filtr. |
true |
spring.cloud.gateway.filter.set-status.enabled |
set-status Povolí filtr. |
true |
spring.cloud.gateway.filter.strip-prefix.enabled |
strip-prefix Povolí filtr. |
true |
spring.cloud.gateway.forwarded.enabled |
Povolí ForwardedHeadersFilter. |
true |
spring.cloud.gateway.global-filter.adapt-cached-body.enabled |
adapt-cached-body Povolí globální filtr. |
true |
spring.cloud.gateway.global-filter.forward-path.enabled |
forward-path Povolí globální filtr. |
true |
spring.cloud.gateway.global-filter.forward-routing.enabled |
forward-routing Povolí globální filtr. |
true |
spring.cloud.gateway.global-filter.load-balancer-client.enabled |
load-balancer-client Povolí globální filtr. |
true |
spring.cloud.gateway.global-filter.local-response-cache.enabled |
local-response-cache Povolí filtr pro všechny trasy, což umožňuje přidat konkrétní konfiguraci na úrovni trasy pomocí LocalResponseCache filtru. |
true |
spring.cloud.gateway.global-filter.netty-routing.enabled |
netty-routing global Povolí filtr. |
true |
spring.cloud.gateway.global-filter.netty-write-response.enabled |
netty-write-response Povolí globální filtr. |
true |
spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled |
reactive-load-balancer-client Povolí globální filtr. |
true |
spring.cloud.gateway.global-filter.remove-cached-body.enabled |
remove-cached-body Povolí globální filtr. |
true |
spring.cloud.gateway.global-filter.route-to-request-url.enabled |
route-to-request-url Povolí globální filtr. |
true |
spring.cloud.gateway.global-filter.websocket-routing.enabled |
websocket-routing Povolí globální filtr. |
true |
spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping |
Pokud by se globální konfigurace CORS měla přidat k obsluze adresy URL. | false |
spring.cloud.gateway.globalcors.cors-configurations |
||
spring.cloud.gateway.redis-rate-limiter.burst-capacity-header |
Název hlavičky, která vrací konfiguraci nárazové kapacity. | X-RateLimit-Burst-Capacity |
spring.cloud.gateway.redis-rate-limiter.config |
||
spring.cloud.gateway.redis-rate-limiter.include-headers |
Zda zahrnout hlavičky obsahující informace o limitátoru rychlosti. Výchozí hodnota je true. |
true |
spring.cloud.gateway.redis-rate-limiter.remaining-header |
Název hlavičky, která vrací počet zbývajících požadavků během aktuální sekundy. | X-RateLimit-Remaining |
spring.cloud.gateway.redis-rate-limiter.replenish-rate-header |
Název hlavičky, která vrací konfiguraci rychlosti doplňování. | X-RateLimit-Replenish-Rate |
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header |
Název hlavičky, která vrací požadovanou konfiguraci tokenů. | X-RateLimit-Requested-Tokens |
spring.cloud.gateway.restrictive-property-accessor.enabled |
Omezuje přístup k metodám a vlastnostem v spEL. | true |
spring.cloud.gateway.predicate.after.enabled |
Povolí after predikát. |
true |
spring.cloud.gateway.predicate.before.enabled |
Povolí before predikát. |
true |
spring.cloud.gateway.predicate.between.enabled |
Povolí between predikát. |
true |
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled |
Povolí cloud-foundry-route-service predikát. |
true |
spring.cloud.gateway.predicate.cookie.enabled |
Povolí cookie predikát. |
true |
spring.cloud.gateway.predicate.header.enabled |
Povolí header predikát. |
true |
spring.cloud.gateway.predicate.host.enabled |
Povolí host predikát. |
true |
spring.cloud.gateway.predicate.host.include-port |
Zahrňte port do odpovídajícího názvu hostitele. | true |
spring.cloud.gateway.predicate.method.enabled |
Povolí method predikát. |
true |
spring.cloud.gateway.predicate.path.enabled |
Povolí path predikát. |
true |
spring.cloud.gateway.predicate.query.enabled |
Povolí query predikát. |
true |
spring.cloud.gateway.predicate.read-body.enabled |
Povolí read-body predikát. |
true |
spring.cloud.gateway.predicate.remote-addr.enabled |
Povolí remote-addr predikát. |
true |
spring.cloud.gateway.predicate.weight.enabled |
Povolí weight predikát. |
true |
spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled |
Povolí xforwarded-remote-addr predikát. |
true |
spring.cloud.gateway.set-status.original-status-header-name |
Název hlavičky, která obsahuje kód HTTP pro přeposlaný požadavek. | |
spring.cloud.gateway.streaming-media-types |
||
spring.cloud.gateway.x-forwarded.enabled |
Určuje, jestli XForwardedHeadersFilter je povoleno. |
true |
spring.cloud.gateway.x-forwarded.for-append |
Pokud je povoleno připojit X-Forwarded-For jako seznam. |
true |
spring.cloud.gateway.x-forwarded.for-enabled |
Určuje, jestli X-Forwarded-For je povoleno. |
true |
spring.cloud.gateway.x-forwarded.host-append |
Pokud je povoleno připojit X-Forwarded-Host jako seznam. |
true |
spring.cloud.gateway.x-forwarded.host-enabled |
Určuje, jestli X-Forwarded-Host je povoleno. |
true |
spring.cloud.gateway.x-forwarded.order |
Pořadí XForwardedHeadersFilter. |
0 |
spring.cloud.gateway.x-forwarded.port-append |
Pokud je povoleno připojit X-Forwarded-Port jako seznam. |
true |
spring.cloud.gateway.x-forwarded.port-enabled |
Určuje, jestli X-Forwarded-Port je povoleno. |
true |
spring.cloud.gateway.x-forwarded.prefix-append |
Pokud je povoleno připojit X-Forwarded-Prefix jako seznam. |
true |
spring.cloud.gateway.x-forwarded.prefix-enabled |
Určuje, jestli X-Forwarded-Prefix je povoleno. |
true |
spring.cloud.gateway.x-forwarded.proto-append |
Pokud je povoleno připojit X-Forwarded-Proto jako seznam. |
true |
spring.cloud.gateway.x-forwarded.proto-enabled |
Určuje, jestli X-Forwarded-Proto je povoleno. |
true |
spring.cloud.gateway.httpclient.compression |
Povolí kompresi pro Netty HttpClient. |
false |
spring.cloud.gateway.httpclient.connect-timeout |
Časový limit připojení v milisekundách. Výchozí hodnota je 30s. |
|
spring.cloud.gateway.httpclient.max-header-size |
Maximální velikost hlavičky odpovědi. | |
spring.cloud.gateway.httpclient.max-initial-line-length |
Maximální počáteční délka čáry. | |
spring.cloud.gateway.httpclient.pool.acquire-timeout |
Pouze pro typ FIXED je maximální doba čekání na získání nastavena na milisekundy. |
|
spring.cloud.gateway.httpclient.pool.eviction-interval |
Proveďte pravidelné kontroly vyřazení na pozadí v zadaném intervalu. Ve výchozím nastavení je zakázáno ({@link Duration#ZERO}). |
0 |
spring.cloud.gateway.httpclient.pool.max-connections |
Pouze pro typ FIXED, maximální počet připojení před zahájením čekání na získání u stávajících. | |
spring.cloud.gateway.httpclient.pool.max-idle-time |
Čas v milisekundách, po kterém se kanál zavře. Pokud NULLneexistuje maximální doba nečinnosti. |
|
spring.cloud.gateway.httpclient.pool.max-life-time |
Doba trvání, po které se kanál zavře. Pokud NULLneexistuje maximální doba života. |
|
spring.cloud.gateway.httpclient.pool.metrics |
Umožňuje shromažďování a registraci metrik fondů kanálů v Micrometeru. Ve výchozím nastavení vypnuto. | false |
spring.cloud.gateway.httpclient.pool.name |
Název mapy fondu kanálů. Výchozí hodnota je proxy. |
proxy |
spring.cloud.gateway.httpclient.pool.type |
Typ fondu pro HttpClient, který má být použit, výchozí hodnota je ELASTIC. |
|
spring.cloud.gateway.httpclient.response-timeout |
Časový limit odpovědi. | |
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout |
Časový limit vyprázdnění protokolu SSL close_notify vypršel. Výchozí hodnota je 3000 ms. |
3000ms |
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout |
Vypršel časový limit čtení SSL close_notify. Výchozí hodnota je 0 ms. |
0 |
spring.cloud.gateway.httpclient.ssl.handshake-timeout |
Vypršení časového limitu handshake protokolu SSL. Výchozí hodnota je 10000 ms. |
10000ms |
spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager |
Nainstaluje Netty InsecureTrustManagerFactory. Tato hodnota je nezabezpečená a není vhodná pro produkční prostředí. |
false |
spring.cloud.gateway.httpclient.websocket.max-frame-payload-length |
Maximální délka datové části rámu. | |
spring.cloud.gateway.httpclient.websocket.proxy-ping |
Proxy ping pakety do podřízených služeb. Výchozí hodnota je true. |
true |
spring.cloud.gateway.httpclient.wiretap |
Povolí ladění wiretap pro Netty HttpClient. |
false |
spring.cloud.gateway.httpserver.wiretap |
Povolí ladění wiretap pro Netty HttpServer. |
false |
spring.cloud.gateway.metrics.enabled |
Povolí shromažďování dat metrik. | false |
spring.cloud.gateway.metrics.prefix |
Předpona všech metrik vygenerovaných bránou | spring.cloud.gateway |
spring.cloud.gateway.metrics.tags |
Mapa značek, která byla přidána do metrik. | |
spring.cloud.gateway.observability.enabled |
Určuje, jestli má být zapnutá podpora pozorování mikrometrů. | true |
Běžné konfigurace
Následující seznam popisuje běžné konfigurace:
- Konfigurace související s protokolováním:
logging.level.*logging.group.*- Všechny ostatní konfigurace v jmenném prostoru
logging.*by měly být zakázané. Například zápis souborů protokolu pomocílogging.fileby měl být zakázán.