玩转Kubernetes TCP Ingress

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 如何使用Kubernetes的TCP Ingress

问题

在Kuberetes应用中,一般都是通过Ingress来暴露HTTP/HTTPS的服务。但是在实际应用中,还是有不少应用是TCP长连接的,这个是否也是可以通过Ingress来暴露呢?大家知道Kubernetes社区默认带了一个Nginx的Ingress的,而它本身又是支持TCP做反向代理的。所以也就能支持TCP方式的Ingress的。

具体可以参考:
https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/

原理

Ingress Controller在启动时会去watch两个configmap(一个tcp,一个 udp),里面记录了后面需要反向代理的TCP的服务以及暴露的端口。如果里面的key-value发生变换,Ingress controller会去更改Nginx的配置,增加对应的TCP的listen的server以及对应的后端的upstream。

实践

配置Nginx的Ingress的deployment/daemonSet

  • 增加Ingress controller需要watch的configmap
    Snip20180621_41.png

  • 创建对应的configmap,暂时不需要配置服务。(注意,阿里云的Kubernetes集群,已经默认创建好了对应的configmap: tcp-services, udp-services,无需再创建)

TCP configmap

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: kube-system

UDP configmap

apiVersion: v1
kind: ConfigMap
metadata:
  name: udp-services
  namespace: kube-system

创建一个TCP服务

为了简单,可以直接用一个Nginx来模拟就可。如果创建这个deployment, service这个就不啰嗦了。

  • 给TCP的服务配置"Ingress" TCP服务不像HTTP,不能使用Kubernetes的Ingress对象来配置,而是使用修改对应的Configmap来增加一个"Ingress"
kubectl edit configmap/tcp-services -n kube-system

  • 然后增加data部分:

格式为:

<Nginx port>: <namespace/service name>:<service port>:[PROXY]:[PROXY]

Snip20180621_42.png

例子中将default/nginx这个服务暴露到5555端口

修改Ingress Controller的Service

因为TCP部分是需要通过端口来区分服务的,所以每个服务都需要增加一个独立端口,所以需要给Ingress Controller增加新的端口来映射后端的TCP服务

image.png

注意:在阿里云的Kubernetes服务创建的集群,可以不用指定nodeport,对应的cloud provider会自动到对应的SLB上创建端口映射如:

Snip20180621_44.png

这样就完成了一个TCP的“Ingress”的创建了。

访问TCP服务

直接访问对应的SLB的5555端口就可以。如果没有SLB可以直接访问对应的node节点的nodeport也可以。 

总结

给TCP创建“Ingress”总觉得有些workaround 的味道,还是期望后续社区能提供通过"Ingress"对象的方式来创建TCP的Ingress。


如果觉得不好处理,可以使用阿里云的Kubernetes容器服务,有专门的服务指导。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
773 110
|
Kubernetes 负载均衡 应用服务中间件
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
2130 1
|
9月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
297 2
|
11月前
|
缓存 Kubernetes 负载均衡
在K8S中,ingress 有何作用?
在K8S中,ingress 有何作用?
|
11月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
1759 0
|
Kubernetes 应用服务中间件 API
【Ingress 秘籍】集群进出流量的总管:揭秘 Kubernetes 中 Ingress 的终极奥秘!
【8月更文挑战第25天】Ingress是Kubernetes中用于管理HTTP与HTTPS流量进入集群的核心功能。作为集群内外通信的桥梁,Ingress通过定义规则将外部请求导向内部服务。本文详细介绍了Ingress的基本概念、配置方法及其实现方式。通过使用不同的Ingress控制器(如Nginx、Traefik等),用户可以根据需要选择最适合的方案。文中还提供了示例代码展示如何创建服务、部署应用及配置Ingress规则。
381 6
|
Kubernetes 负载均衡 应用服务中间件
在k8S中,ingress是什么?
在k8S中,ingress是什么?
|
监控 网络协议 安全
使用 Scapy 库编写 TCP ACK 洪水脚本
使用 Scapy 库编写 TCP ACK 洪水脚本
|
监控 网络协议 网络安全
使用 Scapy 库编写 TCP SYN-ACK 反射脚本
使用 Scapy 库编写 TCP SYN-ACK 反射脚本
|
API UED 开发者
超实用技巧大放送:彻底革新你的WinForms应用,从流畅动画到丝滑交互设计,全面解析如何在保证性能的同时大幅提升用户体验,让软件操作变得赏心悦目不再是梦!
【8月更文挑战第31天】在Windows平台上,使用WinForms框架开发应用程序时,如何在保持性能的同时提升用户界面的吸引力和响应性是一个常见挑战。本文探讨了在不牺牲性能的前提下实现流畅动画与交互设计的最佳实践,包括使用BackgroundWorker处理耗时任务、利用Timer控件创建简单动画,以及使用Graphics类绘制自定义图形。通过具体示例代码展示了这些技术的应用,帮助开发者显著改善用户体验,使应用程序更加吸引人和易于使用。
196 0

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多