kubernetes学习笔记22:网络模型
k8s网络模型约法三章:任意两个pod之间可以直接通信,无需经过显示使用nat来接受数据和地址的转换;node和pod直接通信,无需明显地址转换;pod看见自己的ip跟别人看见IP是一样的,无需转换。
network namespace是实现网络虚拟化的内核基础,创建了隔离的网络空间,拥有独立的附属网络设备,独立的协议栈TCP,IP地址和路由表,IPtables规则,ipvs等。
pod和network namespace关心:每个pod有独立的网络空间,pod net container共享网络空间,用loopback接口进行通信,所有container通过pod的IP对外提供服务,对于宿主机的root ns是一个特殊的网络空间,pid是1。
容器网络模型店四大目标:容器和容器之间的通信,pod和pod之间的通信,pod和service之间的通信,外部世界和service之间的通信。k8s容器网络实现方案百花齐放,主要解决跨主机通信的,统称overlay(也叫覆盖网络,运行在应用层就是L7层之上的,不是依靠IP地址来传递信息,而是采用一种映射机制,即把IP地址和identifiers映射来资源定位),分别有flannel(udp,因为是内核态复制到用户太,而且还有封包转发和解包,性能最低;vxlan因为是Linux内核支持的功能,所以不需要复制到用户态,直接在内核态完成,但是也要udp封包转发和udp解包,所以性能相对好一点;host-gw模式就是把宿主机当网关,也称为直接路由,不需要封包和解包,所以性能最好,但是有限制条件,就是集群和宿主机要在一个子网中,也就是二层网络可达),calico,canal,weavenet等。network policy提供了基于策略的网络控制,用于隔离应用减少攻击,可以使用标签选择器(namespaceselector和podselector),流方向(ingress和egress),流特征:对端,IP段,协议,端口。
需要注意点:APIserver开启extensions/v1beta1/networkpolicies;网络插件支持network policy如calico,romana,weavenet和trireme等。