在Kubernetes(K8s)中,由于负载均衡架构的存在,原始请求的源IP地址通常会被替换成负载均衡器的IP地址。为了获取Ingress-Nginx中真实的客户端IP地址,你需要进行适当的配置。以下是获取Ingress-Nginx真实客户端IP的步骤:
1. 修改Nginx配置:
在Nginx配置中,你需要添加或修改以下配置,以便将客户端的真实IP地址封装到请求头中:
```
nginx`proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;`
```
这些配置会将客户端的真实IP地址存储在`X-Real-IP`头部,并将它以及其他代理的IP地址(如果有的话)存储在`X-Forwarded-For`头部。
2. 重新加载Nginx配置:
修改完Nginx配置后,你需要重新加载配置以使更改生效。你可以使用以下命令重新加载Nginx配置:
```
bash`nginx -s reload`
```
3. 修改Ingress资源配置:
你还需要修改Ingress资源(通常是一个YAML文件)来确保Nginx控制器能够使用修改后的配置。在Ingress资源的注解部分,添加或修改以下内容:
```
yaml`annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;`
```
这将确保Ingress控制器在创建或更新Nginx配置时包含这些头部设置。
4. 应用Ingress资源配置**:
保存并应用修改后的Ingress资源配置。你可以使用`kubectl`命令来应用更新:
```
bash`kubectl apply -f ingress-resource.yaml`
```
5. 后端服务获取真实IP地址**:
在你的后端服务(例如Pod中的应用程序)中,你可以从请求头中读取`X-Real-IP`来获取客户端的真实IP地址。确保你的后端服务能够解析和信任这个头部。
请注意,这些步骤假设你正在使用Nginx作为Ingress控制器,并且你的Ingress资源已正确配置并指向你的后端服务。此外,根据你的具体环境和配置,可能需要额外的步骤或调整。