运行停靠的FastAPI应用程序时的CORS问题 [英] CORS issues when running a dockerised FastAPI application

查看:28
本文介绍了运行停靠的FastAPI应用程序时的CORS问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个fastapi应用程序正在运行并且工作正常。我想使用我的fast api应用程序作为部署在Firebase主机(HTTPS)上的React前端的后端。在本地运行(http fast pi和Reaction)我通过在FastAPI中启用CORS使其正常工作

from starlette.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

但当我部署时,我意识到我不能将FastAPI用作HTTP,因为我的前端是在HTTPS上的。我继续在Google Cloud中创建了一个Kubernetes集群,并嵌入了我停靠的Fastapi应用程序(公开为HTTPS)。当我卷曲到HTTPS Fastapi端点时,这很管用,但我的Reaction应用程序再次出现CORS问题,这一次我不知道如何解决它。为什么以上规定不再适用?

CORS错误为

CORS策略已阻止访问从源https://my-api-domain‘获取https://my-frontend-domain’:对印前检查请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头。如果不透明的响应满足您的需求,请将请求的模式设置为‘no-CORS’,以在禁用CORS的情况下获取资源。

编辑

我刚刚做了一些进一步的研究,我可以得出结论,如果我用docker run在本地运行我的容器,那么access-control-allow-origin在头中正确地返回。但当部署在GKE上时,则没有access-control-allow-origin

更新

我曾尝试安装nginx入口,而不是GKE入口,但这会使全局静态IP和Google托管证书的问题复杂化。我需要一个能够为我提供解决方案的解决方案

  1. 全局静态IP(GKE入口可以)
  2. Google托管证书(可用于GKE入口)
  3. CORS已启用(nginx入口可以)

所以我卡在自动取款机上了!

最新更新

我正在使用cert-manager的Nginx Inress控制器,它的工作方式非常出色。额外信息:用skaffold和kustomize运行一切--有这么多很棒的工具

推荐答案

发布此Community Wiki以提高可见性,因为comment section中提到了解决方案。

如果要在Google Cloud Platform上使用CORS,则必须使用Nginx Ingress和特定的GCP注释。有关这方面的更多详细信息,请参阅this SO thread

kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/enable-cors: "true"

解决方案

此问题的解决方案是将Nginx Ingress ControllerCert-Manager与正确的批注一起使用。

操作人员还确认它正在工作。

我将Nginx Ingress Controllercert-manager配合使用,效果非常出色。额外信息:还可以使用skaffoldkustomize运行所有功能-有很多很棒的工具

这篇关于运行停靠的FastAPI应用程序时的CORS问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