在上个章节里面,学习了k8s集群中master的初始化和node节点的加入,也通过 kubectl get nodes 命令看到集群中此时有2个节点了。但是为什么状态都是NotReady呢?
这是由于没有安装网络节点导致的。那接下来我们将开始学习网络插件的安装。
k8s集群中,网络插件的选择有很多种,例如Flannel、Calico、Canal、Weave等。他们各自有各自的优势和特点。大家可以结合他们的特点和实际环境来进行选择。
在讲解两种网络之前,我们先了解一个专业术语:CNI。
什么是CNI?
CNI 是由 CoreOS 提出的一个容器网络规范。已采纳改规范的包括 Apache Mesos, Cloud Foundry, Kubernetes, Kurma 和 rkt。另外 Contiv Networking, Project Calico 和 Weave 这些项目也为 CNI 提供插件。
CNI 对外暴露了从一个网络里面添加和剔除容器的接口。CNI 使用一个 json 配置文件保存网络配置信息。和 CNM 不一样,CNI 不需要一个额外的分布式存储引擎。
一个容器可以被加入到被不同插件所驱动的多个网络之中。一个网络有自己对应的插件和唯一的名称。CNI 插件需要提供两个命令:ADD 用来将网络接口加入到指定网络,DEL 用来将其移除。这两个接口分别在容器被创建和销毁的时候被调用。
从上面的文字和图片可以了解到,CNI意为容器网络通用接口标准,是一种标准的设计,为了让用户在容器创建或销毁时都能够更容易地配置容器网络。K8S中所有的网络插件都需要遵循他的标准。目前作者工作中用的比较多的有Flannel和Calico两种。本文计划暂时讲解这两种。如果后续大家有需要,再来讲解其他。
Flannel
- Flannel
由 CoreOS
开发的项目 Flannel
,可能是最直接和最受欢迎的 CNI
插件。它是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。随着 CNI
概念的兴起,Flannel CNI
插件算是早期的入门。
与其他方案相比,Flannel
相对容易安装和配置。它被打包为单个二进制文件 flanneld
,许多常见的 Kubernetes
集群部署工具和许多 Kubernetes
发行版都可以默认安装 Flannel
。Flannel
可以使用Kubernetes
集群的现有 etcd
集群来使用 API
存储其状态信息,因此不需要专用的数据存储。
Flannel
配置第3层 IPv4 overlay
网络。它会创建一个大型内部网络,跨越集群中每个节点。在此 overlay
网络中,每个节点都有一个子网,用于在内部分配 IP
地址。在配置 pod
时,每个节点上的 Docker
桥接口都会为每个新容器分配一个地址。同一主机中的 Pod
可以使用Docker
桥接进行通信,而不同主机上的 pod
会使用 flanneld
将其流量封装在 UDP
数据包中,以便路由到适当的目标。
Flannel
有几种不同类型的后端可用于封装和路由。默认和推荐的方法是使用 VXLAN
,因为 VXLAN
性能更良好并且需要的手动干预更少。
总的来说,Flannel
是大多数用户的不错选择。从管理角度来看,它提供了一个简单的网络模型,用户只需要一些基础知识,就可以设置适合大多数用例的环境。一般来说,在初期使用 Flannel
是一个稳妥安全的选择,直到你开始需要一些它无法提供的东西。
Calico
- Calico
Calico
是 Kubernetes
生态系统中另一种流行的网络选择。虽然 Flannel
被公认为是最简单的选择,但 Calico
以其性能、灵活性而闻名。Calico
的功能更为全面,不仅提供主机和 Pod
之间的网络连接,还涉及网络安全和管理。Calico CNI
插件在 CNI
框架内封装了 Calico
的功能。
在满足系统要求的新配置的 Kubernetes
集群上,用户可以通过应用单个 manifest
文件快速部署 Calico
。如果您对 Calico
的可选网络策略功能感兴趣,可以向集群应用其他 manifest
,来启用这些功能。
尽管部署 Calico
所需的操作看起来相当简单,但它创建的网络环境同时具有简单和复杂的属性。与 Flannel
不同,Calico
不使用 overlay
网络。相反,Calico
配置第3层网络,该网络使用 BGP
路由协议在主机之间路由数据包。这意味着在主机之间移动时,不需要将数据包包装在额外的封装层中。BGP
路由机制可以本地引导数据包,而无需额外在流量层中打包流量。
除了性能优势之外,在出现网络问题时,用户还可以用更常规的方法进行故障排除。虽然使用 VXLAN
等技术进行封装也是一个不错的解决方案,但该过程处理数据包的方式同场难以追踪。使用 Calico
,标准调试工具可以访问与简单环境中相同的信息,从而使更多开发人员和管理员更容易理解行为。
除了网络连接外,Calico
还以其先进的网络功能而闻名。 网络策略是其最受追捧的功能之一。此外,Calico
还可以与服务网格 Istio
集成,以便在服务网格层和网络基础架构层中解释和实施集群内工作负载的策略。这意味着用户可以配置强大的规则,描述 Pod
应如何发送和接受流量,提高安全性并控制网络环境。
如果对你的环境而言,支持网络策略是非常重要的一点,而且你对其他性能和功能也有需求,那么 Calico
会是一个理想的选择。此外,如果您现在或未来有可能希望得到技术支持,那么 Calico
是提供商业支持的。一般来说,当您希望能够长期控制网络,而不是仅仅配置一次并忘记它时,Calico
是一个很好的选择。