Рейтинг:0

Облачный шлюз Spring, развернутый в гибком механизме приложения GCP, вызывает бесконечный цикл перенаправления

флаг mx

У меня есть две службы, работающие в движке приложения GCP; скажем, службы A и B, а затем я развернул службу Spring Cloud Gateway для маршрутизации внешнего трафика к этим двум службам на основе предикатов пути. службы A и B развернуты в гибком механизме приложения. изначально у меня был развернут шлюз в гибком механизме приложения, и он работал отлично. поскольку у нас есть некоторые пакетные службы, время отклика которых превышает 10 минут (в стандарте механизма приложений максимальное время ожидания ответа составляет 10 минут), нам пришлось решить перенести шлюз на гибкий механизм приложения.

Служба шлюза докеризована и работает на порту 8080. Мой app.yaml выглядит так:

время выполнения: пользовательское
окружение: гибкий

сервис: бета-шлюз

env_variables:
  SPRING_PROFILES_ACTIVE: "бета"

Ресурсы:
  процессор: 1
  память_гб: 2

проверка_живости:
  путь: "/привод/здоровье"
  check_interval_sec: 30
  тайм-аут_сек: 4
  сбой_порог: 2
  успех_порог: 2
  Initial_delay_sec: 300

готовность_проверка:
  путь: "/привод/здоровье"
  check_interval_sec: 5
  тайм-аут_сек: 4
  сбой_порог: 2
  успех_порог: 2
  app_start_timeout_sec: 300

Служба развертывается правильно, конечные точки актуатора работают отлично, я звоню /привод/шлюз/маршруты конечная точка, и конфигурация маршрутизации выглядит хорошо (и я направляю ее к службам A и B, используя uri appshot dns; не лучший подход должен использовать реестр служб в будущем).

Эта проблема: Проблема в том, что для любой конечной точки, отличной от конечной точки исполнительного механизма, запрос переходит в цикл перенаправления (302) и в конечном итоге терпит неудачу.

Что я пробовал:

Как упоминалось выше, я вызвал конечную точку /actuator/gateway/routes, и конфигурация маршрутизации выглядит хорошо. Я включил ведение журнала TRACE для шлюза и вижу, что маршрутизация правильно сопоставляется с URL-адресом DNS службы A или B. Внешний вид выглядит следующим образом:

2022-06-02 16:10:22.030 PDT
Теги spring.cloud.gateway.requests: [тег (httpMethod = GET), тег (httpStatusCode = 302), тег (результат = ПЕРЕНАПРАВЛЕНИЕ), тег (routeId = web_api_route), тег (routeUri = https://my-service- dot-my-project.appspot.com:443),тег(статус=FOUND)]
2022-06-02 16:10:22.029 PDT
NettyWriteResponseFilter начало входящего: 2ad7457b, исходящего: [67187409-456]
2022-06-02 16:10:22.019 PDT
исходящий маршрут: 2ad7457b, входящий: [67187409-456]
2022-06-02 16:10:22.016 PDT
Запуск RouteToRequestUrlFilter
2022-06-02 16:10:22.016 PDT
Отсортированные gatewayFilterFactories: [[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RemoveCachedBodyFilter@1e4d3ce5}, order = -2147483648], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter@631,d0, order = -2147482648], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyWriteResponseFilter@4b5189ac}, order = -1], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardPathFilter@379614be }, order = 0], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.GatewayMetricsFilter@1e81f160}, order = 0], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter@3ddc6915 }, order = 10000], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.config.GatewayNoLoadBalancerClientAutoConfiguration$NoLoadBalancerClientFilter@1acaf3d}, order = 10150], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway .filter.WebsocketRoutingFilter@404bbcbd}, заказ = 2147483646], GatewayFilterAdapter{delegate=org.company.gatewayapi.configs.FilterConfiguration$$Lambda$397/503642634@27508c5d}, [GatewayFilterAdapter{delegate=org.springframework.filtercloud .NettyRoutingFilter@4f704591}, заказ = 2147483647], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardRoutingFilter@704deff2}, заказ = 2147483647]]
2022-06-02 16:10:22.016 PDT
[67187409-456] Сопоставлено с org.springframework.cloud.gateway.handler.FilteringWebHandler@1f570ea9
2022-06-02 16:10:22.015 PDT
Сопоставление [Exchange: GET http://my-gateway-dot-my-project.uc.r.appspot.com/favicon.ico] с Route{id='web_api_route', uri=https://my-service- dot-my-project.appspot.com:443, order=0, predicate=Paths: [/**], сопоставить завершающую косую черту: true, gatewayFilters=[], metadata={}}
2022-06-02 16:10:22.015 PDT
Маршрут соответствует: web_api_route
2022-06-02 16:10:22.015 PDT
Шаблон "/**" соответствует значению "/favicon.ico"
2022-06-02 16:10:22.015 PDT
Шаблон "[/api/import-auphan/**, /api/import-speedline/**, /api/import-heartland/**, /api/import-clover/**, /api/import-toast/ **]" не соответствует значению "/favicon.ico"
2022-06-02 16:10:22.015 PDT
Шаблон "[/api/cloudprint/**]" не соответствует значению "/favicon.ico"

2022-06-02 16:10:22.015 PDT
Шаблон "[/api/jobs/**]" не соответствует значению "/favicon.ico"
2022-06-02 16:10:22.014 PDT
Шаблон "[/api/webhooks/**]" не соответствует значению "/favicon.ico"

Я не очень уверен, что это актуально, но я изначально сделал развертывание с сетевыми настройками, указывающими привязку портов.

сеть:
  имя: по умолчанию
  перенаправленные_порты:
    - 80:8080

Потом я узнал, что привязка к 8080 делается по умолчанию и удалил ее.

Любые советы будут высоко оценены. Спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.