Sdílet prostřednictvím


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

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.

  1. 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.
  2. Přihlaste se k Azure pomocí Azure CLI.

    az login
    
  3. Vytvořte skupinu prostředků.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 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ě.

  1. 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 \
    
  2. 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ů

  1. 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}"
    
  2. 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ší aplikace actuator/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 routeIdpro , výchozí hodnota discoveryClient.getClass().getSimpleName() + "_". K vytvoření routeIdse 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 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 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 ELASTICje .
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í by logging.file měl být zakázán.