一、前言
在 Kubernetes 集群中,网络插件可以理解为 Kubernetes 节点之间通信的“网线”,保证集群中各个组件(Pod)之间可以通信,并且 Pod 可以正常地访问外部网络。目前 Kubernetes 支持多种网络插件,其中最常用的是 CNI 插件。
本文较为详细地介绍 Kubernetes 网络插件和 CNI 插件的原理、用法及其对比,同时给出了实际操作示例。
二、Kubernetes 网络插件的原理及分类
Kubernetes 网络插件可以分为两类:Overlay 网络和 Underlay 网络。
- Overlay 网络:使用软件定义网络(SDN)解决 Kubernetes 中的网络问题。这种网络模型可以将 Kubernetes 中各个 Pod 的 IP 地址“封装”起来,不会对宿主机的网络体系造成破坏。比较典型的 Overlay 网络插件有 Flannel、Calico、Weave Net 等。
- Underlay 网络:这种网络模型使用宿主机底层的网络协议栈来解决各个 Pod 之间的通信问题,不使用 Overlay 技术。也就是说,每个 Pod 直接使用宿主机的网络,不再需要另外的网络设置。比较典型的 Underlay 网络插件有 Bridge、Host、Macvlan 等。
三、CNI 插件的原理及其优点
CNI 是一个 Kubernetes 支持的网络插件接口规范,提供了各种网络插件可以按照规范来实现。CNI 插件主要由三部分组成:CNI 插件、网络配置和容器运行时。
CNI 插件主要有如下优点:
- 兼容性好:CNI 插件可以适配各种 Kubernetes 插件,对于较新版本的 Kubernetes 也有支持。
- 无限制:CNI 插件可以在网络模式与拓扑方面进行高度自定义。
- 安全:CNI 插件支持各种安全机制,如 TLS 认证、身份验证等。
四、CNI 插件的使用方法
下面为简单的 CNI 插件使用实例:
首先,通过 yum 或 apt-get,安装 CNI 插件:
yum install -y cni-plugins # or apt-get install -y cni-plugins
然后,创建一个名为 “bridge” 的网络,将它保存为 JSON 格式:
-- -------------------- ---- ------- - ------------- -------- ------- --------- ------- --------- --------- ---------- ------------ ----- --------- ----- ------- - ------- ------------- --------- -------------- --------- - - ------ ----------- - - - -
最后,应用这个网络:
cat myfile.json | sudo -E /opt/cni/bin/bridge conf
在容器中使用 CNI 插件也十分简单,只需指定相应的网络插件即可:
docker run --rm --net=cni-bridge busybox ip addr show
五、CNI 插件与 Kubernetes 网络插件的对比
接下来,我们简要对比一下 CNI 插件和 Kubernetes 不同的网络插件:
- Flannel
Flannel 是 Kubernetes 中最常用的 overlay 网络插件,可以支持自定义内部网络拓扑结构。相较于 CNI 插件,Flannel 提供的网络性能较佳。但是,Flannel 有着一定的复杂性和部署成本。同时,Flannel 多用内部的 VXLAN 和 GRE 技术,这使得它的网络功能对物理网络更加依赖。
- Calico
Calico 是基于 BGP 的固定处置的独立层网络 (PILN)。Calico 使用网络层路由技术来创建一个扁平的二层网络,并且支持高度自定义的网络拓扑结构,甚至可以支持多种虚拟化和容器化平台。相较于 Flannel,Calico 对企业级应用更加友好。但是 Calico 部署和维护上的复杂度较高,并且不能保证用户配置的路由顺序。
- Weave Net
像 Calico 和 Flannel 一样,Weave Net 也是一个 SDN 网络,使用 VXLAN 协议提供网络隔离。Weave Net可以将该局域网扩展到广域网,而不会像 VLAN 一样受到网络物理链路的限制。Weave Net不依赖于任何特定的基础设施或下层网络,因此可以与硬件基础设施完全隔离。Weave Net 还提供了对其他容器化平台的支持,因此非常灵活。
- Macvlan
Macvlan 是一种 Linux 网络类型,能够让应用(容器)保持和宿主机相当的网络配置。Macvlan 核心的特性是能够对应一对虚拟 VETH 设备对的 MAC 地址进行扩展,这些设备分别用于容器和宿主机。由于它采用的是底层虚拟化技术,因此性能较优。但是 Macvlan 带来了额外的网络管理和配置,因此使用可能更具挑战性。
六、结论
本文重点介绍了 Kubernetes 网络插件和 CNI 插件的原理、用法及其对比。根据不同的需求和网络拓扑结构,用户可以灵活选择不同的网络插件来保证 Kubernetes 集群的良好运行。
除了 Flannel、Calico、Weave Net 等比较流行的网络插件,Kubernetes 还提供了如下插件:
- Bridge
- Host-Local
- Macvlan
- IPVLAN
- SR-IOV
各插件具体的用法和特性可参考 Kubernetes 官方文档。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6747d5f95883fc5ebfe4fba5