在解决这个问题之前,我们首先需要了解一下整个流程,下面是一个简单的流程图和表格:
| 步骤 | 操作 |
| ---- | -------------------------------------- |
| 1 | 配置 Ingress Controller |
| 2 | 配置 Service |
| 3 | 配置 NGINX 反向代理 |
| 4 | 获取客户端真实 IP 地址 |
### 步骤一:配置 Ingress Controller
首先,我们需要在 K8S 集群中配置一个 Ingress Controller,以便处理外部流量的路由和负载均衡。可以使用 Nginx、Traefik 等不同的 Ingress Controller,这里以 Nginx 为例。
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/enable-real-ip: "true"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
```
### 步骤二:配置 Service
接下来,我们需要配置一个 Service,暴露我们的应用程序给 Ingress Controller 使用。
```yaml
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example-app
ports:
- protocol: TCP
port: 80
targetPort: 80
```
### 步骤三:配置 NGINX 反向代理
在 Ingress Controller 的配置中,我们使用了一个名为 `nginx.ingress.kubernetes.io/enable-real-ip` 的注解,该注解将启用 Nginx 的 real_ip 模块,以便向上游服务器传递真实的客户端 IP 地址。
### 步骤四:获取客户端真实 IP 地址
现在,您可以在您的应用程序中通过以下代码片段获取真实的客户端 IP 地址:
```python
from flask import request
@app.route('/')
def get_client_ip():
client_ip = request.headers.get('X-Real-IP')
return f"Client IP Address: {client_ip}"
```
通过以上步骤,我们已经成功地解决了“k8s 拿不到客户机 IP”这个问题,并且能够在应用程序中准确获取客户端的真实 IP 地址。希望这篇文章能帮助您更好地理解和解决这个问题。