一、网络通讯模式
kubernetes的网络模型假定了所有pod都在一个直接连通的扁平的网络中,这在GCE里面是现成的网络模型,kubernetes假设这个网络已经存在。
而在私有云里搭建kubernetes集群,就不能假定这个网络已经存在了。我们需要自己实现这个网络假设,将不同节点上的docker 容器之间的互相访问先打通,然后运行kubernetes。
同一个pod的多个容器之间:lo
各个pod之间的通讯:overlay network
pod和service之间的通讯:各个节点的iptables规则
二、网络解决方案
1、 flannel网络:简单来说,他的功能是让集群中的不同节点主机创建的docker容器都具有全集群唯一的虚拟IP地址,而且他还能在这些IP地址之间建立一个覆盖网络(overlaynetwork)通过这个覆盖网络,将数据包原封不动地传递到目标容器内;
etcd的flannel提供说明:
1、 存储管理flannel可分配的IP地址段资源;
2、 监控etcd中每个pod的实际地址,并在内存中建立维护pod节点路由表;
etcd的flannel提供说明:
1、 存储管理flannel可分配的IP地址段资源;
2、 监控etcd中每个pod的实际地址,并在内存中建立维护pod节点路由表;
不同情况下网络通讯方式
同一个pod内部通讯:
同一个pod共享同一个网络命名空间 共享同一个linux协议栈
pod1至pod2:
1、 pod1和pod2不在同一台,pod的地址与docker0在同一个网段的,但是docker0网段与宿主机网卡是两个完全不同的ip网段,并且不同node之间的通讯只能通过宿主机物理网卡进行将pod的ip所在node的IP地址关联起来,通过这个关联让pod可以相互访问;
2、 pod1与pod2在同一台机器,由docker0网桥直接转发请求到pod2不需要经过flannel;
pod至service的网络:
目前基于性能考虑,全部为iptables维护和转发
pod到外网:
pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主机网卡完成路由选择后,iptables执行masquerade,把源ip更改为宿主机网卡的ip,然后向外网服务器发送请求
外网访问pod: service
kubernetes中的网络类型:
service网络:虚拟网络
pod网络:虚拟网络
节点网络:只有节点网络是真实的网络
》》》博主长期更新学习心得,推荐点赞关注!!!
》》》若有错误之处,请在评论区留言,谢谢!!!
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: