我有安装了 Istio 入口控制器的 k8s 集群。负载均衡器的外部IP是由云提供商分配的。
在集群内部,我进行了 2 个部署,分别运行数据库和 Web 服务器。 (请注意,数据库并不重要。它可以是任何基于 TCP 的服务。)
对于 Web 服务器,有很多为 Istio VirtualService 和网关路由 HTTP 和 HTTPS 的示例,所以我可以让它轻松工作。
这就是我想问的。
我可以基于域路由类似于 HTTP 的 TCP 吗?据我所知,这不能简单地完成,因为 TCP 不是那样工作的。
我问这个问题是因为我建议使用 Istio 可以做到这一点。 无论真假,听从建议,下图就是我想看到的,如果它真的有效的话。
+-------------+ +---------+ +------------+
| A.my.domain |--+ +--| Service |--| MariaDB #1 |
+-------------+ | +----+ +---------+ +----------------+ | +---------+ +------------+
+--| LB |--| Gateway |--| VirtualService |--+
+-------------+ | +----+ +---------+ +----------------+ | +---------+ +------------+
| B.my.domain |--+ +--| Service |--| MariaDB #2 |
+-------------+ +---------+ +------------+
假设有多个基于 TCP 的服务通过同一端口上的单个负载均衡器接收流量。由于我提到了服务作为数据库,因此假设负载均衡器具有 3306 端口的侦听器。
此外,我还配置了云提供商提供的 NS 记录。所以我可以将任何东西映射到
my.domain
,A.my.domain
。两个域都映射到 A 记录的相同负载均衡器 IP。 (或者,随机生成超长域名用于CNAME记录。)如果用户使用 B.my.domain
连接,则它必须到达
A.my.domain:3306
,并且 MariaDB #1
必须到达 B.my.domain:3306
。如前所述,我认为这是不可能的,但有人说我可以使用主机字段,这让我怀疑。
MariaDB #2
我做了一些搜索和反复试验。或者,作为其他选择,我想“每当按命名空间部署新服务时,我是否必须使用新 IP 来创建多个负载均衡器?”,尽管我不确定这是否是云服务的常见方法。
如有任何建议,我们将不胜感激。
因此,不可能根据客户端可能打算访问 IP 地址的域来平衡同一 IP 地址上的任意 TCP 流量 - 执行此操作所需的信息不存在。