在Kubernetes(k8s)集群中获取真实IP地址是一个非常常见的需求,这通常涉及到为服务配置负载均衡器(如Ingress Controller),以便外部用户可以访问集群内的服务。在本文中,我将向您展示如何在Kubernetes集群中获取真实IP地址。

### 步骤概览

让我们首先看一下整个过程的步骤概览:

| 步骤 | 描述 |
|------|--------------------------------------------|
| 1 | 部署Ingress Controller |
| 2 | 配置Ingress以暴露服务 |
| 3 | 查看请求头中的真实IP地址 |

### 详细步骤

#### 1. 部署Ingress Controller

在Kubernetes中,Ingress Controller是一种用于公开服务的资源。您可以使用各种Ingress Controllers,如Nginx、Traefik、或Istio。在这里,我们以Nginx Ingress Controller为例:

```bash
# 部署Nginx Ingress Controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
```

#### 2. 配置Ingress以暴露服务

接下来,您需要为您的服务创建一个Ingress资源,以便可以通过Ingress Controller进行负载均衡。这里有一个示例Ingress资源配置:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: mydomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
```

将上面的配置保存到一个YAML文件中(如`ingress.yaml`),并通过以下命令应用配置:

```bash
kubectl apply -f ingress.yaml
```

#### 3. 查看请求头中的真实IP地址

在Nginx Ingress Controller中,客户端的真实IP地址可以通过查看请求头中的`X-Real-IP`字段获取。您可以通过以下方式查看客户端的真实IP地址:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: mydomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
nginx.ingress.kubernetes.io/configuration-snippet: |
real_ip_header X-Real-IP;
set_real_ip_from 0.0.0.0/0;
```

在上面的配置中,`real_ip_header X-Real-IP;`告诉Nginx Ingress Controller从请求头中读取`X-Real-IP`字段,从而获得客户端的真实IP地址。

通过以上步骤,您就可以在Kubernetes集群中获取真实IP地址了。希望这篇文章可以帮助您解决这个问题!如果您在实施过程中遇到任何问题,欢迎随时向我们寻求帮助。