1.k8s网络通信
a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现;
b.pod之间的通信:pod ip pod ip,pod和pod之间不经过任何转换即可通信;
c.pod和service通信:pod ip cluster ip(即service ip)pod ip,它们通过iptables或ipvs实现通信,ipvs取代不了iptables,因为ipvs只能做负载均衡,而做不了nat转换;
d.Service与集群外部客户端的通信.
kubectl get configmap -n kube-system
kubectl get configmap kube-proxy -o yaml -n kube-system
看到mode是空的,把它改为ipvs就可以
k8s靠CNI接口接入其他插件来实现网络通讯.目前比较流行的插件有flannet、callco、canel.
这些插件使用的解决方案有如下方式:
a.虚拟网桥:虚拟网卡,多个容器共用一个虚拟网卡进行通信;
b.多路复用:MacVLAN,多个容器共用一个物理网卡进行通信;
c.硬件交换:SR-LOV,一个物理网卡可以虚拟出多个接口,这个性能最好.
CNI插件存放位置
cat /etc/cni/net.d/10-flannel.conflist
flanel只支持网络通讯,但是不支持网络策略;
callco网络通讯和网络策略都支持;canel:flanel+callco
可以部署flanel提供网络通讯,再部署一个callco只提供网络策略,而不用canel.
mtu:是指一种通信协议的某一层上面所能通过的最大数据包大小.
通过ifconfig可以看到flannel.1的地址是10.244.1.0,子网掩码是255.255.255.255,mtu是1450,正常mtu是1500,