kubeneters-循序渐进Cilium网络(二)

文章目录

  • 概要
  • IP 地址配置
  • 接口配置解析
  • 结论

概要

接续前一章节,我们还是以这张图继续深入Cilium网络世界
在这里插入图片描述

IP 地址配置

通过检查 Kubernetes 集群的当前环境,可以获取实际的 IP 地址和配置信息。这些信息将被补充到之前的网络示意图中,以使示意图更加贴近实际情况。

$ kubectl get nodes -o wide
NAME                   STATUS   ROLES           AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
k8smaster.pci.co.id    Ready    control-plane   52d   v1.31.2   172.19.6.5    <none>        Ubuntu 22.04.4 LTS   5.15.0-125-generic   containerd://1.7.23
k8sworker1.pci.co.id   Ready    <none>          51d   v1.31.2   172.19.6.8    <none>        Ubuntu 22.04.4 LTS   5.15.0-125-generic   containerd://1.7.23
$ kubectl get pod -n web -o wide
NAME                              READY   STATUS    RESTARTS   AGE     IP           NODE                   NOMINATED NODE   READINESS GATES
redis-77598f9f86-g4dqg            1/1     Running   0          55m     10.0.1.73    k8sworker1.pci.co.id   <none>           <none>
redis-77598f9f86-hpmsh            1/1     Running   0          62s     10.0.0.222   k8smaster.pci.co.id    <none>           <none>
service-python-7f7c9d4fc4-jhp4d   1/1     Running   0          7d21h   10.0.1.135   k8sworker1.pci.co.id   <none>           <none>
webserver-5f9579b5b5-4vj77        1/1     Running   0          20m     10.0.0.150   k8smaster.pci.co.id    <none>           <none>
webserver-5f9579b5b5-qw2m4        1/1     Running   0          20m     10.0.1.48    k8sworker1.pci.co.id   <none>           <none>

在这里插入图片描述

从当前配置可以明确观察到,Pod 的 IP 子网与节点的 IP 子网有所不同。此外,不同节点上的 Pod 也使用彼此独立的 IP 子网。如果对此现象的原因感到疑惑,这在此阶段是完全可以理解的,因为其机制尚未完全展现。接下来,我们将通过检查 Cilium 的配置对这一点进行进一步阐释和澄清。
在此前的讨论中提到,每个节点上都会运行一个 Cilium Agent。Cilium Agent 本质上是一个 Pod,主要负责该节点内的网络管理。在当前集群中,其具体配置如下:

$ kubectl get pod -n kube-system -o wide|grep cilium
cilium-envoy-5zhvb                            1/1     Running   20 (31d ago)      47d     172.19.6.5   k8smaster.pci.co.id    <none>           <none>
cilium-envoy-bwxsc                            1/1     Running   14 (31d ago)      46d     172.19.6.8   k8sworker1.pci.co.id   <none>           <none>
cilium-kbwq7                                  1/1     Running   0                 20d     172.19.6.8   k8sworker1.pci.co.id   <none>           <none>
cilium-operator-54c7465577-v8tk5              1/1     Running   475 (2d18h ago)   47d     172.19.6.8   k8sworker1.pci.co.id   <none>           <none>
cilium-operator-54c7465577-ztn6h              1/1     Running   74 (2d18h ago)    47d     172.19.6.5   k8smaster.pci.co.id    <none>           <none>
cilium-sjj8k                                  1/1     Running   0                 20d     172.19.6.5   k8smaster.pci.co.id    <none>           <none>

需关注以下两点:

  • Cilium Agent 的部署形式:Cilium Agent 通过 DaemonSet 部署,从而确保集群中的每个节点都运行一个 Cilium Agent。作为一个 Pod,Cilium Agent 也会被分配一个 IP 地址。然而,其 IP 地址与节点的 IP 地址相同。这是一种特殊的 Pod IP 地址分配方式,通常适用于需要直接访问节点(宿主机)网络的系统级 Pod。查看 kube-system 命名空间中的 Pod 可以发现,大多数此类 Pod 使用的是节点的 IP 地址。
  • Cilium Operator Pod 的职责:Cilium Operator Pod 负责集群内的 IP 地址管理,并为每个 Cilium Agent 分配其专用的可用 IP 地址范围。

为了确定每个节点所使用的 IP 地址范围,可以通过检查各节点上的 Cilium Agent 实例来获取相关信息。其具体名称已在前文中列出:

