技术解析

kubernetes ingress 怎么获取真实的 ip?有使用 frp
0
2021-06-01 12:32:20
idczone

一直获取的是局域的 ip 地址,192.168.2.56 ,这台机子是对外暴露 80 和 443 端口的 hostnetwork 主机

2ncdpV.png

2ncwlT.png

我百度和谷歌了一些方案,但是还是不行,不知道有没有人遇到类似的问题

我也可以不用 frp,就是域名指向公网 ip 的路由器,然后路由器那边再进行转发到 1美国服务器92.168.2.56 ( 80 和 443 端口)这台机子。但是也是会有类似的问题,ingress-nginx-controller pod 日志输出的 ip 地址是网关地址 192.168.2.1


你使用的 kubernetes ingress 是 nginx,那么得搞清楚,这个 nginx 是跟 client 直连,还是与 client 之间存在其他节点。
从你的描述,貌似存在路由器这个节点,一个存在中间节点,那么中间节点必须把 client ip 信息带上。HTTP 一般是添加 X-Forwarded-For 这类的 header 。
貌似你的路由器不具备 7 层转发的功能。


中间节点有两种情况:
第一种是 frp 、第二种是路由器

这个问题我遇到过,重点在注解

生产环境的机子都是直通公网 ip,就可以 nginx 和 client 直连。
但是线下环境,必须通过路由器转发一道,或者 frp 进行

能具体说下吗

1. ingress-nginx 注解:
annotations:
nginx.org/compute-full-forwarded-for: "true"
nginx.org/forwarded-for-header: "X-Forwarded-For"
nginx.org/use-forwarded-headers: "true"
2. 需要指定 ingress 的端口暴露方式为 nodePort,在改一个配置:
externalTrafficPolicy: Local

时间太长忘记了,大致就是这两个地方

externalTrafficPolicy: Local 让请求的真实 IP 落到 ingress-nginx 的 pod 上,然后 nginx 的注解在加上转发真实 IP 的注解,实现真实 IP 转发到后端,该方案的缺点是 ingress-nginx pod 会固定到一台机器上

第一种我之前试过,应该是不行的
应该是配置在 ingress-nginx 的 configmap 中吧?

需要两个地方同时修改,不需要改 configmap,直接作用到 ingress-nginx 的注解就行了

我回头在研究研究

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服