k8s CNI Calico 网络模式总结【建议收藏】

2024-04-07 15:04

本文主要是介绍k8s CNI Calico 网络模式总结【建议收藏】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

calico架构图

​编辑

IPIP模式下的架构图

calico 核心组件

Overlay

网络模式:

Vxlan 

IPIP  

IpCrossubnet

Pod IP对外暴露

不对外暴露:

实现对外暴露的方法:

overlay模式下的网络MTU 

Iptables & ipvs

Full-mesh

overlay的主要缺点:

Unoverlay 

Reflect route (Full-mesh + RR)

TOR (禁用Full-mesh)

Underlay

BGP

Vlan

MacVlan


calico架构图

下图显示了 Kubernetes、具有网络和网络策略的本地部署所需和可选的 Calico 组件。

IPIP模式下的架构图

calico 核心组件

组件名称功能
Felix
  • 将其主机上的端点路由到 Linux 内核 FIB(转发信息库)中
  • 对路由和 ACL 以及主机上所需的任何其他内容进行编程,以便为该主机上的端点提供所需的连接
BIRD从 Felix 获取路由并分发给网络上的 BGP 对等体,以实现主机间路由。在托管 Felix 代理的每个节点上运行
Confd监视 Calico 数据存储中 BGP 配置和全局默认值(例如 AS 编号、日志记录级别和 IPAM 信息)的更改。
Typha

通过减少每个节点对数据存储的影响来增加规模。作为数据存储和 Felix 实例之间的守护进程运行。

  • 由于一个 Typha 实例可以支持数百个 Felix 实例,因此它大大减少了数据存储上的负载。
  • 由于Typha可以过滤掉与Felix无关的更新,因此也减少了Felix的CPU使用率。在大规模(100+节点)Kubernetes集群中,这是至关重要的,因为API服务器生成的更新数量随着节点数量的增加而变化。

备注: etcd v3 已经针对处理许多客户端进行了优化,因此使用它是多余的,不建议使用。操作员安装始终安装 Typha。

Overlay


网络模式:

Vxlan 

  • VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由 IETF 定义的 NVO3(Network Virtualization over Layer 3)标准技术之一,采用 L2 over L4(MAC-in-UDP)的报文封装模式,将二层报文用三层协议进行封装,可实现二层网络在三层范围内进行扩展,同时满足数据中心大二层虚拟迁移和多租户的需求

IPIP  

  • 基于 TUN 设备实现 IPIP 隧道,TUN 网络设备能将三层(IP 网络数据包)数据包封装在另外一个三层数据包之中,Linux 原生支持好几种不同的 IPIP 隧道类型,但都依赖于 TUN 网络设备
  • ipip: 普通的 IPIP 隧道,就是在报文的基础上再封装成一个 IPv4 报文

  • gre: 通用路由封装(Generic Routing Encapsulation),定义了在任意网络层协议上封装其他网络层协议的机制,所以对于 IPv4 和 IPv6 都适用

  • sit: sit 模式主要用于 IPv4 报文封装 IPv6 报文,即 IPv6 over IPv4

  • isatap: 站内自动隧道寻址协议(Intra-Site Automatic Tunnel Addressing Protocol),类似于 sit 也是用于 IPv6 的隧道封装

  • vti: 即虚拟隧道接口(Virtual Tunnel Interface),是一种 IPsec 隧道技术

  • 本文中我们使用的是 ipip 这种普通的 IPIP 隧道

IpCrossubnet

总结:在一些小型网络或简单网络拓扑中,IPIP 可能具有更好的性能和简单性;而在大规模网络或需要多租户支持和网络隔离的环境中,VXLAN 则可能更适合。

Pod IP对外暴露

优点:

  1. 避免出站连接的 SNAT 对于集成现有的更广泛的安全要求可能至关重要。它还可以简化调试和操作日志的理解。
  2.  如果您有专门的工作负载,这意味着需要直接访问某些 pod,而无需通过 Kubernetes 服务或 Kubernetes 入口,那么可路由 pod IP 在操作上可能比使用主机联网 pod 的替代方案更简单。

