Ingress nginx 公开TCP服务
文章目录
- 背景
- 搞起
- 拓展( PROXY Protocol )
- 参考
背景
公司业务繁多, HTTP、GRPC、TCP多种协议服务并存,Kubernetes流量入口复杂,所以萌生了通过LoadBalancer + Ingress-nginx 的方式完全的结果入口流量,当然在高并发的场景下可以对LoadBalancer 和Ingress-nginx 进行拆分管理。
HTTP以及GRPC在Ingress上的使用就不过多说明了。 主要验证下ingres-nginx对TCP流量的转发,以及简单窥探下实现逻辑。
搞起
首先先准备好内部TCP环境, 这里使用mysql作为测试服务,使用如下命令对服务进行部署。
cat > mysql.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:name: mysql-masterlabels:name: mysql-masternamespace: default
spec:replicas: 1selector:matchLabels:app: mysql-mastername: mysql-mastertemplate:metadata:labels:app: mysql-mastername: mysql-masterspec:containers:- name: mysql-masterimage: mysql:9imagePullPolicy: Alwaysports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: "123456"
---
kind: Service
apiVersion: v1
metadata:name: mysqlnamespace: default
spec:type: ClusterIPclusterIP: Noneports:- name: mysqlport: 3306selector:name: mysql-master
---
# 创建ingress tcp转发用到的configmap
apiVersion: v1
kind: ConfigMap
metadata:name: tcp-servicesnamespace: ingress-nginx
data:9000: "default/mysql:3306"
EOF
kubectl apply -f mysql.yaml
ingress对于TCP与UDP的转发通过增加--tcp-services-configmap和--udp-services-configmap参数配置,用于指定配置保存的configmap。
configmap 格式如下:
<external port>:<namespace/service name>:<service port/name>:[PROXY]:[PROXY]
- external port:表示ingress对外暴露的端口,需要在ingress service进行添加。 下一步添加。
- <namespace/service name>:service 所在的namespace及名称。
- <service port/name>:service的名称或端口。
- [PROXY]:[PROXY]:TCP 服务中使用代理协议解码 (listen) 和/或编码 (proxy_pass)。第一个PROXY控制代理协议的解码,第二个PROXY控制使用代理协议的编码。(可选)
拓展( PROXY Protocol )
什么是 PROXY Protocol ? 其实很简单,就是为了解决多层NET或TCP转发时 无法获取客户端真实IP的问题,在 TCP 第一行加入了一些信息标识协议、客户端地址、转发地址以及端口等。目前有 v1 和 v2 两个版本。
开源版本支持:
- HTTP 的 PROXY 协议:NGINX Open Source 1.5.12及更高版本
- TCP 客户端 PROXY 协议:NGINX Open Source 1.9.3及更高版本
- 接受 TCP 的 PROXY 协议:NGINX Open Source 1.11.4及更高版本
- PROXY 协议 v2:NGINX Open Source 1.13.11及更高版本
NGINX Open Source 默认不包含HTTP和Stream TCP的 Real-IP 模块;
一般获取客户端真实IP有以下2种方案:
HTTP:
- 使用 X-Forwarded-For(XFF)头
- Proxy Protocol + X-Forwarded-For
TCP:
- Proxy Protocol + nginx日志分析
- 基于网络层信息获取(toa)
然后接着说, 需要对ingress-nginx service 开启相应的端口转发,增加如下配置。
- name: proxied-tcp-9000port: 9000targetPort: 9000protocol: TCP
最后,修改ingress-nginx deployment , 在启动参数中加入如下配置,用来更新nginx 关于TCP/UDP的转发配置。
args:- /nginx-ingress-controller- --tcp-services-configmap=ingress-nginx/tcp-services
完结~撒花🎉~~
参考
nginx-ingress 服务架构图

