带有正文的 GET 请求被 GKE 拒绝

问题描述 投票:0回答:2

我正在 GKE 上运行 FastAPI 后端服务。有一个旧端点使用

GET
请求并附加了正文。我知道
GET
请求不应该有主体,但这是库使用的遗留端点,因此我别无选择,只能支持它。

当前,当带有正文的

GET
请求发送到 GKE 时,我收到以下响应:

我已经在本地测试了端点,它可以正常工作。我不知道到底是什么问题,但 GCP 肯定会在某个时候拦截请求并拒绝它,因为它有一个主体。

我目前能想到的唯一解决方法是使用某种代理并在请求到达 GKE 之前对其进行转换。不幸的是,我不是 GCP 专家。

有人有解决此类问题的经验吗?如果当前必须支持端点,那么这里的最佳解决方案是什么?

编辑:添加入口配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: XXX
  namespace: XXX
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
    kubernetes.io/ingress.global-static-ip-name: XXX
    #ingress.kubernetes.io/enable-cors: "true"
    
spec:
  tls:
  - hosts:
    - 'XXX'
    secretName: tls-secret
  rules:
  - host: XXX
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: XXX
            port:
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: XXX
            port:
              number: 80
kubernetes get google-kubernetes-engine fastapi
2个回答
0
投票

这是来自 Google 负载均衡器的响应,该负载均衡器配置了 GKE Ingress 资源。我认为这不能以接受该请求的方式进行配置。

您可以尝试使用另一个不会拒绝此类格式错误的请求的 Ingress 控制器。

另请参阅 Google 计算负载均衡器在删除时抛出 400 错误请求


0
投票

我面临着同样的问题,有没有人找到解决方案,我们无法切换负载均衡器。

© www.soinside.com 2019 - 2024. All rights reserved.