如何在 Kubernetes 网关 API 中添加预检中缺少的 Allow-Origin 标头

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

我们正在利用 Kubernetes Gateway API 的强大功能,在 Gateway 和 HTTPRoute 中使用它的功能。

我们有一个使用 GKE 外部全局负载均衡器的简单网关资源。下面显示了完整的清单代码

kind: Gateway
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
  name: external-http
  namespace: infra-ns
spec:
  gatewayClassName: gke-l7-global-external-managed
  listeners:
  - name: https
    protocol: HTTPS
    port: 443
    allowedRoutes:
      namespaces:
        from: Selector
        selector:
          matchLabels:
            shared-gateway-access: "true"
    tls:
      mode: Terminate
      options:
        networking.gke.io/pre-shared-certs: ipos-cert
  addresses:
  - type: NamedAddress
    value: "l7lb-external-ip-address"

这个网关像这样附加到多个 HTTPRoutes

rules:
- matches:
  - path:
      value: /api/v1/service  
  backendRefs:
  - name: example-service
    port: 80

当请求从代码应用程序客户端发送时,该设置运行良好。问题是,如果请求是通过浏览器发送的,我们会得到一个

Cross-Origin Resource Sharing error: PreflightMissingAllowOriginHeader
并且请求状态显示
CORS error

我们如何使用

Kubernetes Gateway API

添加缺少的允许来源标头
cors google-kubernetes-engine gcp-load-balancer kubernetes-gateway-api
2个回答
2
投票

GKE 网关路线图上包含 CORS 支持,但目前您需要从应用程序后端添加支持。


0
投票

我想补充一下我如何解决这个问题的观点,因为 Gari Singh 说你必须在应用程序级别执行此操作,我确实这样做了,并且我尝试了很多实现,但没有成功,只是当我看到 GKE 集群日志时偶然发现的GKE gatewayAPI 默认实现的运行状况检查存在问题,我必须将我的服务配置为发送 200 ok 状态作为对 /GET 请求的响应,您可以在官方文档gatewayAPI Restrictions and Limitations 中看到这一点,我们感兴趣的部分是

GKE Gateway 的行为与 Ingress 不同,因为 Gateway 不会推断运行状况检查参数。如果您的服务未针对 GET / 请求返回 200,或者您有其他已调整的 Pod 准备情况检查,则需要为您的服务配置 HealthCheckPolicy。

所以我希望这可以为那些可能不是像我这样的专家的人节省时间。

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