kubernetes - 按主机名的 Gloo TCP 代理
问题描述
使用 Gloo TCP Proxy 转发端口 27017 以便在 Kubernetes 集群中访问 MongoDB。
以下网关规范适用于将所有端口 27017 流量转发到指定的上游。
spec:
bindAddress: '::'
bindPort: 27017
tcpGateway:
tcpHosts:
- destination:
single:
upstream:
name: default-mongodb-27017
namespace: gloo-system
name: one
useProxyProto: false
我想根据主机名转发 27017 流量(例如,d.db.example.com
指向 Mongo 的 dev 实例并p.db.example.com
指向 prod 实例)。
有没有办法指定主机名(比如在虚拟服务路由中)?
(注意:这是一个教育模拟,因此不是真正的“生产”环境。这就是为什么 dev 和 prod 实例将存在于同一个 Kubernetes 集群中。这也是托管或外部 MongoDB 解决方案的原因未使用)
解决方案
正如我在评论中提到的,据我所知,在网关中无法做到这一点,至少我在网关文档中找不到任何相关内容,但您可以配置虚拟服务以使其工作。
如文档中所述
VirtualService 是 Gloo 网关的根路由对象。虚拟服务描述要匹配一组域的一组路由。
它定义了: - 一组域 - 这些域的根路由集 - 服务器 TLS 终止的可选 SSL 配置 - VirtualHostOptions 将配置应用于 VirtualService 上的所有路由。
域在网关内的所有虚拟服务中必须是唯一的(即集合之间没有重叠)。
那里_
虚拟服务定义了一组路由规则,一个给定域或一组域的可选 SNI 配置。
Gloo 将根据请求的 Host 标头(在 HTTP 1.1 中)或 :authority 标头(HTTP 2.0)中指定的域选择适当的虚拟服务(路由集)。
虚拟服务支持通配符域(以 * 开头)。
如果用户不提供,Gloo 将为用户创建一个默认的虚拟服务。默认虚拟服务匹配 * 域,它将为任何不包含 Host/:authority 标头的请求或请求与另一个虚拟服务不匹配的域的请求提供路由。
为虚拟服务指定的每个域在提供给 Gloo 的所有虚拟服务集中必须是唯一的。
看看这个教程。
更具体地说,在这个示例中,他们使用 2 个域,echo.example.com 和 foxtrot.example.com,在您的情况下,这将d.db.example.com
是p.db.example.com
选项 2:跨域分离所有权
我们可能考虑的第一个替代方案是使用不同的域对每个服务进行建模,以便在不同的对象上管理路由。例如,如果我们的主域是 example.com,我们可以为每个子域创建一个虚拟服务:echo.example.com 和 foxtrot.example.com。
apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
name: echo
namespace: echo
spec:
virtualHost:
domains:
- 'echo.example.com'
routes:
- matchers:
- prefix: /echo
---
apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
name: foxtrot
namespace: foxtrot
spec:
virtualHost:
domains:
- 'foxtrot.example.com'
...
我希望这有帮助。
推荐阅读
- java - 如何在显示 ArrayList 时显示我创建的类的特定字段?
- typo3 - Typo3 9 - 清除页面 id 的缓存
- excel - Excel Query - 如何将 IF 语句应用于具有一行中的值的最后一个单元格
- dask - 终止不良的工作人员
- r - 如何使用 R 在 n 维上实现此优化算法?
- amazon-web-services - 安装本地文件夹时,aws cli命令不起作用
- react-redux - 如何在本机反应中获取所有具有用户权限的联系人列表?
- assembly - 如何使用 arm-assembly 读取 .txt 文件
- python - AutoML Pipelines:从输入数据中提取标签并在 Neuraxle 或 SKLearn Pipelines 中采样
- excel - 根据单元格值展开选择并将展开的选择拆分为单独的文件