学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
Python实战微信订餐小程序 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
Python量化交易实战 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
目录 |
回到顶部# 0.前言
参考文档:https://github.com/containernetworking/cni
Pod网络插件,为了实现Pod网络而需要的插件、组件。由于Kubernetes通过开放的CNI接口来允许插件的接入,所以它又称之为CNI网络插件。
为了解决跨主机容器间通信问题,市面上存在很多解决方案,为了兼容和规范这些解决方案,Kubernetes仅设计了网络模型,却将Pod网络的实现交给了CNI网络插件,并允许网络插件通过标准的CNI(Container Network Interface,容器网络接口)连接到容器管理系统。
CNI网络插件主要解决的就是容器跨主机通信问题而存在的,并使跨主机间运行的Pod位于同一个网络平面,其大致解决步骤通常有两步:分配设置自定义容器网络(PodIP在集群中全局唯一性)和实现容器网络通信(处理方法通常有路由、覆盖网络{Vxlan、IPIP}等等)。
每个Pod都会创建一个名叫"pause"的根容器,其他运行的业务容器都是复制该容器的网络,这个容器就是Kubernetes为了自定义网络等特殊功能而存在的。
CNI网络插件分为以下四种:
光单独靠一种CNI网络插件是无法实现完整的Pod网络通信和更高级的网络策略功能的,第三方组织可以灵活的组合这些CNI插件实现基本Pod网络功能和更高级功能,所以市面上流行出来很多解决方案。
在现今,比较常用的流行的Pod网络解决方案有Flannel和Calico(支持网络策略功能)、Canal(由Flannel实现网络通信+Calico提供网络策略)。
回到顶部# 1.Calico概述
参考文档:https://projectcalico.docs.tigera.io/
Calico是一款广泛采用、久经考验的开源网络和网络安全解决方案,适用于Kubernetes、虚拟机和裸机工作负载。与Flannel对比,Calico除了支持基本网络功能的实现之外,它还支持全套Kubernetes网络策略功能,以及在其之上扩展网络策略。
Calico主要由以下组件组成:
CNI网络插件,Calico通过CNI网络插件与kubelet关联,从而实现Pod网络。
Calico节点代理是运行在每个节点上的代理程序,负责管理节点路由信息、策略规则和创建Calico虚拟网络设备。
Calico Node主要由以下子模块程序组成:
Calico网络策略控制器。允许创建"NetworkPolicy"资源对象,并根据资源对象里面对网络策略定义,在对应节点主机上创建针对于Pod流出或流入流量的IPtables规则。
Typha是Calico的一个扩展组件,用于Calico通过Typha直接与Etcd通信,而不是通过kube-apiserver。通常当K8S的规模超过50个节点的时候推荐启用它,以降低kube-apiserver的负载。每个Pod/calico-typha可承载100~200个Calico节点的连接请求,最多不要超过200个。
Calico支持两种类型网络工作模式(后端机制):
如果物理主机在同一2层网络中,则建议采用使用BGP动态路由通信方式;如果物理主机是跨子网通信的话,可能由于到达目标主机的跳数太多导致性能下降,所以建议使用覆盖网络模式。
采用BGP动态路由协议自动学习来自其他AS自治系统上的路由条目,即其他节点主机上的路由条目。
类似于Flannel的Host-GW模式,不过它没有不能跨子网的限制。
想要更多