Myluzh Blog

Strive to become a dream architect.

K8S ingress 传递用户真实IP

发布时间: 2024-1-16 文章作者: myluzh 分类名称: Kubernetes


0x01 前言
今天发现后端获取到的用户客户端ip都是内网地址 172.29.241.163。
访问逻辑为:用户访问->nginx->k8s-ingress->后端pod。
但是后端pod获取客户端的ip一直是172.29.241.163,原来这个ip的ingress的上游nginx的ip。
# nginx节点
root@iZbp12bkuvg20e1j3y9gtvZ:/etc/nginx/conf.d# ifconfig | grep 172
       inet 172.29.241.163  netmask 255.255.240.0  broadcast 172.29.255.255

# nginx反向代理到k8s-ingress的配置文件
root@iZbp12bkuvg20e1j3y9gtvZ:/etc/nginx/conf.d# cat prd-all.conf 
upstream prd-nginx-server {
  server 172.29.241.160:80;
  server 172.30.82.215:80;
  keepalive 10;
  keepalive_requests 100;
}
server {
      listen 80;
      server_name *.xxxxx.com;
      #root html;
      #index  index.html index.htm;
      client_max_body_size 10m;
      location / {
        proxy_set_header Host $host;
        # 这里nginx已经配置了将客户端的真实IP地址传递给后端的服务器,证明没问题
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://prd-nginx-server/;
      }
}
排障思路为:
1、首先查看nginx这侧的配置文件,有没有把remote地址转发给ingress,发现是存在的。
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2、那问题就在ingress上了,ingress没有把上游nginx的header转发到下面,经过一番折腾定位到了问题原因,通常,用户ip的传递依靠的是X-Forwarded-*参数。但是默认情况下,ingress是没有开启的。

0x02 解决

在ingress-nginx-controller的configmap中添加use-forwarded-headers: ture,如下:
root@iZbp12bkuvg20e1j3y9gtxZ:~# kubectl get configmap -n ingress-nginx
NAME                              DATA   AGE
ingress-controller-leader         0      479d
ingress-controller-leader-nginx   0      479d
ingress-nginx-controller          0      479d
kube-root-ca.crt                  1      479d
root@iZbp12bkuvg20e1j3y9gtxZ:~# kubectl edit configmap ingress-nginx-controller -n ingress-nginx
apiVersion: v1
kind: ConfigMap
data:
  use-forwarded-headers: "true"
...

0x99 参考文章
ingress nginx传递用户真实ip问题
k8s ingress 添加获取客户端真实ip配置
ingress获取客户端真实IP配置记录
解决K8s中Ingress Nginx控制器无法获取真实客户端IP的问题

标签: k8s nginx Ingress ip use-forwarded-headers X-Real-IP X-Forwarded-For

发表评论