云计算:Kubernetes网络模型

云计算的核心是虚拟化技术,网络虚拟化技术又是其最重要的组成部分,用于在物理

网络上虚拟多个相互隔离的虚拟网络,实现网络资源切片,提高网络资源利用率,实现弹性

化网络。Kubernetes 作为容器云技术战中的容器编排组件,必然需要在多租户(名称空间)

的基础上实现弹性网络管理,这也是“基础设施即代码”的要求之一。

云计算:Kubernetes网络模型

网络模型概述

Kubernetes 的网络中主要存在四种类型的通信: 同- Pod 内的容器间通信、各Pod彼此之间的通信、Pod 与Service 间的通信以及集群外部的流量同Service 之间的通信。

Kub ernetes 为Pod 和Service 资源对象分别使用了各自的专用网络, Pod 网络由Kubernetes的网络插件配置实现,而Service 的网络则由Kubernetes 集群予以指定。为了提供更灵活的解决方式, Kubernetes 的网络模型需要借助于外部插件实现,它要求任何实现机制都必须满足以下需求。

  • 所有Pod 间均可不经NAT 机制而直接通信。
  • 所有节点均可不经NAT 机制而直接与所有容器通信。
  • 容器自己使用的IP 也是其他容器或节点直接看到的地址。换句话讲,所有Pod 对象都位于同一平面网络中,而且可以使用Pod 自身的地址直接通信。

Kubemetes 使用的网络插件必须能为Pod 提供满足以上要求的网络,它需要为每个Pod

配置至少一个特定的地址,即Pod IP 。Pod IP 地址实际存在于某个网卡(可以是虚拟设备)

上,而Service 的地址却是一个虚拟IP 地址,没有任何网络接口配置此地址,它由kubeproxy

借助iptables 规则或ipvs 规则重新定向到本地端口,再将其调度至后端Pod 对象。

Service 的IP 地址是集群提供服务的接口,也称为Cluster IP 。

Pod 网络及其IP 由Kubernetes 的网络插件负责配置和管理,具体使用的网络地址可在

管理配置网络插件时指定,如10.244.0.0/16 网络。而Cluster 网络和IP 则是由Kubernetes

集群负责配置和管理,如10.96.0.0112 网络。

总结起来, Kubernetes 集群至少应该包含三个网络,如图1 - 13 中的网络环境所示。一个

是各主机( Mast町、Node 和etcd 等)自身所属的网络,其地址配置于主机的网络接口,用于

各主机之间的通信,例如, Master 与各Node 之间的通信。此地址配置于Kubernetes 集群构

建之前,它并不能由Kubernetes 管理,管理员需要于集群构建之前自行确定其地址配置及管

理方式。第二个是Kubernetes 集群上专用于Pod 资源对象的网络,它是一个虚拟网络,用于

为各Pod 对象设定IP 地址等网络参数,其地址配置于Pod 中容器的网络接口之上。Pod 网络

需要借助kubenet 插件或CNI 插件实现,该插件可独立部署于Kubernetes 集群之外,亦可托管于Kubernetes 之上,它需要在构建Kubernetes 集群时由管理员进行定义,而后在创建Pod

对象时由其自动完成各网络参数的动态配置。第三个是专用于Service 资源对象的网络,它

也是一个虚拟网络,用于为Kubernetes 集群之中的S巳rvice 配置IP 地址,但此地址并不配

置于任何主机或容器的网络接口之上,而是通过Node 之上的kube”proxy 配置为iptables 或

ipvs 规则,从而将发往此地址的所有流量调度至其后端的各Pod 对象之上。Service 网络在

Kubernetes 集群创建时予以指定,而各Service 的地址则在用户创建Service 时予以动态配置。


分享到:


相關文章: