这么配置,http请求$remote_addr是可以获取到ip的(非https)
---
# 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"
---
https也可以获取到ip了 configmap配置
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:
use-proxy-protocol: "true"
enable-real-ip: "true"
forwarded-for-header: "proxy_protocol"
proxy-real-ip-cidr: "192.168.2.0/24"
frp配置
[gitlab-https]
type = https
local_ip = 192.168.2.56
local_port = 443
remote_port = 443
custom_domains = gitlab.dunhanson.site
proxy_protocol_version = v2
[gitlab-http]
type = http
local_ip = 192.168.2.56
local_port = 80
remote_port = 80
custom_domains = gitlab.dunhanson.site
proxy_protocol_version = v2
1
comphilip 2021-06-01 13:55:56 +08:00
你使用的 kubernetes ingress 是 nginx,那么得搞清楚,这个 nginx 是跟 client 直连,还是与 client 之间存在其他节点。
从你的描述,貌似存在路由器这个节点,一个存在中间节点,那么中间节点必须把 client ip 信息带上。HTTP 一般是添加 X-Forwarded-For 这类的 header 。 貌似你的路由器不具备 7 层转发的功能。 |
3
amrom 2021-06-01 14:05:59 +08:00
这个问题我遇到过,重点在注解
|
4
dunhanson OP 生产环境的机子都是直通公网 ip,就可以 nginx 和 client 直连。
但是线下环境,必须通过路由器转发一道,或者 frp 进行 |
6
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 时间太长忘记了,大致就是这两个地方 |
7
amrom 2021-06-01 14:27:15 +08:00
externalTrafficPolicy: Local 让请求的真实 IP 落到 ingress-nginx 的 pod 上,然后 nginx 的注解在加上转发真实 IP 的注解,实现真实 IP 转发到后端,该方案的缺点是 ingress-nginx pod 会固定到一台机器上
|
8
dunhanson OP |
11
dunhanson OP 这么配置,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) |
13
coolloves 2021-06-07 14:31:19 +08:00
马克下
|