NGINX Ingress Controller中PROXY协议配置详解

NGINX Ingress Controller中PROXY协议配置详解

什么是PROXY协议

PROXY协议是一种网络协议,它允许中间服务器或负载均衡器(如HAProxy、ELB等)将客户端的原始连接信息(包括IP地址和端口)传递给后端的服务。在Kubernetes环境中,当NGINX Ingress Controller位于中间服务器或负载均衡器之后时,启用PROXY协议可以帮助我们获取真实的客户端IP地址。

为什么需要PROXY协议

在典型的网络架构中,客户端请求通常会经过多层中间服务器或负载均衡器。如果没有PROXY协议,后端服务看到的客户端IP地址将是最后一个中间服务器的IP地址,而不是真实的客户端IP。这会导致:

  1. 日志记录不准确
  2. 基于IP的访问控制失效
  3. 地理位置服务无法正常工作
  4. 安全审计困难

配置PROXY协议

要在NGINX Ingress Controller中启用PROXY协议,需要通过ConfigMap进行配置。以下是关键配置项:

基本配置

proxy-protocol: "True"

这个配置项启用PROXY协议支持,它会应用于所有的Ingress和VirtualServer资源。

必要配套配置

启用PROXY协议后,还需要配置以下两个关键参数:

  1. real-ip-header:必须设置为proxy_protocol,告诉NGINX使用PROXY协议头中的IP地址
  2. set-real-ip-from:指定可信的中间服务器IP地址或子网范围
real-ip-header: "proxy_protocol"
set-real-ip-from: "192.168.0.0/16"

配置示例解析

下面是一个完整的ConfigMap配置示例:

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-config
data:
  proxy-protocol: "True"
  real-ip-header: "proxy_protocol"
  set-real-ip-from: "192.168.0.0/16"

在这个示例中:

  1. proxy-protocol: "True" 启用了PROXY协议支持
  2. real-ip-header: "proxy_protocol" 指定使用PROXY协议头
  3. set-real-ip-from: "192.168.0.0/16" 表示信任来自192.168.0.0/16子网的连接

注意事项

  1. 安全考虑set-real-ip-from应该尽可能精确地指定可信中间服务器的IP范围。在生产环境中,不建议设置为0.0.0.0/0(信任所有IP),这可能导致IP欺骗攻击。

  2. TransportServer资源:只有在Ingress Controller启用了TLS Passthrough时,TransportServer资源才支持PROXY协议。

  3. 日志记录:启用PROXY协议后,NGINX日志中的$remote_addr变量将显示真实的客户端IP地址,而不是中间服务器的IP地址。

  4. 向后传递:NGINX Ingress Controller默认会将真实IP地址通过X-Real-IP头传递给后端服务。

实际效果

配置生效后,NGINX的默认日志格式将记录真实的客户端IP:

'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'

其中$remote_addr将显示真实的客户端IP地址,而不是中间服务器的IP地址。

最佳实践

  1. 精确配置可信IP:尽量缩小set-real-ip-from的范围,只包含确实需要信任的中间服务器IP。

  2. 测试验证:配置完成后,应该通过发送测试请求并检查日志来验证真实IP是否正确记录。

  3. 监控变更:当中间服务器IP变更时,记得更新set-real-ip-from配置。

  4. 考虑使用注解:对于特定Ingress资源,可以考虑使用注解来覆盖全局配置(如果支持)。

通过正确配置PROXY协议,可以确保在复杂的网络架构中,服务始终能够获取到真实的客户端IP地址,这对于日志记录、访问控制和安全审计都至关重要。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值