Kubernetes(K8S)是一个功能强大的容器编排平台,可以帮助我们有效管理和部署容器化应用程序。在K8S中,每个容器都有一个独一无二的IP地址,但这些IP地址在容器重新启动后会发生变化。如果我们需要为容器分配静态IP地址,以便其他服务能够准确地访问这些容器,我们可以使用K8S提供的Service资源为容器分配静态IP。

下面我将详细介绍如何在K8S中实现静态IP的设置。

### 设置K8S静态IP的流程

| 步骤 | 描述 |
| ---- | ---- |
| 1 | 创建静态IP地址的配置文件 |
| 2 | 创建Service资源 |
| 3 | 将Service资源绑定到Pod |

### 实现方式

#### **步骤1:创建静态IP地址的配置文件**

首先,我们需要创建一个静态IP地址的配置文件,例如我们创建一个名为`static-ip.yaml`的YAML文件。

```yaml
apiVersion: v1
kind: Endpoints
metadata:
name: my-static-ip
subsets:
- addresses:
- ip: 192.168.1.100 # 静态IP地址
ports:
- port: 80
```

代码说明:
- `apiVersion`:指定API的版本。
- `kind`:定义资源类型为Endpoints。
- `metadata`:指定资源的元数据,包括名称。
- `subsets`:定义Endpoint的子集,指定静态IP地址和端口。

#### **步骤2:创建Service资源**

接下来,我们需要创建一个Service资源连接到上一步定义的静态IP地址。

```yaml
apiVersion: v1
kind: Service
metadata:
name: my-static-service
spec:
ports:
- port: 80
targetPort: 80
clusterIP: None
type: ClusterIP
selector:
app: my-app
externalTrafficPolicy: Local
```

代码说明:
- `apiVersion`:指定API的版本。
- `kind`:定义资源类型为Service。
- `metadata`:指定资源的元数据,包括名称。
- `ports`:指定端口映射关系。
- `clusterIP`:将ClusterIP设置为None,这样Service将不会被分配IP地址。
- `type`:指定Service类型为ClusterIP。
- `selector`:指定Service所匹配的Pod标签。
- `externalTrafficPolicy`:外部流量策略为Local,确保流量通过本地环回。

#### **步骤3:将Service资源绑定到Pod**

最后,我们需要将创建的Service资源绑定到对应的Pod上。

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
serviceAccountName: my-service-account
replicas: 3
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- port: 80
type: ClusterIP
selector:
app: my-app
clusterIP: None
externalTrafficPolicy: Local
```

代码说明:
- 通过Deployment创建Pod,并指定Pod的标签与服务标签匹配。
- Service部分与上一步创建Service资源相似,再次确保`clusterIP`为None,`externalTrafficPolicy`为Local。

通过以上步骤,我们成功为K8S中的容器分配了静态IP地址,保证了其他服务能够准确地访问这些容器。希望以上介绍对你有所帮助,如有疑问请随时联系我。