尽管有ReferenceGrant,但引用不同命名空间中的服务时出现Kubernetes错误

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

问题描述

尽管有 ReferenceGrant,但在尝试使用 HTTPRoute 引用不同命名空间中的 Kubernetes 服务时遇到错误。仅当从不同的命名空间引用该服务时才会发生该错误。从同一命名空间引用同一服务不会出现任何问题。

错误信息:

错误原因:引用不允许:错误GWCER104:HTTPRoute“backbone-meta-green/backbone-meta-green-http-route”配置错误,错误:无法使用后端backbone-meta-blue/httpbin,对后端的引用不支持其他命名空间。

清单配置

以下是我正在使用的清单配置:

apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
    name: cross-ns-gateway
    namespace: gateway-infra
spec:
    addresses:
        - type: NamedAddress
          value: cross-ns-gateway-ip
    gatewayClassName: gke-l7-global-external-managed
    listeners:
        - allowedRoutes:
              namespaces:
                  from: All
          name: https
          port: 443
          protocol: HTTPS
          tls:
              mode: Terminate
              certificateRefs:
                  - name: gateway-cert-secret

---
apiVersion: apps/v1
kind: Deployment
metadata:
    name: httpbin
    namespace: cross-ns-1
spec:
    replicas: 1
    selector:
        matchLabels:
            app: httpbin
    template:
        metadata:
            labels:
                app: httpbin
        spec:
            containers:
                - name: httpbin
                  image: kennethreitz/httpbin
                  ports:
                      - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
    name: httpbin
    namespace: cross-ns-1
spec:
    selector:
        app: httpbin
    ports:
        - protocol: TCP
          port: 8080
          targetPort: 80
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
    name: cross-ns-reference-grant
    namespace: cross-ns-1
spec:
    from:
        - group: gateway.networking.k8s.io
          kind: HTTPRoute
          namespace: cross-ns-2
    to:
        - group: ''
          kind: Service
          name: httpbin
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
    name: cross-ns-http-route
    namespace: cross-ns-2
spec:
    hostnames:
        - cross-ns-test.com
    parentRefs:
        - group: gateway.networking.k8s.io
          kind: Gateway
          name: cross-ns-gateway
          namespace: gateway-infra
    rules:
        - backendRefs:
              - group: ''
                kind: Service
                port: 8080
                name: httpbin
                namespace: cross-ns-2
          matches:
              - path:
                    type: PathPrefix
                    value: /

预期行为

我希望 cross-ns-2 中的 HTTPRoute 能够成功引用 cross-ns-1 中的 Service httpbin,并设置 ReferenceGrant。

实际行为

HTTPRoute 无法引用不同命名空间中的 Service,从而导致上述错误。

重现步骤

  1. 根据提供的清单部署网关、服务和部署。
  2. 申请ReferenceGrant。
  3. 部署 HTTPRoute。
  4. 观察错误。

其他背景

云提供商:Google 云平台

需要帮助

我将不胜感激有关解决此问题的任何指导或建议,特别是如果我可能错过了允许在此上下文中进行跨命名空间服务引用的其他配置或步骤。

kubernetes google-kubernetes-engine
1个回答
0
投票

gke 网关目前不支持ReferenceGrant。我们有以下解决方法,因此请选择最能帮助您解决问题的解决方法:

  1. 您可以使用“RequestMirror”来支持同一请求的流量镜像。

  2. 多集群中有一个新功能,称为多集群网关,该功能仍处于预览状态。您可以使用此官方 GCP document 启用它并使用此 doc 部署它。在启用和使用此功能之前,您必须考虑本文档中的要求。请注意,在预览版中使用此功能意味着它不提供任何技术支持。

问题是公共文档没有提到跨命名空间路由选项。使用官方文档时,请遵循 Glen 的博客中的建议。博客中的示例适用于单个集群,因此您必须使用官方文档,但进行博客中建议的更改。唯一的主要变化是创建名称空间的方式。还有一个附加标签可将共享网关访问:“true”添加到您的命名空间 YAML。

如果上述解决方法没有帮助,请随时提出功能请求

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