当前位置: 首页 > 知识库问答 >
问题:

支持动态路由到库伯内特斯服务的反向代理:端口名称和WebSockets

楚泳
2023-03-14

我想执行基于路径的动态路由到支持WebSockets的库伯内特斯服务。

例如,此路径:

http://10.0.0.1/myport/myservice/foo

应使用路径foo将流量路由到命名端口myport(默认命名空间)处的服务myservice。

我使用以下ConfiMap路由器条目(使用io.l5d.k8s命名器)通过Linkerd接近实现这一目标:

routers:
- protocol: http
  dtab: |
    /svc => /#/io.l5d.k8s/default;
  identifier:
    kind: io.l5d.path
    segments: 2
    consume: true

它的工作原理除了我需要WebSocket支持,这在Linkerd中不可用。

我尝试了使用正则表达式作为位置和重写规则的NGINX。这看起来像这样:

 location ~ ^/(.*?)/.*$ {
   rewrite ^/(.*?)/(.*)$ /$2 break;
   proxy_pass http://$upstream:$1;

除了NGINX不路由到NGINX启动后创建的服务之外,这是可行的。我不确定这是与nginx中的DNS缓存问题有关,还是与支持SRV DNS记录有关。这种情况应该在NGINX Plus工作,但我必须依靠开源软件。

有什么想法可以让反向代理/服务网格支持动态路由到K8s服务:port和WebSockets?

编辑这可以用Istio完成吗?似乎必须在Istio路由配置中指定一个硬编码的目的地。我可以在源(请求)上指定正则表达式,但不能使用正则表达式捕获组来指定目的地。

共有1个答案

阚英武
2023-03-14

不支持基于正则表达式捕获组动态创建目的地。您需要为每个目的地定义路由规则。

 类似资料:
  • 我只是在本地mac上使用mini kube设置kubernetes。 创建了一个类型为NodePort的服务,并且能够使用url

  • 是否可以在库伯内特斯中配置入口控制器,仅当传入请求的标头具有特定值时才将HTTP请求路由到服务? 实例 带有以下标头的HTTP请求 应该转发给服务1 带有以下标头的HTTP请求 应该被阻止 如果可能的话,你能详细一点或指向一些文档,因为我找不到这种用例的文档吗

  • 我是Kubernetes平台的新手,尝试启用部署在Kubernetes平台上的tomcat web app的HTTPS安全连接。我对舱单感到困惑。与部署、服务和入口控制器相关的yml。 那么,我是否也必须在部署(在端口:-containerPort:8080)服务(如端口:-端口:80 targetPort:8080协议:TCP名称:http)和入口(在后端:serviceName:tomcat

  • 我试图设置Kubernetes入口,将外部http流量路由到前端pod(路径/)和后端pod(路径/rest/*),但我总是得到400错误,而不是主nginx索引。html。 所以我在第https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer页尝试了谷歌库伯内特斯的例子,但我总是得到400个错误。有什么想法吗?

  • 我试图设置一个带有前端pod(cup fe)和后端pod的GKE环境,用于在登录时对用户进行身份验证(cup auth),但我无法让我的入口正常工作。 以下是运行nginx的前端吊舱(cup fe),带有角度应用程序。我还创建了一个静态IP地址,由“cup.xxx.it”和“cup-auth.xxx.it”dns解析: 然后是认证盒(cup auth): 然后,我创建了两个节点报告来公开上述POD

  • 我是kubernetes和Traefik的新手。 我跟进教程:https://docs.traefik.io/user-guides/crd-acme/ 我将其更改为在Scala中使用我的服务,即使用https和9463端口。我正在尝试使用kubernetes和traefik部署Scala服务。 当我直接转发到服务时: 我执行一个curl-k'https://localhost:8001/heal