l2 cni 插件和 l3 插件有什么区别?

what is the difference between l2 cni plugin vs l3 plugin?

l2 cni 插件和 l3 cni 插件有什么区别?

L2 CNI 插件是否不提供 public 访问 pods?L2 和 L3 插件的示例是什么

通常当提到 L2 和 L3 CNI 插件时,他们谈论的较少是 pods 的可达性(public vs private),更多的是关于 OSI 网络模型层网络插件在该 pod 和其他 Kubernetes 之间提供的连接性 pods。

例如,如果所有 pods 都可以相互发送 L2 流量(例如 ARP),那么 CNI 插件正在提供 L2 连接。大多数 CNI 插件为 Kubernetes pods 提供 IP (L3) 网络,因为这是 Kubernetes networking model.

定义的

提供跨主机 L3 网络的 Kubernetes 网络实现的一些示例:Calico、flannel、Canal、kube-router 等。

我能想到的唯一可以跨主机提供 L2 网络的例子是 Weave Net,但我想可能还有其他我忘记的例子。

请注意,以上许多内容都可以使用 VXLAN 等封装方法来提供跨主机的 pod 到 pod 网络。这通常被误解为它们在 pods 之间提供 L2 网络。但是,他们通常仍然在 pod 与其主机之间使用 IP 路由步骤,这意味着它提供 L3 pod 到 pod 连接。

另请注意,上面的许多连接 pods 使用 linux 桥接在同一主机上,这意味着同一主机上的 pods 将获得 L2 连接,但 pods 在其他主机上将被路由 (L3)。将 L3 网络扩展到大量端点要容易得多,因此这是有道理的。 Calico 在这里略有例外,即使在同一主机上 pods 也使用 L3 路由网络。