k8s 四层网络结构
转自以下博客:
https://blog.csdn.net/yang75108/article/details/101101384?spm=1001.2014.3001.5501
https://blog.csdn.net/yang75108/article/details/101267444
https://blog.csdn.net/yang75108/article/details/101268208
这篇三篇文章以分层的形式写K8s 的网络架构,深入浅出,值得收藏。
网络分层:
第0层网络是节点网络,直接对外暴露
第1层 POD 网络
同一个Node上,同一个pod的网络模式如下图:
关于docker0的理解:Docker在宿主机上默认的网络配置方式是bridge模式,docker server在启动的时候会自动在宿主机上创建一个名为docker0的虚拟网桥。同一个node上不同pod就是根据docker0进行寻址和网络连接。
veth0是pod的虚拟网卡,pod内部的不同容器就是根据veth0进行寻址和互相访问
同一个Node上不同pod之间的网络连接方式:
不同node之间的pod访问有两种方案,一是路由,二是overlay,结构图分别如下:
路由:
overlay
由于pod 网络实现方法众多,引入了CNI(container network interface),采用这个插件可以实现Pod的网络的操作,不需要关心具体实现细节。
第2层:Service 网络:
K8S master 上有个etcd组件,是这个网络机制的核心。关于etcd的原理和workflow可以参考文章https://zhuanlan.zhihu.com/p/96908130
etcd会接收保存K8s中所有资源的信息,node中的Kubelet把信息实时传给master中的etcd,这就是上图中的服务注册,kube-DNS和kube-proxy获取etcd中的信息就是上图中的服务发现。
kube-DNS保存serviceName->ClusterIP的信息。ClusterIP并不是一成不变的,ServiceName是唯一的。Kube-Proxy保存CluserIP->PodIP的信息。这样两层可以实现POD 在集群之间的网络连接。
第4层:外部接入网络:
这部分还需要进一步消化,后面再补上
K8S 网络涉及的相关的概念