目录
k8s 网络模型产生的背景和目的
k8s 作为编排引擎管理着分布在不同节点上的容器和 Pod。而 Pod、Service 以及外部组件之间需要一种可靠的方式找到批次并进行互相通信,此时 k8s 网络则负责提供这个保障。下面将介绍如下内容:
- k8s 网络模型;
- k8s 基于 CNI 实现的各种网络方案;
- Network Policy 网络策略;
k8s 的网络模型下集群中的各种实体如何通信?
1. Pod内容器之间的通信
- 当 Pod 被调度到某个节点,Pod 中的所有容器都在这个节点上运行,这些容器共享相同的本地文件系统、IPC 和网络命名空间。
- 不同 Pod 之间不存在端口冲突的问题,因为每个 Pod 都有自己的 IP 地址。当某个容器使用 lalhost 时,意味着使用的是容器所属 Pod 的地址空间。
- 比如 PodA 有两个容器 container-AI 和 container-A2,container-A1 在端口1234 上监听,当 container-A2 连接到 laltost:12324 时, 实际上就是在访问 cntaine-Al。这不会与同个节点上的 PodB 冲突,即使 PodB 中的容器 container-BI 也在监听1234端口。
2. Pod之间的通信
- Pod的IP是集群可见的,即集群中的任何其他Pod和节点都可以通过IP直接与Pod通信,这种通信不需要借助任何网络地址转换、隧道或代理技术。Pod 内部和外部使用的是网个 IP,这也意味着标准的命名服务和发现机制,比如DNS可以直接使用。
3. Pod与Service的通信
- Pod 间可以直接通过 IP 地址通信,但前提是 Pod 知道对方的 IP。在 Kabenete 集群中,Pod 可能会频繁地销级和创建,也就是说 Pod 的 IP 不是固定的。为了解决这个问题,Service 提供了访问 Pod 的抽象层。无论后端的 Pod 如何变化,Service 都作为稳定的前端对外提供服务。同时 Serice 还提供了高可用和负载均衡功能,Service 负责将请求转发给正确的Pod。
4. 外部访问
- 无论是 Pod 的 IP 还是 Service 的 Cluster IP,它们只能在 Kubermetes 集群中可见,对集群之外的世界,这些 IP 都是私有的。
- Kubermetes 提供了两种方式让外界能够与 Pod 通信:

本文探讨了Kubernetes的网络模型,包括Pod间通信机制、CNI及其优点,CNI插件分类与选型,以及NetworkPolicy在网络策略中的应用。重点介绍了基于CNI的网络方案如Canal和其在实际部署中的应用。
最低0.47元/天 解锁文章
3307

被折叠的 条评论
为什么被折叠?