缺点:

  1. 缺点是 Pod IP 在更广泛的网络中必须是唯一的。例如,如果运行多个集群,您将需要为每个集群中的 Pod 使用不同的 IP 地址范围 (CIDR)。
  2. 当大规模运行时,或者企业对 IP 地址空间存在其他重大需求时,这反过来可能会导致 IP 地址范围耗尽的挑战。

不对外暴露:


优点:

  1. Kubernetes 将使用一种称为 SNAT(源网络地址转换)的技术来更改源 IP地址从 Pod 的 IP 地址到托管 Pod 的节点的 IP 地址。连接上的任何返回数据包都会自动映射回 pod IP 地址。因此,Pod 不知道 SNAT 正在发生,连接的目的地将该节点视为连接的源,而底层更广泛的网络永远不会看到 Pod IP 地址。安全
  2. 只能通过 Kubernetes 服务或 Kubernetes 入口来完成。集群外部的任何内容都无法直接连接到 Pod IP 地址,因为更广泛的网络不知道如何将数据包路由到 Pod IP 地址

实现对外暴露的方法:

  1. 利用BGP网络协议,使用TOR模式(Top-of-Rack)。允许 Calico 与物理网络对等以交换路由。从而形成一个非覆盖网络。 需要进行企业网络配置
  2. CNI插件云服务商提供

overlay模式下的网络MTU 

     IP in IP 使用 20 字节标头,IPv4 VXLAN 使用 50 字节标头,IPv6 VXLAN 使用 70 字节标头,IPv4 WireGuard 使用60 字节标头,IPv6 WireGuard 使用 80 字节标头

Iptables & ipvs

   如果您要扩展超过 1,000 个服务,则值得考虑使用 kube-proxy IPVS 模式潜在的性能改进。Comparing kube-proxy modes: iptables or IPVS?

Full-mesh

    全网格非常适合 100 个或更少节点的中小型部署,但在规模明显更大时,全网格的效率会降低,我们建议使用路由反射器。

overlay的主要缺点:

  1. 对性能有轻微影响。封装数据包的过程需要占用少量 CPU,并且数据包中需要额外的字节来对封装进行编码(VXLAN 或 IP-in-IP header),从而减少了可发送的内部数据包的最大大小,从而可以减少内部数据包的大小。意味着需要为相同数量的总数据发送更多数据包。
  2. Pod IP 地址在集群外部不可路由

Unoverlay 


Reflect route (Full-mesh + RR)

 默认 Calico 工作在 node-mesh 模式,所有节点互相连接, node-mesh 模式在小规模部署时工作是没有问题的,当大规模部署时,连接数会非常大,消耗过多资源,利用 BGP RR ,可以避免这种情况的发生,通过一个或者多个 BGP RR 来完成集中式的路由分发,减少对网络资源的消耗以及提高 Calico 工作效率、稳定性


备注:需要添加一台新机器,或者是将要设置RR的机器流量摘除,否则会影响之前建立的BGP连接大约2秒的中断时间

TOR (禁用Full-mesh)

 备注: IBGP & EBGP 结合使用,集群大于100个节点以后使用TOR模式可以带来很好的性能


Underlay

由交换机和路由器等设备组成,借助以太网协议、路由协议和 VLAN 协议等驱动的网络。

BGP

  • 边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议
     

Vlan

  • VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接通信,从而将广播报文限制在一个VLAN内

MacVlan

  • Macvlan  一块网卡虚拟多个网卡,每个网卡都有独立的mac地址。共享广播域 
  • macvlan 模式将容器的网络接口直接映射到宿主机上的物理网络接口,容器使用宿主机的 MAC 地址进行通信,可以像物理设备一样在网络中被识别和访问。

这篇关于k8s CNI Calico 网络模式总结【建议收藏】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/882924

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边