Multus是什么
k8s不提供网络解决方案,提供CNI ( Container Networking Interface )规范,被CNI插件遵守(Flannel, Calico,Multus等,这些是网络方案)
Multus 提供了将多个接口添加到pod的功能
Flannel 为每个k8s节点提供一个子网
Calico 为容器提供多主机间通信
Macvlan:可以将一块网卡虚拟成多块网卡,需要大量的mac地址,且不能与wireless 无线网络一起工作
Ipvlan:也是一块网卡虚拟成多块,但是ipvlan 虚拟出的子接口都有相同的mac地址(与物理接口共用同个mac地址)
CRD:CustomResourceDefinitions 自定义资源定义,二次开发能力用于扩展 k8s API.
默认网络:Pod 和 Pod 之间通信的网络
部署
通过每个机器上部署 Multus daemonset 的方式
K8s网络
单主机docker网络通信模式
1)host模式 --net=host
不会虚拟自己的网卡、配置自己的IP,使用宿主机的IP和端口
弊端 – 容器因与宿主机共用网络栈而抢夺网络资源,宿主机已经使用的端口,容器不能用
2)container --net=container:docker_bri1
该模式下容器使用其他容器的网络命名空间,这两个容器不存在网络隔离,但与其他容器和宿主机存在
同意pod下的container 就是这种模式
3)none
该容器没有网卡、IP、路由等信息。需要用户为Docker容器添加网卡、配置IP等。
4)bridge
Docker默认的网络模式。容器之间、容器与宿主机之间的网络栈隔离,通过Docker0网桥与外界进行通信
容器之间通过Docker0网桥作为虚拟交换机相互通信,
Pod与Service 通信
pod IP不是固定的,Service 的 Cluster IP, 能稳定对外提供服务。同时service还能高可用与负载均衡,将请求转发给正确的pod.
但Service的 Cluster IP是内部,外部想访问-- Service通过节点的静态端口对外提供服务
ppt
通过网桥捆绑不同的网络接口
下面左图是Nerfilter 的钩子,也就是回调函数能作用的地方,蓝色的地方,右图是利用这些钩子做的面对使用人员友好的防火墙
kube-proxy实现路由的转发
Flannel就是让docker0网桥的ip不要重复,否则怎么直接通信。第二负责打通docker0 bridge之间的通信