云计算的核心是虚拟化技术,而网络虚拟化技术是其最重要的组成部分。用于虚拟化物理
网络上多个相互隔离的虚拟网络,实现网络资源切片,提高网络资源利用率,实现灵活的
网络Kubernetes作为容器云技术战争中的容器编排组件,必须实现基于多租户(命名空间)
的灵活网络管理,这也是“基础设施即代码”的要求之一
网络模型概述在
Kubernetes网络中有四种类型的通信:同一个pod中的容器之间的通信、Pod之间的通信、Pod和服务之间的通信以及集群外的流量和服务之间的通信
Kub ernetes分别为Pod和服务资源对象使用自己的专用网络。Pod网络由Kubernetes的网络插件配置,而服务网络由Kubernetes集群指定为了提供更灵活的解决方案,Kubernetes的网络模型需要通过外部插件来实现,这要求任何实现机制都必须满足以下要求
所有Pod都可以在没有NAT机制的情况下直接通信
所有节点都可以直接与所有容器进行通信,无需网络地址转换机制
容器本身使用的IP也是其他容器或节点直接看到的地址换句话说,所有Pod对象都位于同一平面网络中,并且可以使用Pod自己的地址直接通信。
kubemeters使用的网络插件必须能够为Pod提供满足上述要求的网络。它需要为每个Pod
配置至少一个特定地址,即Pod IPPod IP地址实际上存在于网卡(可以是虚拟设备)
上,而服务的地址是虚拟IP地址。没有网络接口配置此地址。kubeproxy
通过iptables规则或ipvs规则将其重定向到本地端口,然后分派给后端Pod对象。
服务的IP地址是群集提供服务的接口,也称为群集IP
Pod网络及其IP由Kubernetes的网络插件配置和管理。当
管理和配置网络插件(如10.244.0.0/16网络)时,可以指定特定的网络地址群集网络和IP由Kubernetes
群集(如10.96.0.0112网络)配置和管理。
总结起来,Kubernetes集群应该包含至少三个网络,如图1-13中的网络环境所示。
是每个主机(主镇、节点等)都连接到的网络。)属于。其地址在主机的网络接口上配置,用于
主机之间的通信,例如,主机和每个节点之间的通信。在库本内特斯集群结构
建立之前,库本内特斯没有管理此地址配置。在构建集群结构之前,管理员需要确定他们的地址配置和管理方法
。第二个是Kubernetes集群上专用于Pod资源对象的网络,这是一个
的虚拟网络,用于设置网络参数,如每个Pod对象的IP地址,其地址是在Pod中容器的网络接口上配置的。Pod网络
需要通过kubenet插件或CNI插件来实现。该插件可以独立部署在库伯内特集群之外,也可以托管在库伯内特上。它需要由管理员在构建Kubernetes集群时定义,然后在创建Pod
对象时自动完成每个网络参数的动态配置。第三种是专用于服务资源对象的网络。
也是一个虚拟网络,用于配置Kubernetes集群中服务的IP地址。但是,该地址不适合将
放在任何主机或容器的网络接口上。相反,它通过节点上的kube“代理”被配置为iptables或
ipvs规则,从而将去往该地址的所有流量分派到其后端的Pod对象。服务网络是在创建
Kubernetes集群时指定的,每个服务的地址是在用户创建服务时动态配置的。