K8s网络
Docker中可以使用网桥方式给主机上的容器分配地址,K8s容器的网络通过插件的方式来实现,K8s管理集群核心解决的就是每个主机节点的IP地址网段划分,以及单个Pod的IP地址分配
- 保证每个Pod拥有集群内唯一的IP地址(唯一IP)
- 保证不同节点IP地址段不重复
- 保证跨界点Pod可以互相通信(Pod互通)
- 保证节点的Pod可以与其他主机互相通信(Pod与主机互通)
常用插件
只要可以实现CNI的接口,就能作为K8s的网络插件了
flannel
calico
kube-ovn
Flannel
flannel,flannel属于overlay network,通过将原始报文再包一层四层协议,通过主机网络进行路由转发,但因此性能上会有些损失,overlay的实现主要采用vxlan
跨节点通信,节点内部Pod通过flannel0虚拟交互机分配IP,每个主机被划分的网段都是不一样的,当Pod跨界点通信时在最外层数据包封装为宿主机的信息进行路由传输,包中有vxlan header标识
Calico
calico,calico创建和管理一个三层的网络,每个容器会分配一个可路由的IP,通信时直接路由可达,不用封装解封装数据包,性能损耗小,易于水平扩展。
互联方式,小规模部署可以通过BGP client直接互联,大规模下可以通过指定的BGP Route Reflector来完成,保证所有网络通信都通过IP路由方式互联。
网络策略,calico基于iptables实现丰富灵活的网络策略
calico架构,Etcd存储集群节点网络信息。BGP client负责将Felix配置的路由信息分发到其他节点。Felix是Calico的agent运行在每个节点,负责配置路由、配置ACLs、报告状态。BGP Route Reflector作为大规模部署BGP client的中心连接点,避免每个节点互联
参考
Kubernetes Handbook——Kubernetes 中文指南/云原生应用架构实践手册
BGP Route Reflector
flannel