首页 > 解决方案 > 用于 SSH 调用的 K8s 集群中的反向代理行为

问题描述

我正在托管 K8s 集群上构建应用程序。我可以使用 NodePort 创建部署和合作。然后可以通过这些端口访问服务。

管理所有公开的服务及其端口正成为一项挑战,对于 HTTP 流量,我正在考虑公开一个 nginx 代理,该代理将代理https://someservice.someurl:someport并将 https://someservice:someportDNSsomeurl映射到我的前端 Ubuntu IP,如下所示。

在此处输入图像描述

对于网络流量,我认为它应该按预期工作。但是,我有一些可以通过 ssh 访问的部署;例如 git 守护进程。有了这些恶魔,我目前正在执行这样的命令,git clone ssh://git@someipsofthecluster:someport/git-server/repos/somerepos并且我想使用与 http 流量相同的 DNS 名称(即git clone ssh://git@someservice.someurl:someport/git-server/repos/somerepo)

我知道 iptables,我可以在其中将来自一个端口的流量重定向到另一个 IP/端口,但我不知道我将如何针对所使用的子域重定向到给定的机器/端口。

标签: nginxkubernetesiptablesnginx-reverse-proxy

解决方案


您可能不得不重新考虑如何做到这一点,因为 TCP 负载平衡或基于 DNS 名称的代理实际上是不可能的。更多关于这个here。请记住,HTTP 是第 7 层协议,因此代理可以使用“主机”标头来引导请求。

iptables 也无法基于主机名进行过滤。更多关于这里

但是,您可以使用第 4 层代理,即 TCP 代理,但这将基于侦听特定的 TCP 端口。Nginx可以做到这一点,或者您也可以使用Haproxy 之类的其他东西。


推荐阅读