# 实现获取K8S客户端IP的流程步骤

| 步骤 | 操作 | 代码示例 |
|------|----------------------|-----------------------------------------|
| 1 | 创建Deployment和Service | `kubectl apply -f deployment.yaml`
`kubectl apply -f service.yaml` |
| 2 | 获取Pod名称 | `POD_NAME=$(kubectl get pods -l app=your-app -o jsonpath="{.items[0].metadata.name}")` |
| 3 | 执行命令获取客户端IP | `kubectl exec -it $POD_NAME -- ip addr show eth0 \| grep inet \| awk '{ print $2 }'` |

### 操作步骤详解:

#### 步骤1:创建Deployment和Service

首先,我们需要创建一个Deployment和一个Service,Deployment负责管理Pod的创建和更新,而Service用于暴露Pod的网络连接。下面是一个简单的deployment.yaml和service.yaml示例:

**deployment.yaml**
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-app
spec:
replicas: 1
selector:
matchLabels:
app: your-app
template:
metadata:
labels:
app: your-app
spec:
containers:
- name: your-app
image: your-image
ports:
- containerPort: 80
```

**service.yaml**
```yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: your-app
name: your-app-service
spec:
selector:
app: your-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
```

通过`kubectl apply -f deployment.yaml`和`kubectl apply -f service.yaml`命令分别创建Deployment和Service。

#### 步骤2:获取Pod名称

接下来,我们需要获取部署在集群中的Pod的名称,以便后续执行命令获取客户端IP。我们可以使用以下命令来获取Pod名称:

```bash
POD_NAME=$(kubectl get pods -l app=your-app -o jsonpath="{.items[0].metadata.name}")
```

这条命令会获取标签为`app=your-app`的Pod的名称并存储在变量`POD_NAME`中。

#### 步骤3:执行命令获取客户端IP

最后,我们可以通过执行命令在Pod内部获取客户端IP地址。我们可以通过以下命令来执行并获取客户端IP:

```bash
kubectl exec -it $POD_NAME -- ip addr show eth0 | grep inet | awk '{ print $2 }'
```

该命令会在Pod内部执行`ip addr show eth0`命令获取网络接口eth0的IP地址信息,并通过`grep`和`awk`命令来提取出IP地址,并将其输出。

通过以上步骤,我们可以成功获取K8S客户端IP地址。这个流程简单明了,只需要通过几条命令即可实现。希望这篇文章对你有所帮助,祝你在K8S的学习和工作中顺利前行!