尽管有 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,从而导致上述错误。
云提供商:Google 云平台
我将不胜感激有关解决此问题的任何指导或建议,特别是如果我可能错过了允许在此上下文中进行跨命名空间服务引用的其他配置或步骤。
gke 网关目前不支持ReferenceGrant。我们有以下解决方法,因此请选择最能帮助您解决问题的解决方法:
您可以使用“RequestMirror”来支持同一请求的流量镜像。
多集群中有一个新功能,称为多集群网关,该功能仍处于预览状态。您可以使用此官方 GCP document 启用它并使用此 doc 部署它。在启用和使用此功能之前,您必须考虑本文档中的要求。请注意,在预览版中使用此功能意味着它不提供任何技术支持。
问题是公共文档没有提到跨命名空间路由选项。使用官方文档时,请遵循 Glen 的博客中的建议。博客中的示例适用于单个集群,因此您必须使用官方文档,但进行博客中建议的更改。唯一的主要变化是创建名称空间的方式。还有一个附加标签可将共享网关访问:“true”添加到您的命名空间 YAML。
如果上述解决方法没有帮助,请随时提出功能请求。