我正在 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
这是来自 Google 负载均衡器的响应,该负载均衡器配置了 GKE Ingress 资源。我认为这不能以接受该请求的方式进行配置。
您可以尝试使用另一个不会拒绝此类格式错误的请求的 Ingress 控制器。
我面临着同样的问题,有没有人找到解决方案,我们无法切换负载均衡器。