CSDN话题挑战赛第2期
参赛话题:万家争鸣的云计算修罗场
我想分享的云计算技能/知识点
K8S的网络通讯方式
该技能/知识点的背景介绍
在docker中,最小的调度单位是Container(容器),容器与容器可以组成服务框架。
在Kubernetes中,最小的调度单位是Pod,Pod之间的彼此合作及关联组成了集群。
pause:是一个 pod 必须存在的容器,而且总是第一个启动,并且成功,否则重载。启动后初始网络栈,并挂载当前 Pod 需要的存储卷。
mainC:一个Pod中必须至少有一个mainC,它会共享pause的网络栈和存储卷。
1、Pod类型
自主式Pod:自我完成对自我的管理
控制器管理的Pod:由对应控制器进行管理
该技能/知识点实际运用
Kubernetes 的网络模型假定了所有 Pod 都在一个可以直接连通的扁平的网络空间中,这在 GCE(Google Compute Engine)里面是现成的网络模型,Kubernetes 假定这个网络已经存在。而在私有云里搭建 Kubernetes 集群,就不能假定这个网络已经存在了。我们需要自己实现这个网络假设,将不同节点上的 Docker 容器之间的互相访问先打通,然后运行 Kubernetes。
Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟IP地址。而且它还能在这些 IP 地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动地传递到目标容器内。
总结
1)etcd之Flannel的作用:
1、存储管理 Flannel 可分配的 IP 地址段资源
2、监控 ETCD 中每个 Pod 的实际地址,并在内存中建立维护 Pod 节点路由表
2)网络通讯机制:
1、Pod内部的容器间的通讯:同一个Pod内部通过共享pause容器的网络栈,所以同Pod内部的不同容器的互相访问是基于此Pod内部的lo网卡实现的
2、不同Pod间的通讯机制:
a)同物理机的:同物理机的不同Pod之间,是通过当前物理机的Docker0网桥实现数据报文的转发
b)不同物理机的:
1)条件一:不同物理机间的Pod的地址不能够冲突。Flannel组件会向etcd发起网段的请求,并且etcd会记录当前分配网段与对应申请机器的物理网卡地址。
2)条件二:不同私有网络的Pod间如何在跨物理机实现报文传递?Flannel组件会通过UDP协议将数据报文进行二次封装实现数据传递