kubernetes 的网络模型基础
文章目录前言:k8s 网络中的通信类型:①、同一 Pod 内 Container 间的通信②、各 Pod 之间的通信③、Pod 与 Service 间的通信④、集群外部流量 与 Service之间的通信Pod IP —— 实际存在Cluster IP —— 虚拟 IP总结:①、节点网络 —— 构建集群之前②、Pod 网络 —— 构建集群时(虚拟网络)③、Service 网络 —— 集群创建时(虚拟
文章目录
这里是我自己写的一个 “小白学习 kubernetes” 的一个目录导航!跟我一样的小白可以跟着导航一起进行学习:
kubernetes 学习导航:
【因为我是刚接触k8s,通过查阅资料、看视频等整理的,哪里有误希望大佬多多指点,感谢!】
前言:
云计算的核心是 —— 虚拟化技术,而网络虚拟化技术又是其重要的组成部分;用于在物理网络上 虚拟 多个 相互隔离 的虚拟网络:
①、实现网络资源切片;
②、提高网络资源利用率;
③、实现弹性化网络。
kubernetes 作为容器云技术栈中的容器编排组件,必然需要在多租户(NameSpace)的基础上实现弹性网络管理,这也是 “基础设施即代码” 的要求之一!
k8s 网络中的通信类型:
①、同一 Pod 内 Container 间的通信
②、各 Pod 之间的通信
③、Pod 与 Service 间的通信
④、集群外部流量 与 Service之间的通信
k8s 为 “Pod 和 Service”对象分别使用了各自的专用网络!“Pod” 的网络由 kubernetes 的网络插件配置实现。“Service” 的网络由 kubernetes集群予以肯定。
为了提供更灵活的解决方式,k8s的网络模型需要借助于外部插件实现,它要求任何实现机制都必须满足以下需求:
①、所有 Pod 间通信 可不经 NAT机制 而直接通信;
②、所有 Node 与 Container 之间的通信 可不经 NAT机制而直接通信;
③、容器自己使用的IP也是其他容器或节点直接看到的地址。【换句话说:所有Pod对象都位于同一个网络平面(同一个网段),而且可以使用 Pod自身的 IP 直接通信。】
Pod IP —— 实际存在
kubernetes 使用的网络插件必须可以为 Pod 提供满足上面那三个要求的 网络,它需要为每个Pod配置至少一个特定的“ip”,这个 IP 称之为 “Pod IP”, “Pod IP ” 地址实际上存在于某个网卡(虚拟设备)上!!!”
“Pod” 网络及其 IP 是由 kubernetes 的网络插件负责配置和管理的,具体使用的网络地址可以在管理配置网络插件的时候指定。
Cluster IP —— 虚拟 IP
Service 的地址是一个 虚拟的IP地址,没有任何的网络接口或设备配置此地址,它是由 “kube-proxy” 借助 “iptables”规则 或 “ipvs”规则 重新定向到本地端口,再将其调度至 后端“Pod对象”。
Service 的 IP地址 是集群提供服务的接口,也称之为 “Cluster IP”。 “Cluster 的网络 和 IP ” 则是由 “kubernetes”集群负责配置和管理的!
集群网络总结:
总结起来的话,kubernetes集群 至少 应该包括三个网络。
①、节点网络 —— 构建集群之前
是 各主机(Master、Node、Etcd 等)自身所属的网络。其地址配置于 “主机的网络接口”,用于各个主机之间的通信。
例如:master 与 node 之间的通信:此地址配置于 k8s 集群构建之前,它并不能由 K8s管理,管理员需要在集群创建之前手动确定其地址配置及管理方式。
②、Pod 网络 —— 构建集群时(虚拟网络)
是 K8s cluster 上专用于 “Pod资源对象” 的网络,它是一个虚拟网络,用于为 “各 Pod对象” 设定 IP地址等网络参数,其地址配置于 “Pod 中 Container 的网络接口上”。
Pod网络需要借助 —— kubenet 或 CNI 实现。该插件可独立部署于 k8s 集群之外,也可托管于 K8s 之上。他需要在 构建k8s集群时由管理员进行定义,然后在创建Pod对象的时候由其自动完成各网络参数的动态配置 (相当于DHCP,给插件一个网段,然后由插件自行按照那个网段为Pod对象分配地址)。
CNI(容器网络接口)是由 CNCF 维护的项目,由一系列用于编写配置容器网络插件的规范和库接口(libcni)组成,支持众多插件项目。
③、Service 网络 —— 集群创建时(虚拟网络)
它是专门用于 Service 资源对象的网络,它也是一个虚拟的网络,用于为 Kubernetes cluster 中的 Service 配置 IP 地址。
但是,Service 的 IP 地址,并不配置于 任何 主机 或 Container 的网络接口之上,而是 通过 Node 上的 “kube-proxy” 配置为 “iptables” 或 “ipvs” 规则,从而将发往此 “service” 的所有流量通过规则调度至其后端的各“Pod对象”之上!
Service 网络 与 Pod 网络一样,都是在创建集群的时候由管理员指定,Service IP 则在 创建 Service 的时候由 Service 网络 动态分配(类似于:dhcp)。
这个是由我自己总结的,因为我是刚接触k8s,所以哪里有不对或者给您造成困扰,还请见谅,如需改正请联系我!非常感谢!
更多推荐
所有评论(0)