❶ Nginx Ingress TCP代理实现
一般使用ingress都是代理http流量,但是有些场景希望代理tcp流量,例如:不想占用过多的公网IP。
开源的ingress对tcp支持不是很好,主要原因在于 k8s的Ingress没有给tcp留下插入点 ,可以通过ingress定义 kubectl explain ingress.spec.rules 证实。
ingress http代理简单来说,暴露一个http服务,根据host和path转发用户请求到真正的svc(用户请求带有host)。tpc代理就是暴露一堆端口号,不同的端口对应不同的后端svc。
官网 暴露TCP服务 章节,介绍可以通过 --tcp-services-configmap 暴露tcp服务,具体怎么使用没有实践之前一直不是很理解。
通过chart安装包可以获取nginx-ingress-controller deployment启动配置。
deploy脚本示例
tcp的相关配置通过configmap存储,需要注意data属性,controller会解析它。
登陆controller的Pod,直接查看nginx.conf,在最后一行,可以看到nginx代理配置。直接通过 curl localhost:8080 ,可以正常访问服务。
nginx.conf示例
整体架构可以参考
https://blog.csdn.net/shida_csdn/article/details/84032019
NGINXController有个channel,所有更新事件通过watch传到这个channel;同时channel通过queue绑定NGINXController的syncIngress,用于处理变更事件。
有关watch的初始化在store.go中实现,当key的名称为tpcconfigmap时,会触发更新。
internal/ingress/controller/store/store.go
1)在tcp configmap手动新增配置,ingress contorller svc会不会动态改变?
更多文章见: http://huiwq1990.github.io/
❷ Nginx反向代理TCP协议【反代SSH端口】
当需要通过Nginx间接访问TCP协议的服务,如SSH,以实现端口转发时,一个常见的需求应运而生。
要实现这一目标,首先需要理解反向代理的工作原理。Nginx作为一款强大的网络服务器,能够将客户端的请求转发到后端服务器,即使后端服务器运行的是非HTTP协议,如TCP。这里,我们关注的是如何配置Nginx来代理SSH连接。
配置过程中,关键在于设置正确的代理规则。通常,需要在Nginx的配置文件中添加一个新的location块,指定监听的端口(如22822)以及目标服务器的地址和SSH端口(默认为22)。确保防火墙和Nginx服务器的权限设置允许这种通信。
在实施时,注意事项不可忽视。首先,要确保Nginx配置的正确性,避免语法错误。其次,检查目标SSH服务器的配置,确认它是否允许来自Nginx代理的连接。还要注意安全,可能需要使用SSL/TLS加密,以保护数据传输。
深入了解Nginx的proxy_pass指令和相关模块,如stream模块,可以帮助你更精确地管理TCP代理。同时,定期检查Nginx日志以发现和解决问题也是必不可少的。
一旦配置完成,SSH客户端只需连接到VPS的22822端口,即可成功地通过Nginx反向代理访问SSH服务。至此,反代任务已顺利完成,可以开始高效地使用了。