如何在 k8s 中路由来自接收 UDP 流量的网关资源的请求?

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

一般来说,我所做的是,如果是 tcp 流量,我创建一个虚拟服务来侦听 tcp 网关并将其路由到正确的主机。就像这样-

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  creationTimestamp: "2024-03-19T17:17:44Z"
  generation: 2
  name: tcp-test-virtual-service
  namespace: default
  resourceVersion: "1076485"
  uid: 9cc94534-2dec-4165-8dec-4a8fb66087ea
spec:
  gateways:
  - tcp-test
  hosts:
  - '*'
  tcp:
  - match:
    - port: 2057
    route:
    - destination:
        host: tcp-test
        port:
          number: 2057

但是k8s中的virtualservice资源不允许

spec:
  udp:

它返回此错误 -

denied the request: configuration is invalid: http, tcp or tls must be provided in virtual service

那么将传入 udp 网关的流量路由到的正确方法是什么?

kubernetes istio gateway istio-gateway
1个回答
0
投票

基于 stackoverflow 中发布的此链接,istio 不支持 UDP。然而,在同一个链接中,其中一个答案提到将会有一个更新,其中将支持 UDP 协议。

但是,查看 istio VirtualService 的文档,似乎仍然没有 UDP 端口的配置。

但是在搜索这个问题时,我遇到了这个文档,标题为“在 Istio 中公开基于 TCP 和 UDP 的服务 - 简单的方法”,基于文档,其中场景是已经创建了一个服务,他们对其进行编辑并添加 TCP 。但据说它也可以做UDP端口。

从例子来看

KUBE_EDITOR="nano" kubectl edit svc -n istio-system istio-ingressgateway

# Add this within the ports section of the svc.
...
- name: redis
  port: 6379
  protocol: TCP #can be also UDP for udp service
  targetPort: 6379
 …

从带有 # 的注释中可以看到,它提到它也可以更改为 UDP 以提供 UDP 服务。对于这个问题,请确保您的服务公开 UDP 端口。

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