Multus是什么
k8s不提供网络解决方案,提供CNI ( Container Networking Interface )规范,被CNI插件遵守(Flannel, Calico,Macvlan,Multus等,这些是网络方案)
Multus 提供了将多个接口添加到pod的功能
Macvlan:可以将一块网卡虚拟成多块网卡,需要大量的mac地址,且不能与wireless 无线网络一起工作
Ipvlan:也是一块网卡虚拟成多块,但是ipvlan 虚拟出的子接口都有相同的mac地址(与物理接口共用同个mac地址)
CRD:CustomResourceDefinitions 自定义资源定义,二次开发能力用于扩展 k8s API.
默认网络:Pod 和 Pod 之间通信的网络
《基于k8s的容器云平台实战》
Flannel
使不同节点上的容器获得同一内网且不重复的ip.容器们可以通过内网直接通信
Calico
每个节点都会放它一个代理,没有NAT和UDP封装,性能最接近物理机
基于三层实现通信,在二层上没有任何加密包装,因此只能在私有的可靠网络上使用
部署
通过每个机器上部署 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网桥作为虚拟交换机相互通信,-p 3306:3306 将宿主机的3306端口绑定到容器的3306端口
Docker 采用了iptables的NAT,将宿主机的流量转发到容器内的端口上。这样一来,外界就可以与容器中的进程通信了。
NAT-- Network Address Translation 网络地址转换。将私有ip 转换成公网 ip.
每个容器的默认网关就是网桥地址
弊端 – Bridge 模式的容器与外界通信,会占用主机上的端口。
Pod与Service 通信
pod IP不是固定的,Service 的 Cluster IP, 能稳定对外提供服务。同时service还能高可用与负载均衡,将请求转发给正确的pod.
但Service的 Cluster IP是内部,外部想访问-- Service通过节点的静态端口对外提供服务
ppt
通过网桥捆绑不同的网络接口
下面左图是Nerfilter 的钩子,也就是回调函数能作用的地方,蓝色的地方,右图是利用这些钩子做的面对使用人员友好的防火墙
kube-proxy实现路由的转发
Flannel就是让docker0网桥的ip不要重复,否则怎么直接通信。第二负责打通docker0 bridge之间的通信