我有多个运行RDP应用程序的部署,它们都是通过ClusterIP服务公开的。我的k8s群集中有nginx ingress controller,为了允许tcp,我在nginx ingress controller部署中添加了tcp services configmap标志,并为其创建了configmap,如下所示
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
3389: “demo/rdp-service1:3389”
这将公开“rdp-service1”服务。我还有10个这样的服务需要在相同的端口号上公开,但如果我在相同的配置图中添加更多服务,就像这样
...
data
3389: “demo/rdp-service1:3389”
3389: “demo/rdp-service2:3389”
然后它将删除之前的服务数据,因为在这里我也在k8s中部署了外部dns,所以入口使用host:...
创建的所有记录将开始指向与新添加的服务一起附加的部署在confimap中。
现在,我的最终要求是,只要我在入口中添加新创建的部署(RDP应用程序)的规则,然后它就开始允许TCP连接,那么是否有任何方法可以实现这一点。或者是否有任何其他入口控制器可以解决此类用例,也可以轻松地与外部dns集成?
注意:-我正在使用AWS EKS群集和路由器53以及外部dns。
实际上,我真的不知道你为什么要使用configmap。
据我所知,nginx入口控制器正在路由来自同一端口的流量,并基于主机进行路由。因此,如果要在同一端口上公开应用程序,请尝试使用以下方法:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ .Chart.Name }}-ingress
namespace: your-namespace
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: your-hostname
http:
paths:
- pathType: Prefix
path: "/"
backend:
serviceName: {{ .Chart.Name }}-service
servicePort: {{ .Values.service.nodeport.port }}
查看您的需求,我觉得您需要的是LoadBalancer而不是入口
将这个答案作为社区wiki发布,以解释问题中的一些主题,并希望指出解决方案。
可以随意展开/编辑它。
NGINX Ingress的主要职责是转发HTTP流量。通过添加tcp服务,它还可以将tcp通信转发到各自的endpoint:
主要问题是库伯内特斯中的入口
资源的基于主机
的路由专门针对HTTP
/HTTPS
流量而不是TCP
(RDP
)。
您可以实现以下场景:
没有基于主机的路由。这更像是端口转发。
旁注!此设置还取决于负载平衡器分配端口的能力(这可能会受到云提供商规范的限制)
至于可能的解决方案,可能不那么直截了当,我将查看以下资源:
我还要查看以下链接:
>
Docs.konghq.com:库伯内特斯入口控制器:1.2。X:指南:使用tcpingress
Haproxy公司:
我基本上希望通过URL从外部访问Nginx hello页面。我已经为运行kubernetes和Nginx ingress:vps的v服务器的子域创建了一个(工作)a记录。我的域名。通用域名格式 我使用以下教程在CoreOS上通过kubeadm将Kubernetes安装为单节点集群:https://kubernetes.io/docs/setup/independent/install-kubead
我有一个JavaSpring Boot Application,我已经将服务器配置为在SSL上运行,这是强制性的。 我已经为我的域创建了一个证书从LetsEncrypt证书,并通过运行为keystore创建了一个p12文件 我想用Ingress Nginx控制器在Kubernetes上公开它,所以我创建了一个秘密 我已经部署了应用程序,可以看到部署文件,当我将本地8443端口转发到其服务的8443
我正在使用kubeadm工具创建kubernetes v1.7集群。 在我的主机上公开服务“echoheaders”非常简单。库贝。com使用外部ip 创建正在运行的部署: 从部署中公开服务: 从web浏览器访问: 现在,我想使用本指南中基于角色的入口控制器公开相同的服务echoheaders:https://github.com/kubernetes/ingress/tree/master/ex
我创建了一个docker镜像(java Web应用程序),创建了一个包含1个主节点和1个工作节点的kubernetes集群,创建了一个部署和一个服务。所有的资源似乎都运行良好,因为我已经通过“kubectl描述资源资源名”进行了检查。最后,我使用了入口来公开集群之外的服务。入口资源似乎工作正常,因为在描述入口对象时没有错误。但是,在从另一台机器访问浏览器上的主机时,我得到了“您的连接不是私有的”错
my-service.yml my-service-ingress.yml
如何使用入口控制器本身公开UI而不创建外部LoadBalancer?