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