玩转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容器服务,有专门的服务指导。

评论文章 (0)
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
3月前
|
Kubernetes 负载均衡 应用服务中间件
kubernetes—Ingress详解
kubernetes—Ingress详解
71 0
|
3月前
|
Kubernetes 应用服务中间件 nginx
|
4月前
|
Kubernetes 应用服务中间件 nginx
k8s ingress不生效的bug 解决了。
k8s ingress不生效的bug 解决了。
|
4月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习-Ingress(安装、模板、创建、删除)
k8s学习-Ingress(安装、模板、创建、删除)
96 0
|
6月前
|
Kubernetes 应用服务中间件 nginx
使用ingress暴露kubernetes集群内部的pod服务
使用ingress暴露kubernetes集群内部的pod服务
|
5月前
|
Kubernetes 应用服务中间件 API
5 分钟了解 Kubernetes Ingress 和 Gateway API
5 分钟了解 Kubernetes Ingress 和 Gateway API
114 0
|
6月前
|
Kubernetes 负载均衡 应用服务中间件
【K8S系列】第十三讲:Ingress详解
【K8S系列】第十三讲:Ingress详解
707 0
|
6月前
|
Kubernetes Cloud Native 应用服务中间件
【云原生】使用k8s创建nginx服务—通过ingress类型暴露
【云原生】使用k8s创建nginx服务—通过ingress类型暴露
|
7月前
|
Kubernetes 应用服务中间件 网络安全
用Kubernetes(k8s)的ingress部署https应用
用Kubernetes(k8s)的ingress部署https应用
215 0

相关产品

  • 容器服务Kubernetes版