【问题标题】:K8s/ Angular CORS issue REST serverK8s/ Angular CORS 问题 REST 服务器
【发布时间】:2020-09-11 07:37:23
【问题描述】:

我遇到了一个使用 Angular 前端和在 k8s 中运行的 C# REST 层的 CORS 问题。我对 CORS 有一个大致的了解,并且理解以下错误消息的含义。我需要帮助修复它。

来自用户界面的错误。

跨域请求被阻止:同源策略不允许读取位于http://auth-svc:8080/api/auth 的远程资源。

在集群中,我有一个数据库、.net 核心 RESTful API 和一个 Angular UI(在 nginx 上运行),每个 pod 都有一个服务。我通过服务名称和端口与堆栈中的每一层进行通信。

我在我的 REST 层中启用了任何 orgin,据我了解,这是一种不好的做法。

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            //app.UseHttpsRedirection();

            app.UseRouting();
            app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

我研究了几种不同的方法,这里有一个例子: Angular/C# CORS Issue

我不明白如何以“生产安全”的方式做到这一点。这意味着如果这是一个生产环境,我将如何启用 UI/REST 之间的通信并为集群内的环境实施良好的安全实践?即使这在我的环境中是不可能的,但知道我应该拍摄什么而不是“让它工作”会很有帮助。

谢谢!

【问题讨论】:

  • 在生产中您只允许某些域/方法/标头

标签: angular kubernetes .net-core cors


【解决方案1】:

在 Kubernetes 中将应用程序放在一起时,您通常会尝试使用 Ingress 定义在同一域上提供所有服务。

例如,如果您有一个用于托管 API 的 .NET 应用程序的后端服务 + 部署和一个托管您的前端的服务 + 部署(例如 nginx + ng build --prod 的构建输出),它可能如下所示:

apiVersion: networking.k8s.io/v1beta1
 kind: Ingress
 metadata:
   name: my-application
 spec:
   rules:
   - host: www.example.com
     http:
       paths:
       - path: /api
         backend:
           serviceName: api-service
           servicePort: 80
       - path: /
         backend:
           serviceName: frontend
           servicePort: 80

这样的设置将消除跨域问题,因为对于使用该站点的浏览器,所有 URL 都将位于同一来源。

对于这样的环境进行开发,使用 Angular 的 proxy integration 是有意义的,因此 ng serve 还将设置将 /api 路由转发到适当的开发端点。

一些入口控制器还支持在通过 HTTP 提供的端点上设置 CORS 标头,因此您不会在 API 服务中设置它们,而是在定义集群外部 HTTP 端点和路由的基础架构/部署配置中设置它们。例如,请参阅these annotations for the nginx ingress controller

【讨论】:

  • 太棒了。这很有意义。感谢您的信息!
猜你喜欢
  • 2021-09-19
  • 2017-10-29
  • 2019-03-17
  • 2020-05-06
  • 1970-01-01
  • 2017-02-18
  • 2017-10-27
  • 2015-12-03
  • 2015-10-14
相关资源
最近更新 更多