Sdílet prostřednictvím


Připojení ke spravované bráně pro Spring v Azure Container Apps (Preview)

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

  • Účet Azure s aktivním předplatným. Pokud ho ještě nemáte, můžete si ho zdarma vytvořit.
  • Azure CLI.

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.

  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 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
    LOCATION Umístění Azure oblasti, kde vytvoříte aplikaci kontejneru a Java komponentu.
    ENVIRONMENT Název Azure Container Apps prostředí 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.

Aktualizujte trasy 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ý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}"
    
  2. 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.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, 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.file by měl být zakázán.