$ kubectl exec -it cilium-sjj8k  -n kube-system -- cilium debuginfo|grep -i ipam
Defaulted container "cilium-agent" out of: cilium-agent, config (init), mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init), install-cni-binaries (init)
IPAM:                   IPv4: 3/254 allocated from 10.0.0.0/24
kubectl exec -it cilium-kbwq7   -n kube-system -- cilium debuginfo|grep -i ipam
Defaulted container "cilium-agent" out of: cilium-agent, config (init), mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init), install-cni-binaries (init)
IPAM:                   IPv4: 13/254 allocated from 10.0.1.0/24

当前可以清晰地观察到每个节点所属的不同 IP 子网。根据网络分组规则,一个 IP 地址通过子网掩码划分归属。本例中,子网掩码为 /24,意味着第一个节点中,所有以 10.0.0 开头的地址都属于同一组;而第二个节点中,以 10.0.1.0开头的地址则属于另一组。因此,这两个节点分别位于不同的组或 IP 子网。

接下来,将进一步检查网络示意图中所代表的"door"——各网络接口的具体配置情况。

接口配置解析

将对“大楼”进行全面检查,详细分析其网络配置。首先,从四个 Pod 的配置入手展开探讨:

$ kubectl get pod -n web -o wide
NAME                              READY   STATUS    RESTARTS   AGE     IP           NODE                   NOMINATED NODE   READINESS GATES
redis-77598f9f86-g4dqg            1/1     Running   0          55m     10.0.1.73    k8sworker1.pci.co.id   <none>           <none>
redis-77598f9f86-hpmsh            1/1     Running   0          62s     10.0.0.222   k8smaster.pci.co.id    <none>           <none>
service-python-7f7c9d4fc4-jhp4d   1/1     Running   0          7d21h   10.0.1.135   k8sworker1.pci.co.id   <none>           <none>
webserver-5f9579b5b5-4vj77        1/1     Running   0          20m     10.0.0.150   k8smaster.pci.co.id    <none>           <none>
webserver-5f9579b5b5-qw2m4        1/1     Running   0          20m     10.0.1.48    k8sworker1.pci.co.id   <none>           <none>$ kubectl exec -it -n web redis-77598f9f86-g4dqg -- ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
1856: eth0@if1857: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether ca:63:cd:36:9a:4d brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.0.1.73/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::c863:cdff:fe36:9a4d/64 scope linkvalid_lft forever preferred_lft forever
$ kubeuser@k8smaster:~/yaml$ kubectl exec -it -n web redis-77598f9f86-hpmsh -- ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 12:10:31:5b:f8:81 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.0.0.222/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::1010:31ff:fe5b:f881/64 scope linkvalid_lft forever preferred_lft forever$ kubeuser@k8smaster:~/yaml$ kubectl exec -it -n web webserver-5f9579b5b5-4vj77 -- ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 12:5c:13:dd:e9:09 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.0.0.150/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::105c:13ff:fedd:e909/64 scope linkvalid_lft forever preferred_lft forever   $ kubectl exec -it -n web webserver-5f9579b5b5-qw2m4 -- ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
1858: eth0@if1859: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether b6:14:d1:6e:33:44 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.0.1.48/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::b414:d1ff:fe6e:3344/64 scope linkvalid_lft forever preferred_lft forever

每个容器除了本地回环接口外,通常只有一个网络接口。例如,接口格式为 1856: eth0@if1857,这表示容器内的网络接口编号为 1857,并与其所在节点上编号为1856 的对偶接口相连接。这可以对应于示意图中通过走廊连接的两扇“门”。

接下来,将检查节点的网络接口配置:

