Ingress nginx 公开TCP服务

ops/2024/11/12 20:18:21/

文章目录

    • 背景
    • 搞起
    • 拓展( 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)
在这里插入图片描述


http://www.ppmy.cn/ops/132529.html

相关文章

Chromium 中chrome.system.memory扩展接口定义c++

一、chrome.system.memory chrome.system.memory API。 权限 system.memory 类型 MemoryInfo 属性 availableCapacity number 可用容量的量&#xff08;以字节为单位&#xff09;。 容量 number 物理内存容量的总容量&#xff08;以字节为单位&#xff09;。 方法 ge…

红黑视觉化

有图有真相 不堪回首图最美公式 log ⁡ 2 n \log_{2}{n} log2​n 2 n 2^n 2nNIL节点&#xff08;空叶子节点&#xff09;为黑色 准备工作不用担心本子不够画了说明只能到九层了从任意结点画 观止 不堪回首 第一篇前就想画了&#xff0c;没有底气只能说打印。曾经手画过&#x…

github.com port 22

使用GitHub的443端口 22端口可能被防火墙屏蔽了&#xff0c;可以尝试连接GitHub的443端口。 查看ssh文件夹内是否存在config文件&#xff0c;没有的话创建一个 config文件内容为 Host github.comHostname ssh.github.comPort 443 保存后重新运行git操作即可

逐梦代码深林:Linux编译之舞,链接之诗——自举、动静态库的浪漫旅程

文章目录 问题引入&#xff0c;为什么要进行编译->汇编?一、详细解释编译器自举1. 从最初的二进制编程到汇编2. 第一代汇编编译器的诞生3. 编译器自举的出现&#xff1a;从汇编到更高级的编译器4. 自举的延续&#xff1a;从汇编到高级编程语言5. 为什么要进行编译器自举&am…

PDF编辑工具Adobe Acrobat DC 2023安装教程(附安装包)

Adobe Acrobat DC 2023 是 Adobe 公司推出的一款功能强大的 PDF 文档处理软件。它不仅支持创建、编辑和签署 PDF 文件&#xff0c;还提供了丰富的工具来管理和优化这些文件。以下是 Acrobat DC 2023 的一些主要特点&#xff1a; 1.PDF 创建与编辑&#xff1a;用户可以直接从多…

cv::intersectConvexConvex返回其中一个输入点集,两个点集不相交

问题&#xff1a;cv::intersectConvexConvex返回其中一个输入点集&#xff0c;但两个点集并不相交 版本&#xff1a;opencv 3.1.0 git上也有人反馈了intersectConvexConvex sometimes returning one of the input polygons in case of empty intersection #10044 是凸包嵌套判…

设计模式-构建者

构建者是一种用于创建对象时将对象的构建过程和表示分离的设计模式,适用于构造过程复杂的对象和创建需要多种变化的场景使用. 例如一个汽车是一个抽象概念,车会具体到很多种,不同的发动机,车身,轮胎等等构建一个具体的车,所以这个具体对象创建有很多种可能.因此可以使用构建者设…

VScode插件:前端每日一题

简单说下你对 HTTP2 的理解 HTTP/2 是 HTTP 协议的一个改进版本&#xff0c;旨在提升网络传输的速度和效率&#xff0c;主要改进点包括&#xff1a; 多路复用&#xff1a;允许多个请求和响应在同一个 TCP 连接中并行传输&#xff0c;避免 HTTP/1.x 的“队头阻塞”问题。 头部压…