kubernetes-ingress - 如何在不使用 nginx 的情况下通过入口启用 CORS?

标签 kubernetes-ingress

我正在尝试使用 Kubernetes 设置 RESTful API 应用程序。我有一个准系统设置,其中包含一个集群、静态 IP 地址、使用 NodePort 类型的公开服务部署的应用程序,以及一个配置有 SSL 托管证书的入口。我需要启用 CORS,但我还没有使用 nginx。是否可能,或者我是否需要安装 nginx 而不是默认的 gce 类?

这是我的 ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: artsdata-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "artsdasta-static-ip"
    networking.gke.io/managed-certificates: artsdata-certificate
    ingress.kubernetes.io/enable-cors: "true"
spec:
  backend:
    serviceName: artsdata-kg
    servicePort: 80

检查我使用的 curl 如下:

curl -H "Access-Control-Request-Method: GET" -H "Origin: http://localhost" --head http://db.artsdata.ca

我期待响应包含 Access-Control-Allow-*

最佳答案

当前 CORS GCP L7 负载平衡器不支持该机制,因此 ingress-gce入口 Controller 确实包含适当的 annotation要完成此功能,请找到 here相关的 Stack 线程。

如果您考虑将原生 GCP Ingress 类替换为 Nginx Ingress Controller为了启用 Cross-origin请求,那么您可能必须在原始 Ingress 资源定义中包含至少两个注释:

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

我找到了一个很棒的 guideline通过解释 GKE 中 Nginx Ingress Controller 实现过程的 GCP 社区教程。

市场上还有其他 L7 代理框架可以利用 CORS 请求,例如 Traefik , Skipper

关于kubernetes-ingress - 如何在不使用 nginx 的情况下通过入口启用 CORS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57301211/

相关文章:

ssl - 在双向 TLS 身份验证中吊销 SSL 证书

nginx - 在哪里可以找到为nginx.ingress.kubernetes.io/affinity注释生成的配置

带有 ingress-nginx 的 kubernetes 中的 Django 不提供静态文件

kubernetes - 是否可以使用单个 GKE 入口 Controller 拥有多个入口资源

kubernetes - GCP-如何使用Ingress在负载均衡器上服务多个应用程序?

kubernetes - 在 Helm Charts 中添加 Nginx-Ingress/Certmanager 作为依赖项

nginx - 如何在Kubernetes Nginx Ingress Controller中将Nginx IP附加到X-Forwarded-For

kubernetes - 如何在具有一个80端口的一个入口中公开具有多个端口的服务

多个命名空间的基于 Kubernetes 路径的路由

dns - 如何配置我的 DNS 以使用 Rancher 2.0 入口?