kubeuser@k8sworker1:~$  ip a
1857: lxc45ed99168f62@if1856: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 9a:a4:00:74:ef:bb brd ff:ff:ff:ff:ff:ff link-netns cni-635aef78-02ec-0461-5e37-830ca81c8812inet6 fe80::98a4:ff:fe74:efbb/64 scope linkvalid_lft forever preferred_lft forever
1859: lxc9a32fc44db3c@if1858: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether a6:bf:8b:47:ee:3e brd ff:ff:ff:ff:ff:ff link-netns cni-980c48cf-6b31-2ca3-4b39-fa0b409a1b66inet6 fe80::a4bf:8bff:fe47:ee3e/64 scope linkvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 4c:72:b9:4f:ac:9e brd ff:ff:ff:ff:ff:ffinet 172.19.6.8/23 brd 172.19.7.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::4e72:b9ff:fe4f:ac9e/64 scope linkvalid_lft forever preferred_lft forever
3: cilium_net@cilium_host: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 56:b0:da:67:29:a0 brd ff:ff:ff:ff:ff:ffinet6 fe80::54b0:daff:fe67:29a0/64 scope linkvalid_lft forever preferred_lft forever
4: cilium_host@cilium_net: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 3e:14:52:d3:3e:61 brd ff:ff:ff:ff:ff:ffinet 10.0.1.70/32 scope global cilium_hostvalid_lft forever preferred_lft foreverinet6 fe80::3c14:52ff:fed3:3e61/64 scope linkvalid_lft forever preferred_lft forever
5: cilium_vxlan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000link/ether a6:e8:c2:92:d6:e7 brd ff:ff:ff:ff:ff:ffinet6 fe80::a4e8:c2ff:fe92:d6e7/64 scope linkvalid_lft forever preferred_lft forever
......kubeuser@k8smaster:~$ ip a
......
21: lxcfc273d878e56@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 12:b5:68:c0:13:36 brd ff:ff:ff:ff:ff:ff link-netns cni-57a58836-f5d4-9f78-921a-ac0d54e32c75inet6 fe80::10b5:68ff:fec0:1336/64 scope linkvalid_lft forever preferred_lft forever
19: lxce4df0ab23bb6@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 7a:93:b3:e1:6e:37 brd ff:ff:ff:ff:ff:ff link-netns cni-812a7b03-c987-6a9f-04f7-e1c58b0aebf9inet6 fe80::7893:b3ff:fee1:6e37/64 scope linkvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether f4:4d:30:f6:89:ce brd ff:ff:ff:ff:ff:ffinet 172.19.6.5/23 brd 172.19.7.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::f64d:30ff:fef6:89ce/64 scope linkvalid_lft forever preferred_lft forever
3: cilium_net@cilium_host: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 02:2c:a2:90:5c:e2 brd ff:ff:ff:ff:ff:ffinet6 fe80::2c:a2ff:fe90:5ce2/64 scope linkvalid_lft forever preferred_lft forever
4: cilium_host@cilium_net: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 2a:55:f4:bf:84:09 brd ff:ff:ff:ff:ff:ffinet 10.0.0.169/32 scope global cilium_hostvalid_lft forever preferred_lft foreverinet6 fe80::2855:f4ff:febf:8409/64 scope linkvalid_lft forever preferred_lft forever
5: cilium_vxlan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000link/ether a6:6c:f6:f6:4f:d3 brd ff:ff:ff:ff:ff:ffinet6 fe80::a46c:f6ff:fef6:4fd3/64 scope linkvalid_lft forever preferred_lft forever
......

eth0:这是节点主机的接口,该接口可以视为“大楼”的主入口。
1857: lxc45ed99168f62@if1856:编号为 1856 的配对接口,与上方提到的左侧容器相连接。
1859: lxc9a32fc44db3c@if1858:编号为 1858 的配对接口,与上方提到的右侧容器相连接。
cilium_host@cilium_net:在示意图中,这个接口以圆形表示,用于在集群中实现节点之间的路由功能。
cilium_vxlan:在示意图中,这个接口以三角形表示,是一个隧道接口,负责集群中节点之间的数据传输。
现在,通过将这些信息补充到我们的示意图中,来获取完整的全貌:
在这里插入图片描述

结论

通过网络接口的分析,可以明确节点与容器、节点与节点之间的网络拓扑,为理解 Cilium 在 Kubernetes 网络中的数据传输和路由机制奠定了基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/505547.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔安装mongodb后,写脚本监控运行状态,关闭后自动重启

最近项目用上了mongodb&#xff0c;但是每天晚上 mongodb都回自动关闭&#xff0c;没办法 只能写个监视服务的脚本 在关闭的话就直接重启&#xff0c;创建个计划任务&#xff0c;每三分钟执行一次 # 检查mongo是否还在进程中 countps aux|grep mongo| grep -v grep |wc -l echo…

备忘录记事工具 四款好用的电脑备忘录记事本分享

在信息爆炸的时代&#xff0c;选择一个合适的备忘录记事工具显得尤为重要。无论是记录工作上的重要事项、学习笔记还是生活中的点滴灵感&#xff0c;一个好的备忘录应用都能成为您得力的小助手。今天&#xff0c;我将为大家深入评测四款各具特色的电脑备忘录记事本软件。 印象…

深入理解 C 语言中浮点型数据在内存中的存储

文章目录 一、浮点型数据存储格式&#xff08;IEEE 754 标准&#xff09;二、举例说明单精度浮点数存储过程三、绘图说明四、双精度浮点数存储示例&#xff08;以1.5为例&#xff09; 在 C 语言的世界里&#xff0c;数据类型丰富多样&#xff0c;而浮点型数据用于表示实数&…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”&#xff08;Change Data Capture&#xff09;。这是SQL Server数据库提供的一项功能&#xff0c;能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息&#xff0c;并使这些信息…

