在Kubernetes中使用Nginx获取用户真实IP地址是一个常见的需求,因为在使用负载均衡器时,Nginx默认会将请求的IP地址设置为负载均衡器的IP地址。为了正确获取用户的真实IP地址,我们需要对Nginx配置做一些调整。下面我将为你介绍如何实现这个过程。

首先,让我们来看一下整个流程的步骤:

| 步骤 | 操作 |
| -------- | -------- |
| 1. 安装Nginx Ingress Controller | 使用Helm安装Nginx Ingress Controller |
| 2. 配置Nginx Ingress Controller | 修改ConfigMap配置,启用`use-proxy-protocol` |
| 3. 部署一个测试应用 | 部署一个简单的应用用于测试真实IP获取是否成功 |
| 4. 验证真实IP获取 | 访问测试应用,并查看请求头中的X-Real-IP字段 |

接下来,让我们逐步实现以上步骤。

### 1. 安装Nginx Ingress Controller

首先,使用Helm来安装Nginx Ingress Controller,确保你已经安装了Helm。执行以下命令:

```bash
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install nginx-ingress ingress-nginx/ingress-nginx
```

### 2. 配置Nginx Ingress Controller

编辑Nginx Ingress Controller的ConfigMap,启用`use-proxy-protocol`。执行以下命令:

```bash
kubectl edit configmap nginx-configuration -n ingress-nginx
```

在ConfigMap中添加以下配置:

```yaml
data:
use-proxy-protocol: "true"
```

### 3. 部署一个测试应用

接下来,我们需要部署一个简单的测试应用,用于验证真实IP地址的获取是否成功。创建一个Deployment和Service,如下:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-app
spec:
replicas: 1
selector:
matchLabels:
app: test-app
template:
metadata:
labels:
app: test-app
spec:
containers:
- name: test-app
image: nginx:latest

---
apiVersion: v1
kind: Service
metadata:
name: test-app
spec:
selector:
app: test-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
```

### 4. 验证真实IP获取

最后,访问测试应用,查看请求头中的`X-Real-IP`字段是否包含用户的真实IP地址。你可以使用curl命令或浏览器插件来查看:

```bash
curl -I http://YOUR_CLUSTER_IP
```

在返回的HTTP响应头中,找到`X-Real-IP`字段,该字段的值应该是用户的真实IP地址。

通过以上步骤,你已经成功配置了Nginx Ingress Controller以获取用户的真实IP地址。记得在实际生产环境中测试和验证这一设置,确保其正常运行。

希望这篇文章对你有所帮助,若有任何疑问,欢迎继续提问。祝学习顺利!