kubespray部署kubernetes集群时支持多种网络插件的集成,如下表所示
网络插件名 | 特征作用 |
---|---|
calico | pod网络连通、网络策略隔离(namespace,pod) |
flannel | pod网络连通 |
canal | calico与flannel集合 |
multus | pod多网卡支持,与其他cni插件一起部署,其他cni插件提供pod网络连通 |
weave | pod网络连通、轻量级,不需要额外的K/V数据库集群(etcd集群) |
macvlan | pod网络连通 |
kube-router | pod网络连通 |
contiv | pod网络连通,网络隔离策略(防火墙,流量限制),多租户子网隔离 |
kube-ovn | pod网络连通,固定IP,网络隔离策略(防火墙,流量限制),多子网支持(-namespace-子网,子网安全组策略) |
cilium | pod网络连通,负载均衡,多集群网络联通 |
参考网址:https://blog.csdn.net/ccy19910925/article/details/82424275
1、pod联通性原理
网络插件calico
主要通过iptables规则和veth
接口对实现pod
网络连通(采用的是路由策略)。k8s
创建容器时调用cni
插件calico
创建一个veth
接口对,一个在容器中为eth0
,一个在容器所在的节点上名为calxxxx
。veth
接口对的特性是流量访问接口对的一端会从另一端出来,在容器内部默认路由是走eth0
,因此会流入到容器所在节点的calxxxx
接口。
容器内部接口
通过calicoctl
运行命令查看关联性
在节点上查看接口
使用命令ip route
在节点的路由表中可以看到pod
目标IP的下一跳地址是配置在pod
所在节点ip
上。
到达目标pod
所在的节点后。在节点上使用命令ip route
会看到目标pod
的IP
对应的网卡是caliXXX
,写入caliXX的报文会通过容器内的eth0流出,从而进入到容器的网络空间中。
参考网址: http://dockone.io/article/618 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。 1、pod连通性 Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。 默认的节点间数据通信方式是UDP转发。 1)为什么每个节点上的Docker会使用不同的IP地址段?
这个事情看起来很诡异,但真相十分简单。其实只是单纯的因为Flannel通过Etcd分配了每个节点可用的IP地址段后,偷偷的修改了Docker的启动参数。
2)为什么在发送节点上的数据会从docker0路由到flannel0虚拟网卡,在目的节点会从flannel0路由到docker0虚拟网卡?
因为配置了路由表大范围子网通过flannel0
,小范围子网通过docker0
。
网络插件calico
和flannal
组合,已不再更新,新特点将单独在组件calico
和flannal
中开发。