vue3如何使用bus(事件总线)

&#x1f680; 个人简介&#xff1a;某大型国企资深软件开发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

Spring IoC DI 入门 和 使用

Spring IoC & DI入门 和 使用 1. IoC & DI入门1.1 Spring 是什么?1.1.1 什么是容器?1.1.2 什么是IoC? 1.2 IoC介绍1.2.1 传统程序开发1.2.2 问题分析1.2.3 解决方案1.2.4 IoC程序开发1.2.5 IoC优势 1.3 DI介绍 2. IoC 和 DI使用 1. IoC & DI入门 1.1 Spring 是…

计算机网络(三)——局域网和广域网

一、局域网 特点&#xff1a;覆盖较小的地理范围&#xff1b;具有较低的时延和误码率&#xff1b;使用双绞线、同轴电缆、光纤传输&#xff0c;传输效率高&#xff1b;局域网内各节点之间采用以帧为单位的数据传输&#xff1b;支持单播、广播和多播&#xff08;单播指点对点通信…

mapbox基础,style样式汇总,持续更新

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;前言二、&#x1f340;根属性2.1 so…

551 灌溉

常规解法&#xff1a; #include<bits/stdc.h> using namespace std; int n,m,k,t; const int N105; bool a[N][N],b[N][N]; int cnt; //设置滚动数组来存贮当前和下一状态的条件 //处理传播扩散问题非常有效int main() {cin>>n>>m>>t;for(int i1;i&l…

jenkins入门10--自动化构建

build periodically&#xff1a;设定类似cron周期性时间触发构建 * * * * * (五颗星&#xff0c;中间用空格隔开&#xff09; 第一颗表示分钟&#xff0c;取值0~59 第二颗表示小时&#xff0c;取值0~23 第三颗表示一个月的第几天&#xff0c;取值1~31 第四颗表示第几月&#xf…

[0405].第05节:搭建Redis主从架构

Redis学习大纲 一、3主3从的集群配置&#xff1a; 1.1.集群规划 1.分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 2.每组是一主一从&#x…

新兴的开源 AI Agent 智能体全景技术栈

新兴的开源 AI Agent 智能体全景技术栈 LLMs&#xff1a;开源大模型嵌入模型&#xff1a;开源嵌入模型模型的访问和部署&#xff1a;Ollama数据存储和检索&#xff1a;PostgreSQL, pgvector 和 pgai后端&#xff1a;FastAPI前端&#xff1a;NextJS缺失的一环&#xff1a;评估和…

详细分析 Git 分支重命名与同步操作

目录 前言1. 场景2. 扩展知识 前言 以下小知识点作为讲解介绍&#xff0c;文章较短&#xff0c;作为科普使用 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 1. 场景 示例场景&#xff1a;决定将默认分支从 main…

vs2022开发.net窗体应用开发环境安装配置以及程序发布详细教程

文章目录 一、安装visual studio1.1推荐win10操作系统1.2推荐vs20221.3选择工作负载 二、新建基于.net的winform应用程序2.1为什么要.net 2.2 新建.net窗体应用2.2.1 选择Window窗体应用2.2.2 .net窗体对比framework窗体 三、发布.net应用 一、安装visual studio 1.1推荐win10…

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8&#xff08;You Only Look Once&#xff09;和OpenCV实现车道线和车辆检测&#xff0c;目标是创建一个可以检测道路上的车道并识别车辆的系统&#xff0c;并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

详解Sonar与Jenkins 的集成使用!

本文阅读前提 本文假设读者熟悉Jenkins和SonarQube的基础操作。 核心实现功能 Jenkins中运行的job来调用SonarScanner&#xff0c;最后可实现测试结果与SonarQube中同步查看。 Jenkins中安装Sonar相关插件 配置Sonarqube Dashboard>Manage Jenkins>Systems 指定son…

tdengine数据库使用java连接

1 首先给你的项目添加依赖 <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbcdriver</artifactId> <version>3.4.0</version> <!-- 表示依赖不会传递 --> </dependency> 注意&am…

vue3+ts+element-plus 对话框el-dialog设置圆角

对话框el-dialog设置圆角&#xff0c;实现的需求效果&#xff1a; 目前只能通过行内样式&#xff08;style"border-radius: 20px"&#xff09;来实现圆角效果&#xff1a;

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

STL——二叉搜索树

目录 二叉搜索树的概念 ⼆叉搜索树的性能分析 ⼆叉搜索树的插⼊ ⼆叉搜索树的查找 ⼆叉搜索树的删除 中序遍历结果为升序序列 二叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树&#xff0c;它或者是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树 • 若它的左⼦树不为空&#…