Am două servicii care rulează în motorul de aplicații GCP; să spunem serviciul A și B și apoi am implementat un serviciu de gateway cloud de primăvară pentru a direcționa traficul extern către aceste două servicii pe baza predicatelor de cale. serviciile A și B sunt implementate în motorul de aplicații flexibil. inițial aveam gateway-ul implementat în motorul de aplicații flexibil și funcționa perfect. deoarece avem unele servicii batch care au un timp de răspuns mai mare de 10 minute (standardul motorului de aplicații are un timp de expirare maxim de răspuns de 10 minute), a trebuit să decidem să migrăm gateway-ul către motorul de aplicații flexibil.
Serviciul gateway este dockerizat și rulează în portul 8080. App.yaml meu arată astfel:
runtime: personalizat
env: flex
serviciu: beta-gateway
env_variables:
SPRING_PROFILES_ACTIVE: „beta”
resurse:
CPU: 1
memorie_gb: 2
liveness_check:
cale: „/actuator/sănătate”
check_interval_sec: 30
timeout_sec: 4
prag_eșec: 2
prag_succes: 2
initial_delay_sec: 300
Readiness_check:
cale: „/actuator/sănătate”
check_interval_sec: 5
timeout_sec: 4
prag_defecțiune: 2
prag_succes: 2
app_start_timeout_sec: 300
Serviciul este implementat corect, punctele finale ale actuatorului funcționează perfect, sun eu /actuator/gateway/routes
punctul final și configurația de rutare arată bine (Și o direcționez către serviciile A și B folosind appshot dns uri; nu cea mai bună abordare ar trebui să folosească un registru de servicii în viitor).
Problema:
Problema este că pentru orice punct final, altul decât punctul final al actuatorului, cererea ajunge într-o buclă de redirecționare (302) și în cele din urmă eșuează.
Ce am incercat:
După cum am menționat mai sus, am invocat punctul final /actuator/gateway/routes și configurația de rutare arată bine.
Am activat înregistrarea TRACE pentru gateway și văd că rutarea se potrivește corect cu adresa URL a appspot dns a serviciului A sau B. Aspectul arată astfel:
2022-06-02 16:10:22.030 PDT
spring.cloud.gateway.requests etichete: [tag(httpMethod=GET),tag(httpStatusCode=302),tag(outcome=REDIRECTION),tag(routeId=web_api_route),tag(routeUri=https://my-service- dot-my-project.appspot.com:443),tag(status=FOUND)]
2022-06-02 16:10:22.029 PDT
NettyWriteResponseFilter începe intrare: 2ad7457b, ieșire: [67187409-456]
2022-06-02 16:10:22.019 PDT
rută de ieșire: 2ad7457b, de intrare: [67187409-456]
2022-06-02 16:10:22.016 PDT
RouteToRequestUrlFilter începe
2022-06-02 16:10:22.016 PDT
GatewayFilterFactory sortate: [[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RemoveCachedBodyFilter@1e4d3ce5}, ordine = -2147483648], [GatewayFilterAdapter{delegate. comanda = -2147482648], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyWriteResponseFilter@4b5189ac}, comanda = -1], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyWriteResponseFilter. }, ordine = 0], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.GatewayMetricsFilter@1e81f160}, ordine = 0], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.Cloud.Routeway.Filter1e81f160} }, comanda = 10000], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.config.GatewayNoLoadBalancerClientAutoConfiguration$NoLoadBalancerClientFilter@1acaf3d}, comanda = 10150], [Adapter{Gateway. .filter.WebsocketRoutingFilter@404bbcbd}, comandă = 2147483646], GatewayFilterAdapter{delegate=org.company.gatewayapi.configs.FilterConfiguration$$Lambda$397/[email protected]. .NettyRoutingFilter@4f704591}, comanda = 2147483647], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardRoutingFilter@704deff2}, comanda = 214748364]]
2022-06-02 16:10:22.016 PDT
[67187409-456] Mapat la org.springframework.cloud.gateway.handler.FilteringWebHandler@1f570ea9
2022-06-02 16:10:22.015 PDT
Maparea [Exchange: GET http://my-gateway-dot-my-project.uc.r.appspot.com/favicon.ico] la Route{id='web_api_route', uri=https://my-service- dot-my-project.appspot.com:443, ordine=0, predicat=Căi: [/**], potrivire slash final: true, gatewayFilters=[], metadate={}}
2022-06-02 16:10:22.015 PDT
Ruta potrivită: web_api_route
2022-06-02 16:10:22.015 PDT
Modelul „/**” se potrivește cu valoarea „/favicon.ico”
2022-06-02 16:10:22.015 PDT
Model „[/api/import-auphan/**, /api/import-speedline/**, /api/import-heartland/**, /api/import-clover/**, /api/import-toast/ **]" nu se potrivește cu valoarea "/favicon.ico"
2022-06-02 16:10:22.015 PDT
Modelul „[/api/cloudprint/**]” nu se potrivește cu valoarea „/favicon.ico”
2022-06-02 16:10:22.015 PDT
Modelul „[/api/jobs/**]” nu se potrivește cu valoarea „/favicon.ico”
2022-06-02 16:10:22.014 PDT
Modelul „[/api/webhooks/**]” nu se potrivește cu valoarea „/favicon.ico”
Nu sunt foarte sigur dacă este relevant, dar inițial am făcut o implementare cu setarea de rețea care specifică legarea portului
reţea:
nume: implicit
forwarded_ports:
- 80:8080
Apoi am învățat că legarea la 8080 este gata să fie implicită și am eliminat-o.
Orice sfat va fi foarte apreciat. Mulțumesc!