在Kubernetes (K8S) 中,固定节点IP是指将节点的IP地址与某个固定的主机名绑定在一起,确保每次重启节点后IP地址保持不变。这对于需要稳定访问某一节点的应用程序非常重要。下面我将为你详细介绍如何在K8S中实现固定节点IP的功能。

### 实现固定节点IP流程

| 步骤 | 操作 |
| :---: | :--- |
| 1 | 配置每个节点的host文件 |
| 2 | 创建Service对象 |
| 3 | 测试固定节点IP是否生效 |

### 步骤详解

#### 步骤一:配置每个节点的host文件

在每个K8S节点上,编辑host文件,将节点IP地址与固定主机名绑定。

```bash
# 编辑host文件
vi /etc/hosts
```

在文件中添加以下内容(假设节点IP地址为192.168.0.1,主机名为k8s-node1):

```bash
192.168.0.1 k8s-node1
```

#### 步骤二:创建Service对象

创建一个头类型(Headless)的Service对象,这会创建一个虚拟的Service IP地址,指向固定的节点IP地址。

```yaml
apiVersion: v1
kind: Service
metadata:
name: node1-service
spec:
clusterIP: None # 设为None表示创建Headless Service
selector:
app: node1
ports:
- protocol: TCP
port: 80
targetPort: 80
```

应用以上配置创建Service:

```bash
kubectl apply -f node1-service.yaml
```

#### 步骤三:测试固定节点IP是否生效

部署一个测试应用,并尝试通过Service IP地址访问固定的节点IP地址。

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

应用以上配置创建Deployment:

```bash
kubectl apply -f test-app.yaml
```

查看创建的Service IP地址:

```bash
kubectl get svc
```

尝试通过Service IP地址访问固定的节点IP地址:

```bash
curl node1-service.default.svc.cluster.local
```

### 总结

通过以上步骤,你已经成功实现了在K8S中固定节点IP的功能。通过配置节点的host文件,创建Headless Service对象,以及测试访问固定的节点IP地址,你可以确保在Kubernetes集群中节点IP地址的稳定性。希望这篇文章对你有所帮助,祝你在K8S的学习之路上一帆风顺!