在深入了解数据包如何在 Kubernetes 集群中流动的细节之前,让我们首先明确 Kubernetes 网络的要求。
Kubernetes 网络模型定义了一组基本规则:
- 集群中的 pod 应该能够在不使用网络地址转换 (NAT) 的情况下与任何其他 pod 自由通信。
- 在集群节点上运行的任何程序都应该与同一节点上的任何 pod 进行通信,而无需使用 NAT。
- 每个 pod 都有自己的 IP 地址(IP-per-Pod),并且每个其他 pod 都可以通过相同的地址访问它。
相反,它们笼统地描述了集群网络的属性。
为了满足这些限制,您必须解决以下挑战:
- 你如何确保同一个 pod 中的容器的行为就像它们在同一个主机上一样?
- pod 能否到达集群中的其他 pod?
- pod 可以访问服务吗?服务是负载平衡请求吗?
- pod 可以接收集群外部的流量吗?