K8S网络基础
@
1. CNM模型
DOCKER公司提出,主要通过如下三个组件实现:
1.1 Network Sandbox
- 作用: 容器内部网络栈,包括网络接口、路由表、DNS等配置的管理。
- 实现:可用 linux网络命名空间、FreeBSD Jail等机制实现
- 说明:一个Sandbox可以包含多个Endpoint。
1.2 Endpoint
- 作用:用于将容器内部Sandbox与外部网络相连的网络接口。
- 实现:可用veth对、Open vSwitch内部port等技术实现。
- 说明:一个Endpoint仅可加入一个Network
1.3 Network
- 作用:可以直接相互连接的Endpoint的集合。
- 实现:可用linux网桥、VLAN等技术实现。
- 说明:一个Network包含多个Endpoint
2. CNI模型
由CoreOS公司提出的一种容器网络规范。被kubernetes等项目采纳。
其对容器网络的设置和操作都通过插件完成,有如下两种类型:
2.1 CNI Plugin
作用:负责为容器配置网络资源。
包括如下3个基本接口的定义:
- ADD:将容器添加到某个网络
- DELETE:容器销毁时将容器从某个网络中删除
- CHECK:检查容器网络是否正确
- VERSION:查询网络插件支持的CNI规范版本号
2.2 IPAM Plugin
作用:负责对容器的IP地址进行分配和管理。如:为容器分配IP、网关、路由、DNS。
下边介绍集中常用的网络组件
3. Flannel
3.1 实现原理
1) 协助kubernetes,给每个node上的容器分配互不冲突的IP地址
2)建立一个覆盖网络(Overlay Network),通过该网络将数据原封不动的传给目标容器。
3.2 网络架构
-
flannel0的网桥一端谅解docker0,一端连接flanneld 服务进程
-
flanneld进程连接etcd
利用etcd管理可分配的IP地址网段资源
监控etcd中每个Pod的实际地址,并在内存中建立一个Pod节点的路由表 -
flanneld进程下连docker0和物理网络
使用内存中的Pod路由表,将docker0发来的数据包包装起来,利用物理网络投递到目标flanneld上。
目标flanneld解包,发送给docker0(因此daocker0得到的是原始数据)
4. calico-BGP模式
4.1 实现原理
一个基于BGP的纯三层网络方案
在每个计算节点上由一个vRouter 来负责转发,每个vRouter通过BGP1协议把本节点上运行的容器路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则
4.2网络架构
4.3 calico 组件
-
Felix:
是一个Calico Agent,运行在每个node上,负责为容器设置网络资源(如IP地址、路由规则、iptables规则等),保证跨主机容器网络互通 -
etcd:后端存储
-
BGP Client
负责把Felix在各Node上设置的路由信息通过BGP协议广播到Calico网络 -
Route Reflector:
通过一个或多个BGP Reflector 来完成大规模集群的分级路由分发 -
CalicoCtl
Calico的命令行管理工具。
4.4 IP Pool 的两种模式
- IPIP模式
将各Node的路由之间做一个tunnel,再把两个网络连接起来。如图所示:
-
BGP模式
直接使用物理机作为虚拟路由器(vRouter),不再创建额外的tunnel -
设置方法
calico-node的容器中变量设置为:
ipip模式:CALICO_IPV4POOL_IPIP="always"
BGP模式:CALICO_IPV4POOL_IPIP="off"
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~