kubernetes ingress 怎么获取真实的 ip?有使用 frp

2021-06-01 12:42:01 +08:00
 dunhanson

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

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

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

2131 次点击
所在节点    程序员
13 条回复
comphilip
2021-06-01 13:55:56 +08:00
你使用的 kubernetes ingress 是 nginx,那么得搞清楚,这个 nginx 是跟 client 直连,还是与 client 之间存在其他节点。

从你的描述,貌似存在路由器这个节点,一个存在中间节点,那么中间节点必须把 client ip 信息带上。HTTP 一般是添加 X-Forwarded-For 这类的 header 。

貌似你的路由器不具备 7 层转发的功能。
dunhanson
2021-06-01 14:04:40 +08:00
@comphilip
中间节点有两种情况:
第一种是 frp 、第二种是路由器
amrom
2021-06-01 14:05:59 +08:00
这个问题我遇到过,重点在注解
dunhanson
2021-06-01 14:06:20 +08:00
生产环境的机子都是直通公网 ip,就可以 nginx 和 client 直连。
但是线下环境,必须通过路由器转发一道,或者 frp 进行
dunhanson
2021-06-01 14:06:40 +08:00
@amrom 能具体说下吗
amrom
2021-06-01 14:25:24 +08:00
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


时间太长忘记了,大致就是这两个地方
amrom
2021-06-01 14:27:15 +08:00
externalTrafficPolicy: Local 让请求的真实 IP 落到 ingress-nginx 的 pod 上,然后 nginx 的注解在加上转发真实 IP 的注解,实现真实 IP 转发到后端,该方案的缺点是 ingress-nginx pod 会固定到一台机器上
dunhanson
2021-06-01 14:44:38 +08:00
@amrom 第一种我之前试过,应该是不行的

应该是配置在 ingress-nginx 的 configmap 中吧?
amrom
2021-06-01 14:57:05 +08:00
@dunhanson 需要两个地方同时修改,不需要改 configmap,直接作用到 ingress-nginx 的注解就行了
dunhanson
2021-06-01 15:54:21 +08:00
@amrom 我回头在研究研究
dunhanson
2021-06-02 10:27:17 +08:00
这么配置,http 请求时可以正常获取到真实 ip 的
```yml
# Source: ingress-nginx/templates/controller-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
labels:
helm.sh/chart: ingress-nginx-2.13.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.35.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-controller
namespace: ingress-nginx
data:
enable-real-ip: "true"
forwarded-for-header: "X-Forwarded-For"
proxy-real-ip-cidr: "192.168.2.0/24"
```

[![2M3wDK.png]( https://z3.ax1x.com/2021/06/02/2M3wDK.png)]( https://imgtu.com/i/2M3wDK)
dunhanson
2021-06-02 10:55:55 +08:00
@amrom @comphilip 已解决
coolloves
2021-06-07 14:31:19 +08:00
马克下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/780579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX