文章
问答
冒泡
Haproxy四层TCP转发到kubesphere k8s ingress获取真实客户端IP

1、需求背景

java后端业务需要获取到真实客户端访问的IP地址,整个业务流程如下:Haproxy(四层负载转发)--->Ingress服务--->后端JAVA应用

2、Haproxy(TCP四层)获取真实IP

haproxy配置修改,需要在转发server那一行 最后面配置 send-proxy
注意:配置修改完成后先不要重启,等ingress开启proxy_protocol协议后再重启,否则由于ingress为开启proxy_protocol协议后悔导致平台无法访问。

#############################dev环境的feature配置#################################
frontend http\_frontend
bind \*:80
acl is\_http hdr\_beg(host) \*.uihcloud.cn
redirect scheme https if !{ ssl\_fc }
mode http
option httpclose
option forwardfor
reqadd X-Forwarded-Proto:\ https
frontend https\_ingress
bind \*:443
mode tcp
default\_backend https\_dev\_web\_server

backend https\_dev\_web\_server
mode tcp
balance roundrobin
stick-table type ip size 1m expire 30m
stick on src
# 需要添加send-proxy配置
server s1 10.6.209.45:31443 send-proxy

3、修改Ingress(http七层)获取真实IP转发到后端

3.1、ingress开启proxy_protocol协议

use-proxy-protocol: true

3.2、将真实IP转发到后端服务

  compute-full-forwarded-for: 'true'
  forwarded-for-header: X-Forwarded-For
  use-forwarded-headers: 'true'

3.3、配置截图

ingress配置,下面两张图是kubesphere的配置

企业微信截图_16149094018073.png
企业微信截图_16149094364716.png

4、重新部署ingress容器,重启haproxy服务

4.1、重新部署ingress

在kubesphere 上重启此服务
企业微信截图_16149094594958.png

4.2、重启haproxy服务

systemctl restart haproxy

5、访问页面,查看ingress日志

企业微信截图_16149094743453.png

6、后端获取客户端真实IP信息

企业微信截图_16149094891830.png

haroxy
ingress

关于作者

Wade
No bald man, no god
获得点赞
文章被阅读