Kurz: Připojení ke spravované bráně pro Spring v Azure Container Apps (Preview)
Brána pro Spring nabízí efektivní a výkonný způsob směrování, správu 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 kurzu se používají služby, které můžou ovlivnit fakturu 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
- Účet Azure s aktivním předplatným. Pokud ho ještě nemáte, můžete si ho zdarma vytvořit.
- Rozhraní příkazového řádku Azure.
Důležité informace
Při spuštění ve službě Gateway for Spring v Azure Container Apps mějte na paměti následující podrobnosti:
Položka | Vysvětlení |
---|---|
Scope | Brána for Spring běží ve stejném prostředí jako připojená aplikace kontejneru. |
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 brány pro Spring spadá do cen založených na spotřebě. Prostředky spotřebované spravovanými komponentami Java se účtují podle sazby aktivní/nečinné. Můžete odstranit komponenty, které se už nepoužívají k zastavení fakturace. |
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 koncový bod poháněcího zařízení správce 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 LOCATION
Umístění oblasti Azure, kam vytvoříte aplikaci kontejneru a komponentu Java. ENVIRONMENT
Název prostředí Azure Container Apps pro vaši ukázkovou aplikaci. RESOURCE_GROUP
Název skupiny prostředků Azure pro ukázkovou aplikaci JAVA_COMPONENT_NAME
Název komponenty Java vytvořené pro vaši aplikaci kontejneru. V tomto případě vytvoříte bránu pro komponentu Spring Java. IMAGE
Image kontejneru použitá v aplikaci kontejneru. Přihlaste se k Azure pomocí Azure CLI.
az login
Vytvořte skupinu prostředků.
az group create --name $RESOURCE_GROUP --location $LOCATION
Vytvořte prostředí kontejnerových aplikací.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Toto 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.fqdn
Tento 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.
Aktualizace tras brány pro směrování požadavků
Vytvořte soubor YAML s následujícím obsahem. Nahraďte
<MYAPP_URL>
plně kvalifikovaný název domény aplikace kontejneru z předchozího kroku.springCloudGatewayRoutes: - id: "route1" uri: "<MYAPP_URL>" predicates: - "Path=/myapp/{path}" filters: - "SetPath=/actuator/{path}"
Spuštěním následujícího příkazu aktualizujte komponentu Brány pro Spring pomocí 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.fqdn
Tento 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/health
by se měl požadavek směrovat na koncový bod vaší aplikaceactuator/health
, který{"status":"UP","groups":["liveness","readiness"]}
vrací .
Vyčištění prostředků
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 směrovat soubor
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 | Default value |
---|---|---|
spring.cloud.gateway.default-filters |
Seznam definic filtrů, které se použijí pro každou trasu | |
spring.cloud.gateway.enabled |
Povolí funkce brány. | true |
spring.cloud.gateway.fail-on-route-definition-error |
Možnost selhání chyb definice trasy, výchozí hodnota je true. 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 DiscoveryClient integraci brány. |
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 velká písmena serviceId . MYSERVICE To by se tedy shodovalo./myservice/** |
false |
spring.cloud.gateway.discovery.locator.predicates |
||
spring.cloud.gateway.discovery.locator.route-id-prefix |
Předpona routeId pro , výchozí hodnota 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 pro vyřazení položek pro tuto trasu 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 do obslužné rutiny 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 četnosti 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 |
after Povolí predikát. |
true |
spring.cloud.gateway.predicate.before.enabled |
before Povolí predikát. |
true |
spring.cloud.gateway.predicate.between.enabled |
between Povolí predikát. |
true |
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled |
cloud-foundry-route-service Povolí predikát. |
true |
spring.cloud.gateway.predicate.cookie.enabled |
cookie Povolí predikát. |
true |
spring.cloud.gateway.predicate.header.enabled |
header Povolí predikát. |
true |
spring.cloud.gateway.predicate.host.enabled |
host Povolí 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 |
method Povolí predikát. |
true |
spring.cloud.gateway.predicate.path.enabled |
path Povolí predikát. |
true |
spring.cloud.gateway.predicate.query.enabled |
query Povolí predikát. |
true |
spring.cloud.gateway.predicate.read-body.enabled |
read-body Povolí predikát. |
true |
spring.cloud.gateway.predicate.remote-addr.enabled |
remote-addr Povolí predikát. |
true |
spring.cloud.gateway.predicate.weight.enabled |
weight Povolí predikát. |
true |
spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled |
xforwarded-remote-addr Povolí predikát. |
true |
spring.cloud.gateway.set-status.original-status-header-name |
Název hlavičky, která obsahuje kód HTTP proxied požadavku. | |
spring.cloud.gateway.streaming-media-types |
||
spring.cloud.gateway.x-forwarded.enabled |
Pokud je tato možnost povolená XForwardedHeadersFilter . |
true |
spring.cloud.gateway.x-forwarded.for-append |
Pokud je povolené připojení X-Forwarded-For jako seznam. |
true |
spring.cloud.gateway.x-forwarded.for-enabled |
Pokud X-Forwarded-For je povoleno. |
true |
spring.cloud.gateway.x-forwarded.host-append |
Pokud je povolené připojení X-Forwarded-Host jako seznam. |
true |
spring.cloud.gateway.x-forwarded.host-enabled |
Pokud 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 povolené připojení X-Forwarded-Port jako seznam. |
true |
spring.cloud.gateway.x-forwarded.port-enabled |
Pokud X-Forwarded-Port je povoleno. |
true |
spring.cloud.gateway.x-forwarded.prefix-append |
Pokud je povolené připojení X-Forwarded-Prefix jako seznam. |
true |
spring.cloud.gateway.x-forwarded.prefix-enabled |
Pokud X-Forwarded-Prefix je povoleno. |
true |
spring.cloud.gateway.x-forwarded.proto-append |
Pokud je povolené připojení X-Forwarded-Proto jako seznam. |
true |
spring.cloud.gateway.x-forwarded.proto-enabled |
Pokud 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 milis. 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 , maximální doba v milis čekat na získání. |
|
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 milisách, po kterém je kanál uzavřen. Pokud NULL neexistuje maximální doba nečinnosti. |
|
spring.cloud.gateway.httpclient.pool.max-life-time |
Doba trvání, po které se kanál zavře. Pokud NULL neexistuje maximální doba života. |
|
spring.cloud.gateway.httpclient.pool.metrics |
Umožňuje shromažďování a registraci metrik fondů kanálů v mikrometrech. 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, který HttpClient se má použít, výchozí hodnota ELASTIC je . |
|
spring.cloud.gateway.httpclient.response-timeout |
Časový limit odpovědi. | |
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout |
Vypršení časového limitu vyprázdnění PROTOKOLU SSL close_notify Výchozí hodnota 3000 ms . |
3000ms |
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout |
Časový limit čtení PROTOKOLU 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 . To je nezabezpečené a není vhodné pro produkci. |
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 rámce ping 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 |
Mapy značek, které se přidaly do metrik. | |
spring.cloud.gateway.observability.enabled |
Pokud by měla být zapnuta podpora pozorování mikrometrů. | true |
Běžné konfigurace
Následující seznam popisuje běžné konfigurace:
- Protokolování souvisejících konfigurací:
logging.level.*
logging.group.*
- Všechny ostatní konfigurace v oboru
logging.*
názvů by měly být zakázané. Například zápis souborů protokolu pomocí bylogging.file
měl být zakázán.