前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s三层网络通讯方式

k8s三层网络通讯方式

作者头像
灰子学技术
发布2022-03-29 15:53:19
5510
发布2022-03-29 15:53:19
举报
文章被收录于专栏:灰子学技术灰子学技术

本篇文章来介绍,K8S纯三层网络的实现原理,主要以Flannel 的 host-gw 模式和 Calico为例来介绍,是本人对K8S网络学习整理的第三篇学习笔记。

一、Flannel 的 host-gw 模式:

host-gw 模式的工作原理,其实就是将每个 Flannel 子网(Flannel Subnet,比如:10.144.1.0/24)的“下一跳”,设置成了该子网对应的宿主机的 IP 地址,在这里主机”(Host)会充当这条容器通信路径里的“网关”(Gateway)。

备注:前置条件,Flannel host-gw 模式必须要求集群宿主机之间是二层连通的。

container1访问container2的详细过程: 1. 在Node1启动的过程之后,会通过flannel去watch获取Node上面容器的子网和宿主机之间的映射关系,并将它设置到Node1上面的route记录中。Node2也会做这样一件类似的事情。

2.container1发出消息的目的地址是:10.244.1.3归属10.244.1.0/24这个网段的IP包,通过查询Node1上面的路由信息发现它的下一跳是10.168.0.3,并通过Node1的eth0设备发出去。

备注:10.168.0.3对应的就是Node2上面eth0的IP地址。

3.消息到达了Node1的eth0上面之后,通过10.168.0.3查询到Node2的MAC地址,于是把目的MAC地址设置成Node2的MAC地址,然后通过二层数据帧发送到Node2。

4.Node2收到这个消息之后,解析二层数据帧拿到IP包,发现目的地址的IP是10.244.1.3,也就是container2。

5.通过Node2上面的路由表查询到该目的地址对应的下一跳是Node2上面的cni0网桥,于是将消息发送给container2。

特别说明:

这种模式下,容器通信的过程就免除了额外的封包和解包带来的性能损耗。根据实际的测试,host-gw 的性能损失大约在 10% 左右,而其他所有基于 VXLAN“隧道”机制的网络方案,性能损失都在 20%~30% 左右。

二、Calico:

不同于 Flannel 通过 Etcd 和宿主机上的 flanneld 来维护路由信息的做法,Calico 项目使用了BGP(Border Gateway Protocol:边界网关协议)来自动地在整个集群中分发路由信息。

除此之外Calico也不会在Node节点上面创建cni0这种网桥。

过程介绍如下: 1. Calico通过CNI插件建立与K8S的对接。通过BGP的客户端同步集群内部的路由规则信息,并通过Felix将这些路由规则信息写入到宿主机的路由中。

2. 每一个容器都会通过veth pair设备在宿主机设置一个cali前缀开头的veth。

3.Calico的网络插件在宿主机上面为每个容器的Veth pair设备设置一条路由规则,用于接收传入进来的IP包。

例如:Node2上面:10.233.2.3 dev cali5863f3 scope link// 表示的是发往10.233.2.3的IP包,应该进入cali5863f3设备。

4.容器1发出去的IP包,会通过Node1上面的Veth Pair将数据转发到eth0,eth0会将Node2的MAC地址作为目的MAC地址放到数据帧里面,发送给Node2。

5.Node2收到之后解析出来IP包发现是10.233.2.3,通过查询路由规则直接发送给容器4。

参考文档:

K8S权威指南第5版

https://time.geekbang.org/column/article/67775

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档