Kubernetes 网络模型概述

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

为了提供更灵活的
解决方式, Kubernetes 的网络模型需要借助于外部插件实现,它要求任何实现机制都必须满
足以下需求。
口所有Pod 间均可不经NAT 机制而直接通信。
仅供|七商业用途式交流学习攸用
14 •!• Kubernetes i韭阶实战
口所有节点均可不经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 时予以动态配置。

 

 

本章介绍了Kubernetes 的历史、功用、特性及其相关的核心概述和术语, 并简单描述
了其架构及其各关键组件,以及集群网络中的常见通信方式, 具体如下。
口Kubernetes 集群主要由Master 和Node 两类节点组成。
口Master 主要包含API Server 、controller-manager 、Scheduler 和etcd 几个组件,其中
API Server 是整个集群的网关。
DNode 主要由kubelet 、kube-proxy 和容器引擎等组件构成, kubelet 是Kubernetes 集
群的工作于节点之上的代理组件。
口完整的Kubemetes 集群还需要部署有CoreDNS (或KubeDNS )、Prometheus (或HeapSter )、
Dashboard 和Ingress Controller 几个附加组件。
口Kubernetes 的网络中主要存在四种类型的通信:同- Pod 内的容器间通信、各Pod
间的通信、Pod 与Service 间的通信, 以及集群外部的流量同Service 之间的通信。

 

完整参考: k8s进价实战

posted @ 2021-03-26 10:37  进击的pythoner  阅读(107)  评论(0编辑  收藏  举报