SSL 透传需要启用 PROXY 协议以获取客户端 IP 地址,但会破坏 HTTP 请求
作者: erhhung创建于 2025年10月10日更新于 2026年2月4日
标签kind/bugneeds-triageneeds-priority
发生了什么:
我启用了入口控制器中的 SSL 透传(--enable-ssl-passthrough),因为某些服务需要直接检查客户端证书(类似于 #10706 问题),或者返回自己的证书(例如 vCluster 控制平面)。
启用 SSL 透传后,ingress-nginx 会在 443 端口上创建一个监听器,并使用 PROXY 协议代理到 HTTPS 后端(通过 442 端口)。为了接收真实的客户端 IP 地址,我设置了 hostNetwork: true、enable-real-ip: true、use-forwarded-headers: true、compute-full-forwarded-for: true 和 proxy-real-ip-cidr: <lan-cidr> 设置,但 $remote_addr 总是为 127.0.0.1,原因是本地 443->442 跳转。只有在 use-proxy-protocol: true 设置为 true 并且 proxy-real-ip-cidr 包含 127.0.0.1/32 时,才会出现真实的客户端 IP 地址,以及 $server_port 为 442。
内容来源: kubernetes/ingress-nginx