Kubernetes - 如何获取负载均衡器后面的客户端 IP?

标签 kubernetes nginx-ingress

如何从 nginx 入口负载 blancer 获取客户端 IP?我已尝试设置使用代理协议(protocol)externalTrafficPolicy,但仍然不显示客户端IP。

Apache 为每个 http 请求记录 10.0.0.225。我不确定那是什么 IP,它似乎不是 pod 的 IP或节点IP。

httpd 服务:

apiVersion: v1
kind: Service
metadata:
  name: httpd
  labels:
    app: httpd-service
  namespace: test-web-dev
spec:
  type: NodePort
  selector:
    app: httpd
  ports:
    - name: port-80
      port: 80
      protocol: TCP
      targetPort: 80
    - name: port-443
      port: 443
      protocol: TCP
      targetPort: 443
  sessionAffinity: "ClientIP"
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  externalTrafficPolicy: Local

入口磅:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  use-proxy-protocol: 'true'
---
kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https

在 Apache 中,我配置了以下日志记录设置:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "logs/ssl_access_log" combined env=!forwarded
CustomLog "logs/ssl_access_log" proxy env=forwarded

最佳答案

您应该在 X-Forwarded-For header 中获取原始 IP,这是 nginx-ingress 的默认配置:forwarded-for-header

这是在 ConfigMap 中配置的

关于Kubernetes - 如何获取负载均衡器后面的客户端 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65246834/

相关文章:

kubernetes - CrashLoopBackOff中的Coredns(kubernetes 1.11)

configuration - 如何解决Prometheus错误 'role missing (one of: pod, service, endpoints, node)'

kubernetes - 入口将域 www 重写为非 www url

ssl - nginx ssl3_get_record 版本号错误 502 Bad Gateway

Azure/Kubernetes (AKS) - Nginx 入口从互联网超时

kubernetes - 按节点过滤的列表 `kubectl top pods`

kubernetes - 当一个 worker pods 成功时,完成并行的Kubernetes作业

docker - 运行 kubernetes autoscaler

kubernetes - 入口 Controller nginx 从 basic_auth 中排除 IP

Kubernetes Ingress 未重定向到正确的路径