在Kubernetes (K8S) 中,Pod 是最小的部署单元,它包含一个或多个容器。每个 Pod 都有自己的 IP 地址,用于在集群内部通信。在这篇文章中,我们将讨论 K8S 中 Pod IP 地址是如何分配的。

整个过程大致可以分为以下步骤:

| 步骤序号 | 步骤描述 |
|----------|----------------------------|
| 1 | 创建一个 Pod |
| 2 | 分配 Pod IP 地址 |
| 3 | 配置网络插件 |

下面我们将逐步介绍每个步骤以及代码示例:

### 步骤1:创建一个 Pod

在 K8S 中创建一个 Pod 可以通过 YAML 文件或者命令行来完成。下面是一个简单的 Pod YAML 示例:

```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
```

保存为 `pod.yaml` 文件,然后执行以下命令来创建 Pod:

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

### 步骤2:分配 Pod IP 地址

Pod IP 地址是由 K8S 的网络插件(如 Calico、Flannel、Cilium 等)负责分配的。当 Pod 被调度到节点上后,网络插件会为该 Pod 分配一个 IP 地址。你可以通过以下命令获取 Pod 的 IP 地址:

```bash
kubectl get pod my-pod -o=jsonpath='{.status.podIP}'
```

### 步骤3:配置网络插件

不同的网络插件可能有不同的配置方式,但通常情况下,你只需要按照网络插件的文档进行配置即可。这里以 Calico 为例,你需要按照以下步骤配置 Calico:

1. 安装 Calico:

```bash
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
```

2. 配置 Calico IP 池:

```bash
kubectl create -f calico-ipools.yaml
```

其中 `calico-ipools.yaml` 内容如下:

```yaml
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: my-ippool
spec:
cidr: 10.0.0.0/16
```

3. 部署 Calico 网络插件:

```bash
kubectl apply -f calico-node.yaml
```

通过以上步骤,你就完成了 Calico 网络插件的配置,Pod 在被创建时将会被分配 IP 地址。

总结一下,K8S 中 Pod 的 IP 地址是由网络插件负责分配的。在创建 Pod 后,网络插件会为其分配一个 IP 地址,用于在集群内部通信。在配置网络插件时,你需要查阅对应的文档,按照说明进行配置。

希望本文能够帮助你理解 K8S 中 Pod IP 地址的分配方式,并顺利进行相关配置。如果有任何问题或疑问,欢迎随时与我们进行交流。