K8S网路通信模式
同一个pod内多个容器之间: lo 共用一个 pause 的网络栈
各pod之间的通讯 :overlay network 全覆盖网络
pod 与service 之间的通讯:各节点的 Iptables 规则 加入了lvs转发
flannel 是coreOS 团队针对K8s 涉及一个网络规划,简单来说,它的功能是让集群中的不同节点主机创建的Docker 容器都具有全集群唯一的虚拟
IP地址,而且它还能再这些IP地址之间建立一个覆盖网络(overlay network) 通过这个覆盖网络,将数据包原封不动的传递到目标容器内
flanneld守护进程, 开启网桥 flannel0 专门收集docker0转发的数据报文 使用udp转发报文信息
同一个主机里面走docker0的网桥转发 docker0 分配ip到pod上
不同主机
源pod 先发到docker0 再到flannel0 ,flanneld 对数据报文进行封装 发送到对应主机,对应主机解封,到flannel0 再到docker0 在到目标pod
etcd 只flannel 提供说明:
存储管理flannel 可分配的IP 地址段资源
监控etcd里面每个pod的实际地址,并在内存中建立维护pod节点路由表
同一个pod的内部通讯,同一个pod共享同一个网络命名空间,共享同一个limux 协议栈
pod1 至pod2
pod1 与pod2 不在同一台主机,pod的地址是与docker0在同一个网段的,但docker0网段与宿主机网卡是两个完全不同的ip段,并且不同的node之间的通信只能通过宿主机的物理网卡进行,将pod的IP 和所在的NODE 的IP关联起来,通过这个关联让pod可以相互访问
pod1 与pod2 在同一台机器,由docker0网桥直接转发请求至pod2 ,不需要经过flannel ,
pod至service的网络,目前基于性能考虑,全部为iptables维护和转发
pod 到外网:pod 向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后,iptables执行masquerade 将源ip更改为宿主网卡的ip 然后向外网服务器发送请求
外网访问pod :Service
3种网络 节点网络, service 网络 pod网络

浙公网安备 33010602011771号