amazon-web-services - 如何使用 nginx-ingress 控制器通过 TCP 公开多个服务?
问题描述
我有多个运行 RDP 应用程序的部署,它们都通过 ClusterIP 服务公开。我的 k8s 集群中有 nginx-ingress 控制器,为了允许 tcp,我--tcp-services-configmap
在 nginx-ingress 控制器部署中添加了标志,并为其创建了一个配置映射,如下所示
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
3389: “demo/rdp-service1:3389”
这将公开“rdp-service1”服务。而且我还有 10 个这样的服务需要在同一个端口号上公开,但是如果我在同一个 configmap 中添加更多服务,就像这样
...
data
3389: “demo/rdp-service1:3389”
3389: “demo/rdp-service2:3389”
然后它会删除之前的服务数据,因为这里我也在k8s中部署了external-dns,所以所有由ingress创建的记录host: ...
都将开始指向configmap中新添加的服务所附加的部署。
现在我的最终要求是,只要我在入口中附加新创建的部署(RDP 应用程序)的规则,它就会开始允许 TCP 连接,那么有什么方法可以实现这一点。或者是否有任何其他可用的 Ingress 控制器可以解决这种类型的用例并且也可以轻松地与 external-dns 集成?
注意:- 我正在使用 AWS EKS 集群和带有外部 DNS 的 Route53。
解决方案
将此答案发布为社区 wiki,以解释问题中的一些主题,并希望指出解决方案。
随意扩展/编辑它。
NGINX Ingress
主要职责是转发HTTP
/HTTPS
流量。通过添加tcp-services
/udp-services
它还可以将TCP
/UDP
流量转发到它们各自的端点:
主要问题是Kubernetes 中Host
基于Ingress
资源的路由是专门针对HTTP
/HTTPS
流量而不是TCP
( RDP
)。
您可以实现以下场景:
Ingress controller
:3389
-RDP
Deployment
#13390
-RDP
Deployment
#23391
-RDP
Deployment
#3
没有Host
基于路由的地方。它更像是端口转发。
旁注!此设置还取决于
LoadBalancer
分配端口的能力(这可能会受到云提供商规范的限制)
至于可能不太直接的解决方案,我会看看以下资源:
- Stackoverflow.com:问题:基于主机名的 Nxing TCP 转发
- Doc.traefik.io:Traefik:路由:路由器:配置 TCP 路由器
- Github.com: Bolkedebruin: Rdpgw
我还会检查以下链接:
推荐阅读
- java - 将 android studio 更新到 4.2 Beta1 后,Gradle 构建失败
- laravel - 拉拉维尔。选择是否需要支点
- java - 无法使用 Java 库访问带有 Java 类的手动创建的资产文件夹
- javascript - IE11 中的 document.referrer 为空
- angular - 如何在打字稿中插入接口数组的特定索引?
- c# - 未在我的 webapi 中获取信息级别日志
- python - 从 DataFrame 返回切片以及元组中的 int
- c# - IdentityServer4 + AddNegotiate 实现
- javascript - SVG 添加文本以及圆弧
- python-3.x - 查找 zip 文件是否包含 .html 文件 python