前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes(k8s)-网络插件(Calico)

Kubernetes(k8s)-网络插件(Calico)

作者头像
运维小路
发布2025-03-11 21:10:17
发布2025-03-11 21:10:17
28100
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们上一小节介绍的Flannel插件是最简单的,也是最广泛的插件,和Flaanel插件使用同样的广泛的插件还有一个叫Calico,今天我们就来介绍Calico插件。

Calico 是一个广泛用于容器网络接口(CNI)的开源项目,它为 Kubernetes 等容器编排系统提供网络和网络安全策略管理功能。Calico 插件通常指的是其作为 CNI 插件的角色,通过该插件,用户可以在 Kubernetes 集群中实现高效的网络连接和细粒度的安全策略控制。

主要特性

高性能网络:Calico 使用标准的 Linux 网络技术,如 BGP(边界网关协议),来提供高性能的网络连接,支持大规模集群环境。

灵活的安全策略:允许定义基于 IP 和端口的网络策略,以及更高级的基于命名空间或标签的安全规则,从而实现对服务访问的精确控制。

跨平台支持:除了 Kubernetes,Calico 也支持其他容器编排工具,比如 OpenShift、Docker Swarm 等,并且能够在多种云环境中运行,包括 AWS、GCP、Azure 等。

易用性与集成:Calico 可以轻松地与现有的 Kubernetes 集群集成,并提供了丰富的文档和社区支持。

可扩展性:无论是小型开发环境还是大型生产环境,Calico 都能够提供相应的解决方案,并能随着需求的增长而扩展。

Calico 支持几种不同的模式来适应各种网络需求和环境。以下是 Calico 主要的几种工作模式:

工作模式

1. IPIP (IP in IP) 模式

描述: 在这种模式下,Calico 使用 IP-in-IP 封装技术来通过底层网络传输数据包。这对于跨越多个子网或在不支持路由的网络环境中特别有用。

适用场景: 当你的 Kubernetes 集群跨多个子网,或者底层网络不支持 BGP 路由时,使用 IPIP 模式可以确保 Pod 之间的通信顺畅。

2. BGP (Border Gateway Protocol) 直连模式

描述: 这是 Calico 默认的工作模式之一,它利用 BGP 协议直接在主机之间交换路由信息,从而实现 Pod 网络间的互通。这种方式避免了额外的封装开销,提供了较高的性能。

适用场景: 如果你在一个支持 BGP 的网络中运行 Kubernetes,且希望获得最佳性能,那么直连模式是一个很好的选择。

3. Cross-Subnet IPIP 模式

描述: 这是一种变体模式,其中 IPIP 封装仅用于跨子网的流量,而同一子网内的流量则直接路由而不进行封装。这结合了 IPIP 和 BGP 模式的优点,在保持性能的同时解决了跨子网的问题。

适用场景: 对于那些需要处理跨子网通信但又希望减少封装开销的场景来说,这种模式非常合适。

4. VXLAN 模式

描述: VXLAN(Virtual Extensible LAN)是一种网络虚拟化技术,允许创建覆盖网络。与 IPIP 类似,它也涉及对数据包的封装,但采用的是不同的协议栈,旨在提供更大的扩展性和灵活性。类似Flannel的VXLAN。

适用场景: 当你需要构建一个覆盖网络以隔离不同租户或应用程序的网络流量时,VXLAN 提供了一种有效的解决方案。

部署

代码语言:javascript
代码运行次数:0
运行
复制
#这里改成 Cross-Subnet IPIP 模式
wget  https://docs.projectcalico.org/manifests/calico.yaml
sed -i s/Always/CrossSubnet/g calico.yaml
kubectl  apply -f calico.yaml

相比Flannel它这里增加了很多资源(CRD,后期我们会进行讲解),当然我们这里只是为了并不会讲解它(哪些高级的功能我也不会用,主要没用过)。

代码语言:javascript
代码运行次数:0
运行
复制
4: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 10.244.241.64/32 scope global tunl0
       valid_lft forever preferred_lft forever
5: calib1c0164870f@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group default 
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 0

这里的2个虚拟网卡,其中tunl0虚拟网卡和前面的Flannel里面的flannel.1类似,都是为了对包进行封装的,当然这个是跨网络二层才会用到。另外一个网卡则是普通容器的网卡。

代码语言:javascript
代码运行次数:0
运行
复制
[root@master01 ~]# ip r
default via 192.168.31.1 dev eth0 proto static metric 100 
10.244.196.128/26 via 192.168.31.212 dev eth0 proto bird 

从路由来看,到另外一个节点的直接走路由,和我以前写的Docker跨主机通信

原理是一样的。下图也是在网上找的,这个图时间比较久远(2018年左右),那个时候还没有Cross-Subnet IPIP 模式,都是直接路由的。

这2个小节内容比较抽象,需要对网络有一定的认识才能理解到,其实看不懂也没太大的关系,普通人运维的中小集群,其实用什么网络技术并没有太大区别,还有一个就是技术迭代很快,需要不停的学习,虽然我从2017年开始接触使用Kubernetes,但是到基本的功能使用其实并没有变化,但是很多细节的东西都在变化。

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

本文分享自 运维小路 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档