根据配置的信息自动加载后端IP、Port (https://github.com/kubernetes/ingress-nginx/blob/main/rootfs/etc/nginx/lua/tcp_udp_balancer.lua)

相关文章:
Ingress nginx 公开TCP服务
文章目录 背景搞起拓展( PROXY Protocol )参考 背景 公司业务繁多, HTTP、GRPC、TCP多种协议服务并存,Kubernetes流量入口复杂,所以萌生了通过LoadBalancer Ingress-nginx 的方式完全的结果入口流量,当然在高并发的场景下可以对…...
谷歌浏览器支持的开发者工具详解
谷歌浏览器(Google Chrome)是全球最受欢迎的网页浏览器之一,它不仅提供了快速、安全的浏览体验,还为开发者提供了强大的开发者工具。本文将详细介绍如何使用谷歌浏览器的开发者工具,并解答一些常见问题。(本…...
【数据结构】汇编 、机器语言 高级语言 简析。
汇编语言、机器语言和高级语言 1. 机器语言(Machine Language) 定义:机器语言是计算机能够直接执行的、用二进制编码的指令集,属于最低级别的编程语言。它由 0 和 1 组成,每条指令由一串二进制数表示。机器语言与计算…...
【青牛科技】GC3901,强势替代 A3901/ALLEGRO应用于摇头机等产品中
在电子工程的浩瀚世界里,不断追求更优性能、更高效率和更低成本的芯片解决方案,是每一位电子工程师的不懈目标。今天,我们要为大家隆重介绍一款足以让你眼前一亮的芯片 —— 芯麦 GC3901,它将以强大的实力成为 A3901/ALLEGRO 的完…...
Java API类与接口:类的转换方法与正则表达式
文章目录 Java包装类的概述对应包装类包装类的转换方法(parse)Integer.parseInt(String s)Long.parseLong(String s)Byte.parseByte(String s)Short.parseShort(String s)Float.parseFloat(String s)Double.parseDouble(String s) 正则表达式常用方法 字符规则. 匹配…...
OceanBase JDBC (Java数据库连接)的概念、分类与兼容性
本章将介绍 OceanBase JDBC的 概念与分类,已帮助使用 JDBC 的用户及技术人员更好的 了解JDBC,以及 OceanBase JDBC在与 MySQL 及 Oracle 兼容性方面的相关能力。 一、JDBC 基础 1.1 JDBC 的概念 JDBC 一般指 Java 数据库连接。Java 数据库连接…...
Linux服务器定时执行jar重启命令
1. sh脚本编写 appNamecvcp-weather PIDps -ef |grep java | grep $appName | grep -v grep | awk {print $2} if [ "$PID" "" ]; thensleep 1;echo "no process";elseecho "process exsits";kill -9 $PID fi sleep 2s nohup /usr/l…...
速览!Win11 22H2/23H2 11月更新补丁KB5046633发布!
系统之家11月13日报道消息,微软为Win11 22H2和23H2用户发布了11月更新补丁KB5046633。此次更新后,系统版本号提升至22621.4460和22631.4460。该补丁包含多项改进和修复,有助于提升用户的使用体验感。想了解完整内容的小伙伴,请继续…...
A day a tweet(sixteen)——The better way of search of ChatGPT
Introducing ChatGPT search a/ad.及时的/及时地 ChatGPT can now search the web in a much better way than before so you get fast, timely a.有关的(relative n.亲戚,亲属;同类事物 a.比较的;相对的) answers with link…...
【网络】HTTP 协议
目录 基本概念基于 HTTP 的系统组成HTTP 的基本性质 HTTP 请求头 & 响应头HTTP 的请求方法HTTP 的返回码HTTP 的 CookieHTTP 缓存 Cache-Control会话HTTP/1.x 的连接管理 基本概念 HTTP(Hypertext Transfer Protocol,超文本传输协议)是一…...
git push报错 unexpected disconnect while reading sideband packet
应该是缓冲不够引起的,可以使用以下命令增加缓存: git config --global http.postBuffer 1048576000 1048576000这里的单位是Byte, 也就是1G。 亲测可以了...
JSX 语法与基础组件使用
在 React Native 中,JSX 是一种 JavaScript 的语法扩展,用于描述 UI 界面。JSX 语法类似于 HTML,但它是 JavaScript 的语法糖,可以直接在 JavaScript 代码中编写 UI 组件。本章节将介绍 JSX 语法的基础知识,以及 React…...
ReactPress:构建高效、灵活、可扩展的开源发布平台
ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 在当今数字化时代,内容管理系统(CMS)已成为各类网站和应用的核心组成部分。ReactPress,作为一款融合了现代Web开发多项先进技术的开…...
emulator总结
什么是硬件仿真器 做IC设计的人应该都知道软件仿真和FPGA原型验证,可以把硬件仿真器理解为这二者之间的产物,它同时具备二者的优点。 软件仿真(simulator)全面,支持UVM、assert、coverage收集、可以很方便的dump 波形…...
【Docker】‘docker‘ 不是内部或外部命令,也不是可运行的程序 或 批处理文件
在windows 电脑上安装了 Docker Desktop,在控制台输入 docker -v提示报错 ‘docker’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 报错原因是,环境变量没配置 解决办法,在系统环境变量中配置path ,重新打开cmd 或者…...
Mysql高可用架构方案
Mysql 介绍 Mysql是典型的开源关系型数据库,是许多网站、应用程序、企业软件产品的首选数据库。 Mysql特性: 易于使用,功能强大,支持事务、触发器、存储过程 管理工具多种多样且功能丰富 可以作为千万级数据管理的大型数据库 采…...
Go,15岁了[译]
请点击上方蓝字TonyBai订阅公众号! 虽然迟到了,但绝不缺席!新任Go技术负责人Austin Clements在Go语言15岁生日后的第二天,在Go官方博客上发表了庆祝文章“Go Turns 15[2]”。在这篇文章中,Austin回顾了过去一年Go项目和…...
【大数据学习 | kafka高级部分】kafka的数据同步和数据均衡
1. 数据同步 通过上图我们发现每个分区的数据都不一样,但是三个分区对外的数据却是一致的 这个时候如果第二个副本宕机了 但是如果是leader副本宕机了会发生什么呢? 2. 数据均衡 在线上程序运行的时候,有的时候因为上面副本的损坏ÿ…...
微擎框架php7.4使用phpexcel导出数据报错修复
在使用微擎社区版时,用phpexcel导出数据,提示错误,经过搜索后得知是php版本问题。 之前一直是用的5.6现在改成了7.4。所以才发现了这个问题。 然后去gitee上看了下微擎官方的代码,好像也没有对这个问题进行修复。 找了下&#…...
Netty实现WebSocket Server是否开启压缩深度分析
是否开启压缩会直接影响与客户端是否能够成功握手。 一、具体分析 通常客户端发起与Websocket连接一般是以下形式。 1)包含6个必要的Header Request Headers Sec-WebSocket-Version: 13 Sec-WebSocket-Key: Nlpc0kiHFjRom5/62lj8bA Connection: Upgrade Upgrade…...
别再到处找驱动了!手把手教你为ESXi 7.0 U3集成Broadcom阵列卡驱动(保姆级图文)
深度实战:为ESXi 7.0 U3定制集成Broadcom阵列卡驱动的完整指南虚拟化平台部署中最令人头疼的瞬间,莫过于当你精心准备的ESXi安装镜像在服务器上启动后,屏幕上赫然出现"No network adapter found"或"Storage controller not de…...
Claude + MS Project双引擎协同术:5分钟完成跨时区资源冲突检测与重排程,压测显示交付准时率提升41.6%
更多请点击: https://codechina.net 第一章:Claude项目管理应用技巧 Claude 作为具备强推理与长上下文理解能力的大语言模型,可深度融入项目管理全生命周期,提升需求分析、任务拆解、进度追踪与风险预判效率。关键在于将其定位为…...
为什么有些论文,答辩老师越听越不敢卡?
很多学生都经历过一种很明显的反差。有些同学一进答辩室, 老师状态特别紧。问题一个接一个; 追问不断; 语气越来越严肃。但还有一种情况。有些同学刚讲几分钟, 现场气氛就明显变了。老师开始点头; 追问越来越少&#x…...
手把手教你用Python+OpenBMI复现运动想象BCI实验(附完整代码与数据集)
Python实战:从OpenBMI到运动想象脑机接口的全流程复现指南在认知科学与脑机接口(BCI)研究领域,运动想象(Motor Imagery)实验一直是经典范式。传统上,这类实验多依赖Matlab生态完成,但随着Python在科学计算领域的崛起,越…...
Harness的配置漂移检测与自动修复
云原生时代的稳定性利器:Harness配置漂移检测与自动修复全指南 引言 痛点引入 相信每一位DevOps工程师、SRE或者运维负责人都遇到过这样的噩梦: 测试环境验证了3天的功能,上线到生产10分钟就出现503错误,排查了2小时才发现&…...
告别RGB!用HSL颜色空间在STM32上做颜色识别,为什么更准?附OV7725实战代码与调参心得
HSL颜色空间在嵌入式视觉中的实战优势:基于STM32与OV7725的鲁棒识别方案 当我们在嵌入式设备上实现颜色识别时,光照变化总是最令人头疼的问题之一。早晨、中午和傍晚的光线差异,阴影的干扰,甚至是LED频闪带来的影响,都…...
权威深度指南:使用iperf3 Windows版进行网络性能评估与优化实战
权威深度指南:使用iperf3 Windows版进行网络性能评估与优化实战 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3 Windows版是专业…...
30岁之后IT人士(程序员)的职业规划是什么呢?
前段也看到ibm的寇卫东的一篇文章关于职业规划的,现在看看,这些职业规划都是理想状态下的产物,很多时候,限于我们自身水平、时间、空间的影响,很多是看着很美,其实却远远的达不到,不能仅仅说让人…...
Taotoken用量看板如何帮助团队精确管理大模型API支出
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken用量看板如何帮助团队精确管理大模型API支出 对于团队管理者而言,在大模型应用开发过程中,一个核心…...
zotero-addons:Zotero生态扩展框架的模块化设计与架构解析
zotero-addons:Zotero生态扩展框架的模块化设计与架构解析 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing and installing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 在学术研究…...
