Kubernetes容器网络模型解析
2021-11-18 23:00:22云原生(Cloud Native)可以认为是一套技术体系或生态,它包含2大部分:云(Cloud)和原生(Native)。
云原生(Cloud Native)可以认为是一套技术体系或生态,它包含2大部分:云(Cloud)和原生(Native)。云(Cloud)表示应用程序位于云中,而不是传统的数据中心;原生(Native)表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳状态运行,充分利用和发挥云平台的弹性和分布式优势。
Kubernetes基于扁平地址空间,非NAT的网络结构,无需在主机和容器之间映射端口。此网络模型的主要特点是消除了在主机和容器之间映射端口的需求。我们先看下其总体架构拓扑模型:
在容器网络中主要涉及以下几个地址:
容器网络流量模型
1、POD内容器间通信
Pod中的容器可以通过“localhost”来互相通信,他们使用同一个网络命名空间,对容器自身来说,hostname就是其Pod的名称。Pod中的所有容器共享同一个IP地址和端口空间,你需要为每个需要接收连接的容器分配不同的端口。也就是说,Pod中的应用需要自己协调端口的使用。
内部实现机制:同Pod内的容器实际共享同一个Namespace,因此使用相同的Ip和Port空间,该Namespace 是由一个叫Pause的小容器来实现,每当一个Pod被创建,那么首先创建一个pause容器,之后这个Pod里面的其他容器通过共享这个pause容器的网络栈,实现外部Pod进行通信,因此对于同Pod里面的所有容器来说,他们看到的网络视图是一样的,我们在容器中看的地址,也就是Pod地址实际是Pause容器的IP地址。总体模型如下:
2、同主机POD间通信
每个节点上的每个Pod都有自己的Namespace,同主机上的Pod之间怎么通信呢?我们可以在两个Pod之间建立Vet Pair进行通信,但如果有多个容器,两两建立Veth 就会非常麻烦,假如有N 个Pod ,那么我们需要创建n(n-1)/2个Veth Pair,扩展性非常差,如果我们可以将这些Veth Pair 连接到一个集中的转发点,由它来统一转发就就会非常便捷,这个集中转发点就是我们常说的Bridge,如下所示
3、跨主机POD间通信
对于网络上两个端点之间的互通目前主要有两种方案:一种是基于Underlay 直接互通,此模式需要双方有彼此的路由信息并且该路由信息在underlay的路径上存在。一种是基于Overlay 方案,通过隧道实现互通。Underlay 层面保证主机可达即可,代表网络方案有 Calico(Direct模式)和Macvlan,后者有Overlay,OVS,Flannel和Weave。本篇仅针对Flannel 和Calico 插件进行简要介绍。
Flannel插件

