天天看点

#yyds干货盘点#K8S 之网络互联通信

​Pod 本质上是共享 Network、IPC 和 UTS 名称空间以及存储资源的容器集合,我们可以把每个 Pod 对象想象成一个逻辑主机,它类似于现实世界中的物理主机或虚拟机,而运行于同一个 Pod 对象中多个进程则类似于物理机或虚拟机上独立运行的进程,不同的是,Pod 中各进程运行于彼此隔离的容器中,并于各容器间共享网络和存储两种关键资源。​

#yyds干货盘点#K8S 之网络互联通信

​Service 是由基于匹配规则在集群中挑选出的一组 Pod 对象的集合、访问这组 Pod 集合的固定 IP 地址,以及对请求进行调度的方法等功能所构成的一种 API 资源类型,是 Pod 资源的代理和负载均衡器​。Service 匹配 Pod 对象的规则可用“标签选择器”进行体现,并根据标签来过滤符合条件的资源对象。

​Kubernetes 使用定制的 DNS 服务为这类需求提供了自动的服务注册和服务发现功能​。CoreDNS 附件会为集群中的每个 Service 对象(包括 DNS 服务自身)生成唯一的 DNS 名称标识,以及相应的 DNS 资源记录,服务的 DNS 名称遵循标准的 svc.namespace.svc.cluster-domain 格式。

除非出于管理目的有意调整,​Service 资源的名称和 ClusterIP 在其整个生命周期内都不会发生变动。

​控制器​是支撑 Kubernetes 声明式 API 的关键组件,它持续监视对 API Server 上的 API 对象的添加、更新和删除等更改操作,并在发生此类事件时执行目标对象相应的业务逻辑,从而将客户端的管理指令转为对象管理所需要的真正的操作过程。简单来说,​一个具体的控制器对象是一个控制循环程序,它在单个 API 对象上创建一个控制循环以确保该对象的状态符合预期。

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

​节点网络​:各主机(Master 和 Node)自身所属的网络,相关 IP 地址配置在节点的网络接口,用于各主机之间的通信,例如 Master 与各 Node 间的通信。此地址配置在 Kubernetes 集群构建之前,它并不能由 Kubernetes 管理,需要管理员在集群构建之前就自行确定其地址配置及管理方式。

​Pod 网络​:Pod 对象所属的网络,相关地址配置在 Pod 网络接口,用于各 Pod 间的通信。Pod 网络是一种虚拟网络,需要通过传统的 kubenet 网络插件或新式的 CNI 网络插件实现,常见的实现机制有 Overlay 和 Underlay 两种。

​Service 网络​:一个虚拟网络,相关地址不会配置在任何主机或 Pod 的网络接口之上,而是通过 Node 上的 kube-proxy 配置为节点的 iptables 或 ipvs 规则,进而将发往此地址的所有流量调度至 Service 后端的各 Pod 对象之上;Service 网络在 Kubernetes 集群创建时予以指定,而各 Service 的地址则在用户创建 Service 时予以动态配置。

kubernetes 集群上的服务大致可分为两种​:API Server 和服务类应用​,它们的客户端要么来自集群内的其他 Pod,要么来自集群外部的用户或应用程序。​前一种通信通常发生在 Pod 网络和 Service 网络之上的东西向流量​;而​后一种通信,尤其是访问运行于 Pod 中的服务类应用的南北向流量​,则需要先经由集群边界进入集群内部的网络中,即由节点网络到达 Service 网络和 Pod 网络。

k8s

继续阅读