k8s的网络类型

一、 k8s的通信模式

1、 pod内部的容器与容器之间的通信

在同一个pod中的容器共享网络、共享网络,使用同一个网络命名空间,可以直接通信(像本地通信一样)

2、同一个node节点内不同pod之间的通信

每一个pod都有一个全局的真实的IP地址,同一个node节点中的不同pod之间,可以直接使用对方pod的IP地址进行通信,pod之间是通过docker0的网桥进行通信的

3、 不同node节点上的pod的通信 【核心】

二、cni插件

1、定义

cni插件是一个标准接口,用于容器运行时调用网络插件,配置容器网络,负责设置容器的网络命名空间和IP地址以及路由等一系列参数

2、网络插件(组件)

(1)flannel插件

1)作用

让集群中不同节点的docker容器具有整个集群唯一的虚拟IP地址

overlay网络:在底层物理网络的基础上创建一个逻辑的网络层(二层+三层的集合,二层是物理网络,三层是逻辑上的网络层)。overlay网络也是一种网络虚拟化的技术

2)模式

UDP模式: 默认模式,基于应用层用户态转发,配置简单,但性能最差(一般不用)

工作原理

(flannel提供路由表,封装以及解封装数据包,经过多次转发,所以性能较差)

基于应用转发,flannel提供路由表,flannel封装数据包以及解封装,每个node节点都有一个flannel虚拟网卡(flnanel.0),负责封装和解封装

数据流向

vxlan模式: 基于内核转发,适用于小集群(最常用)【面试题】

使用的是overlay的虚拟隧道通信技术,二层+三层的模式

工作原理

(根据VNI+IP地址找到目标节点的通信地址)

flannel提供路由表,内核封装以及解封装,每个node节点都有一个flannel虚拟网卡(flnanel.1)

数据流向

VTEP:识别对应的VNI的IP地址

host-gw模式: 配置麻烦,性能最好(很少用)

总结:flannel每个发向容器的数据包进行封装,vxlan通过vtep打包数据,由内核封装数据包再转发到目标的node节点,到目标Node节点后,由内核解封装再发送到目标pod,对性能有一定影响

(2) Calico插件

1)定义

采用直接路由(BGP动态路由)的方式,不需要修改报文,统一直接通过路由表转发,路由表会很复杂,对运行维护的要求较高

2)BGP模式的特点

交换路由信息的外部网关协议,可以连接不同的node节点,node节点可能不是同一个网段,BGP实现可靠的、最佳的、动态的路由选择,配置完成后会自动识别相邻的路由设备

注:Calico不适用overlay,也不需要交换,直接通过虚拟路由实现,每一台虚拟路由都通过BGP转发

3) 核心组件

****①felix:****运行在主机上的一个个pod(进程),用k8s daemonset(后台部署)的方式部署pod,负责在宿主机上插入路由规则,维护Calico所需的网络设备,比如网络接口的管理、监听、转发路由等

daemonset:在每一个节点部署相同的pod,并且后台运行

****②BGP Client(bird):****BGP的客户端,专门负责在集群中分发路由规则的信息,每一个节点都会有一个bird。通过BGP协议以广播的方式通知其他节点,分发路由的规则,实现网络互通

ETCD在这里的作用:

保存路由信息

负责网络元数据的一致性,保证整个网络状态的一致和准确

4) 工作原理

通过路由表进行不同节点的pod之间的通信

一旦创建好pod后,veth pair路由设备会添加一个网卡设备cali

虚拟网卡:veth pair设备是一对设备,虚拟的以太网设备,一头连接容器的网络命名空间eth0,另一头连接宿主机的网络命名空间cali

依靠veth pair设备进行IP地址分配,veth pair连接容器的部分给容器分配一个IP地址,这个IP地址是唯一标识,宿主机也会被veth pair分配一个Calico网络的内部IP地址,这个IP地址和其他节点上的容器进行通信

数据流向

有veth pair设备后,容器发出的IP地址通过veth pair设备到宿主机,宿主机根据路由规则的下一跳地址发送到网关(目标节点),数据包到达目标宿主机后,通过veth pair设备,目标宿主机根据路由规则的下一跳地址转发到目标容器

在ipip模式中,会生成一个tunnel隧道,所有的数据包封装都在tunnel中完成,封装的信息有:宿主机的IP地址,容器内部的IP地址

总结【背】

常用的网络插件有两个flannel和calico

flannel配置简单,功能简单,基于overlay叠加网络实现,在物理层的网络再封装一个虚拟网络

vxlan是虚拟三层网络,最常用,基于vni+ip进行转发,flannel提供路由表,内核封装和解封装,但封装和解封装对数据传输的性能会有影响,同时不具备网络策略配置的能力,这个能力基于UDP协议,默认网段是10.244.0.0/16

udp是默认模式,一般在测试环境中用

host-gw不用

calico功能强大,基于路由表进行转发,没有封装和解封装的过程,对性能影响较小,具备网络策略配置的能力,但是每生成一个pod就会生成一个路由表,维护起来比较复杂,降低转发效率

模式:ipip模式、BGP模式

BGP模式是通过维护IP路由表的前缀来实现目标主机的可达性

对比IPIP模式,BGP模式没有隧道,BGP模式下,pod的数据包直接通过网卡发送到目标主机

ipip模式有隧道,在隧道中进行数据包的封装 ipv4 in ipv4

简单的小集群,使用flannel,考虑到以后扩容以及配置网络策略,可以使用calico

三、coredns

****定义:****可以为集群中的service资源创建一个域名和IP地址进行对应解析的关系

service是对外提供访问的地址,加入DNS机制后可以直接访问服务名

相关推荐
运维开发故事2 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生4 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭4 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美5 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵6 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
武子康9 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
网络研究院12 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智12 天前
ARP代理--工作原理
运维·网络·arp·arp代理