Flannel是由CoreOS开发的项目,是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。
与其他方案相比,Flannel相对容易安装和配置。它被打包为单个二进制文件Flanneld,许多常见的Kubernetes集群部署工具和许多Kubernetes发行版都可以默认安装Flannel。Flannel可以使用Kubernetes集群的现有Etcd集群来使用API存储其状态信息,因此不需要专用的数据存储。其工作流程图如下:
基本流程为:
1、地址分配
Flanneld 第一次启动时,从 etcd 获取配置的 Pod 网段信息,为本节点分配一个未使用的地址段,然后创建 flannedl.1 网络接口(也可能是其它名称,如 flannel1 等),flannel 将分配给自己的 Pod 网段信息写入 /run/flannel/docker 文件(不同k8s版本文件名存在差异),docker 后续使用这个文件中的环境变量设置 docker0 网桥,从而使这个地址段为本节点的所有。
2、路由下发
每台主机上,Flannel 运行一个Daemon 进程叫flanneld,它可以在内核中创建路由表。
3、数据面封装
Flannel 知道外层封装地址后,对报文进行封装,源采用自己的物理Ip 地址,目的采用对端的,Vxlan 外层的Udp Port 8472(如果是UDP封装使用8285作为默认目的端口,下文会提到),对端只需监控Port 即可,当改端口收到报文后将报文送到Flannedld 进程,进程将报文送到Flanned 接口接封装,然后查询本地路由表获取目的地址。
Flannel功能内部支持三种不同后端实现,分别是:
Calico插件
Calico支持3种路由模式:
本文主要介绍Direct模式,采用软路由建立BGP 宣告容器网段,使得全网所有的Node和网络设备都有到彼此的路由的信息,然后直接通过underlay 转发。Calico实现的总体结构如下:
数据通信的流程为:数据包先从veth设备对另一口发出,到达宿主机上的Cali开头的虚拟网卡上,到达这一头也就到达了宿主机上的网络协议栈,然后查询路由表转发;因为本机通过Bird 和RR 建立Bgp 邻居关系,会将本地的容器地址发送到RR 从而反射到网络其它节点,同样,其它节点的网络地址也会传送到本地,然后由Felix 进程进行管理并下发到路由表中,报文匹配路由规则后正常进行转发即可。至于更为复杂的Iptables规则,因篇幅有限,本次暂不做解析。
4、集群内Service Cluster IP和外部访问
Serice 和外部通信场景实现涉及较多iptables 转发原理,简单介绍如下:
Pod与service通信:Pod间可以直接通过IP地址通信,前提是Pod知道对方的IP。在 Kubernetes集群中,Pod可能会频繁地销毁和创建,也就是说Pod的IP 不是固定的。为了解决这个问题,Service提供了访问Pod的抽象层。无论后端的Pod如何变化,Service都作为稳定的前端对外提供服务。同时,Service还提供了高可用和负载均衡功能,Service负责将请求转 给正确的Pod。
外部通信:无论是Pod的IP还是Service的Cluster IP,它们只能在Kubernetes集群中可见,对集群之外的世界,这些IP都是私有的Kubernetes提供了两种方式让外界能够与Pod通信:
NodePort:Service通过Cluster节点的静态端口对外提供服务,外部可以通过:访问Service。
LoadBalancer:Service利用Cloud Provider提供的Load Balancer对外提供服务,Cloud Provider负责将Load Balancer 的流量导向Service。
果冻是什么做的
果冻的生产原料主要是白糖、卡拉胶、甘露胶、钙、钠、钾盐等。 按白糖添加量15%计算,每—个15克重的果冻在体内产生的热能为8.93千卡,而普通成年人每日热能供给量约为2500千卡,因此果冻在体内产生热能所占比例极低。 果冻的胶体是由卡拉胶、甘露胶混糖煮沸后冷却凝结而成,这两种物质在果冻中的添加量为0.8%~1%。 卡拉胶是海藻类植物,甘露胶是从天南星科植物中抽提出的葡甘聚糖,都是天然植物多糖,安全无害。 这两种胶属水溶性膳食纤维,膳食纤维是一种非常重要并为国际一致公认的功能性食品基料,据调查显示.我国不少城市居民饮食中肉类、蛋白质和脂肪摄入量远超过全国平均水平,接近发达国家水平,这种“高蛋白、高脂肪”饮食结构易引致心脑血管病、肠胃不适症、肥胖症等,而果冻中丰富的膳食纤维对预防以上“现代文明病”有积极意义。 果冻在制造过程中需要添加钙、钾、钠等矿物质,这些矿物质也是人体所需元素。 如人体的骨骼需要大量的钙质,细胞液、组织液中含有—定比例的钠、钾离子,这些离子对维持细胞的渗透压、机体酸碱平衡、神经信息的传导起重要作用。 不同花色品种的果冻还有其独特的营养,如高钙果冻富含钙,高纤椰果果冰富含水不溶性膳食纤维,AD钙果冻即强化维生素A、D和钙质,有些品种的果冻添加胡萝卜素或螺旋藻等。 这些不同营养素对人体健康各有其特殊的生理作用。
简单甜点的制作方法
焦糖布丁材料准备。 百牛奶一杯【常见的杯子,喜欢奶味可多备点】3个鸡蛋的鸡蛋清【不要蛋黄,不然会有鸡蛋的味道】砂糖半杯和三分之一杯【和牛奶一样的杯子】做法。 1。 把砂糖半杯倒入一杯半水里煮至金黄色浆液【时间越长,颜色越深,味道越苦】2。 把鸡蛋清和牛奶搅拌并加入砂糖三分之一杯【用力不能大,不然有气泡】3。 把煮好的糖浆度倒入模具底部【用可入微波炉回的有形状的任何东西都可以】4。 把蛋奶液倒入模具上方【等到浆液凝固后】后备。 微波炉上的小托盘加点70-80℃的水,将模具放上,温度高180℃需10-15分钟,温度低就要20分钟左右。 之后放到冰箱冷着,2-4小时左右就可以答吃了PS、做出来有洞孔的话,口感会不好。 所以千万搅拌不要用力哦我还有些介绍的小甜点、铜锣烧、曲奇、千层饼、泡芙都可以试着做!很多东西都可以替换或者网上购买。 烤箱有时候可以换成微波炉,我就是又是这样做哦!
果冻用什么做的
香香的牛奶冻材料准备: 1、牛奶 2、一包棉花糖 (袋装,各大超市均有销售) 3、水果 (种类不限,看个人喜爱)制作方法:1、将牛奶倒入锅内加热2、再将棉花糖倒入锅内搅拌融化3、待棉花糖完全融化后关火倒入容器中备用4、将水果切成丁状后,适量加入盛有牛奶棉花糖的容器中,再放入冰箱内冷冻3个小时(最好放在冷藏室内冷冻而不要放在冷冻室内冷冻) 5、3个小时后,从冰箱取出后冰淇淋奶酪就做好啦!这道冰淇淋奶酪的特点是: 1、制作方法简单2、制作好的冰淇淋奶酪象果冻一样,晶莹剔透,吃到嘴里的感觉也很象果冻, 略微带点甜味,滑溜溜的,非常可口。 也可以在牛奶中加入巧克力,做成巧克力幕斯哦!啤酒果冻的做法原料:鱼胶粉(农贸市场就能买到),苹果。 作法:将鱼胶粉加入苹果汁中搅拌,鱼胶粉与苹果汁的比例为1:5,搅拌均匀后,将混有鱼胶粉的果汁放入微波炉加热30秒。 30秒过后,将果汁取出,然后将其放在冷水中冷却至常温,再放入冰箱冷冻一小时取出即可。 好吃又好看的啤酒果冻,您要是感兴趣的话,就不妨试试吧。 凤梨(菠萝)柠檬果冻材料: 凤梨 100公克 柠檬 1/2个 果冻粉 10公克 细砂糖 10公克 水 20cc作法:1. 凤梨切丁,放入果汁机中打成汁后过滤备用(留3~5小块不打碎备用)。 2. 果冻粉与细砂糖拌匀备用。 3. 柠檬挤汁与水20cc和匀,倒入作法1中,再以小火煮至沸腾,将作法2的材料慢慢倒入并搅拌均匀,加入凤梨丁后,倒入模型中待凉,放入冰箱冷藏凝固即可。 草莓果冻做法:可以买好现成的果冻,把果冻放在玻璃杯中,然后把奶油或是冰淇淋浇在果冻上,最后把草莓洗净、切片整齐码在最上面即可。 草莓羹做法:草莓去蒂洗净,然后放在榨汁机里搅碎,再往草莓汁里加入少许草莓酱、炼乳、蜂蜜、少许橙汁,最后在上面放上碎冰即可。 草莓蛋糕做法:1.将烤盘纸铺在烤盘上,然后放入烤箱内预先加温至18℃。 2.将鸡蛋、白糖、香草精、鲜奶搅拌均匀放置一旁待用。 3.将鲜乳酪去除水分至180克左右。 4.将蛋黄、砂糖倒入干净的钢盆,以隔热水加热的方式充分打发至稠状。 5.加入鲜奶以及步骤2处理过的材料,充分搅拌均匀再倒入烤盘,以180℃的温℃烤12分钟。 6.蛋糕待凉后从烤盘里取出。 7.将鲜奶油以隔冰水降温的方式打发至发泡。 之后将砂糖分成8~9等份,慢慢加入打发均匀,最后加入香草精搅拌均匀。 8.把洗净的草莓去蒂,只留下2~3颗作装饰。 9.步骤7处理过的鲜奶油均匀的抹在蛋糕上,并铺上去蒂的草莓。 10.放置冰箱里20~30分钟后,用剩下的鲜奶油装饰蛋糕表面。 铺上草莓和薄荷叶之后再送进冰箱20~30分钟,即可完成。 杏仁苹果冻做法:5克果冻粉用冷水化开,加苹果汁250毫升搅拌均匀,加热至沸腾离火,倒入果冻模中。 杏脯切碎加入模中。 等凝住后扣出,放容器中入冰箱冷藏。 红豆牛奶布丁做法:5克果冻粉用冷水化开,加入适量糖和250毫升牛奶搅拌均匀加热,沸腾后离火。 果冻模中放入蜜豆,然后倒入热好的奶液。 凝住后扣出。 蜜豆的甜和牛奶的香完美的结合。 水晶火龙果冻做法: 5克果冻粉用冷水化开,根据个人口味加适量糖和适量柠檬汁,与250毫升水混合搅拌均匀,加热至沸腾离火,倒入果冻模中。 火龙果取出果肉切成小丁加入模中。 凝住后扣出。 冷藏后食用,酸甜适口甜橙果冻原 料: 吉利丁片15片、柳橙汁600克、细砂糖30克、植物性鲜奶油100克、香橙酒30克、水果蜜饯30克、塔皮模型制法: (1)吉利丁片先泡冰水软化备用。 (2)柳橙汁加细砂糖,煮至80度,待细砂糖完全溶解即可熄火。 (3)加入做法(1)泡软沥干的吉利丁片拌匀,趁热倒入模型中,待冷却后即移入冰箱冷藏定型。 (4)鲜奶油打发,再加入香橙酒轻轻拌匀后备用。 (5)将做法(3)的甜橙果冻从冰箱取出,在上面挤上少许做法(4)的鲜奶油,再放些水果蜜饯点缀,即成为秀色可餐的甜品了。 冰凉薏米冻材料: 蒟蒻粉10克 幼糖200克 薏米水1000毫升做法:薏米水做法: 把100克薏米仁及少许香兰叶,放进1200毫升清水中煮熟,滤出1000毫升的薏米水待用。 果冻做法:①将>蒟蒻粉及幼糖拌匀; ②将薏米水加热煮至90摄氏度;③将薏米水倒进拌匀了的蒟蒻粉中混合,调低火候搅拌5分钟,熄火即成薏米果冻液;④将少许煮熟了的薏米仁放进个别的果冻模型中,再将薏米果冻液填满每个模型,待凉后,放进冰箱冷冻,完全凝固后便可食用。
发表评论