Skip to content

Commit 5781bad

Browse files
author
wangyazhou
committed
Clion太耗费内存,使用Obsidian记录笔记
1 parent 846e1c9 commit 5781bad

File tree

358 files changed

+2620
-3818
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

358 files changed

+2620
-3818
lines changed

README.adoc

Lines changed: 0 additions & 24 deletions
This file was deleted.

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
# k8s-explore
3+
4+
5+
____
6+
Linux 专家之路。
7+
____
8+
9+
10+
v1.0.0.1, 2024-11-25
11+
12+

calico/calico.adoc renamed to calico/calico.md

Lines changed: 37 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,152 +1,140 @@
1-
:toc:
2-
3-
// 保证所有的目录层级都可以正常显示图片
4-
:path: calico/
5-
:imagesdir: ../image/
6-
7-
// 只有book调用的时候才会走到这里
8-
ifdef::rootpath[]
9-
:imagesdir: {rootpath}{path}{imagesdir}
10-
endif::rootpath[]
11-
12-
== Calico
1+
## Calico
132

143
Calico组件主要架构由Felix、Confd、BIRD组成
154

165
- Felix 运行在每一台 Host 的 agent 进程,Felix负责刷新主机路由和ACL规则等,以便为该主机上的 Endpoint 正常运行提供所需的网络连接和管理。进出容器、虚拟机和物理主机的所有流量都会遍历Calico,利用Linux内核原生的路由和iptables生成的规则。是负责Calico Node运行并作为每个节点Endpoint端点的守护程序,它负责管理当前主机中的Pod信息,与集群etcd服务交换集群Pod信息,并组合路由信息和ACL策略。
176
- Confd是负责存储集群etcd生成的Calico配置信息,提供给BIRD层运行时使用。
187
- BIRD(BIRD Internet Routing Daemon)是核心组件,Calico中的BIRD特指BIRD Client和BIRD Route Reflector,负责主动读取Felix在本机上设置的路由信息,并通过BGP广播协议在数据中心中进行分发路由
198

9+
### 网络模型
2010

21-
=== 网络模型
22-
23-
==== `IPIP`
11+
#### `IPIP`
2412

2513
流量:tunl0设备封装数据,形成隧道,承载流量。
2614

2715
适用网络类型:适用于互相访问的pod不在同一个网段中,跨网段访问的场景。外层封装的ip能够解决跨网段的路由问题。
2816

2917
效率:流量需要tunl0设备封装,效率略低。
3018

31-
image::calico/image-2025-03-04-16-35-09-325.png[]
19+
![[image-2025-03-04-16-35-09-325.png]]
3220

33-
==== `BGP` 网络
21+
#### `BGP` 网络
3422

3523
流量:使用主机路由表信息导向流量
3624

3725
适用网络类型:适用于互相访问的pod在同一个网段,适用于大型网络。
3826

3927
效率:原生hostGW,效率高。
4028

41-
image::calico/image-2025-03-04-16-36-17-662.png[]
29+
![[image-2025-03-04-16-36-17-662.png]]
4230

4331

4432

4533

46-
=== 网络策略
47-
==== Cluster IP服务
34+
### 网络策略
35+
#### Cluster IP服务
4836

4937
默认服务类型为 ClusterIP 。这允许通过虚拟 IP 地址(称为服务 Cluster IP)在集群内访问服务。服务的 Cluster IP 可通过 Kubernetes DNS 发现。例如,my-svc.my-namespace.svc.cluster-domain.example 。DNS 名称和 Cluster IP 地址在服务的整个生命周期内保持不变,即使支持该服务的 pod 可能会被创建或销毁,并且支持该服务的 pod 数量可能会随时间而变化。
5038

5139
在典型的 Kubernetes 部署中,kube-proxy 在每个节点上运行,负责拦截到 Cluster IP 地址的连接,并在支持每个服务的 Pod 组之间进行负载平衡。作为此过程的一部分,DNAT 用于将目标 IP 地址从 Cluster IP 映射到所选的支持 Pod。连接上的响应数据包随后在返回发起连接的 Pod 的途中进行 NAT 反向转换
5240

53-
image::calico/image-2025-01-23-19-29-59-234.png[]
41+
![[image-2025-01-23-19-29-59-234.png]]
5442

5543

5644

57-
image::calico/image-2025-01-23-20-07-26-827.png[]
45+
![[image-2025-01-23-20-07-26-827.png]]
5846

5947

60-
image::calico/image-2025-01-23-20-09-30-283.png[]
48+
![[image-2025-01-23-20-09-30-283.png]]
6149

6250

63-
==== NodePort 节点端口服务
51+
#### NodePort 节点端口服务
6452

6553
从集群外部访问服务的最基本方法是使用 NodePort 类型的服务。节点端口是集群中每个节点上保留的端口,可通过该端口访问服务。在典型的 Kubernetes 部署中,kube-proxy 负责拦截与节点端口的连接并在支持每个服务的 pod 之间对其进行负载平衡
6654

67-
image::calico/image-2025-01-23-19-36-07-020.png[]
55+
![[image-2025-01-23-19-36-07-020.png]]
6856

69-
image::calico/image-2025-01-23-20-11-50-660.png[]
57+
![[image-2025-01-23-20-11-50-660.png]]
7058

71-
image::calico/image-2025-01-23-20-16-41-799.png[]
59+
![[image-2025-01-23-20-16-41-799.png]]
7260

7361

7462
请注意,由于连接源 IP 地址已通过 SNAT 转换为节点 IP 地址,因此服务支持 pod 的入口网络策略看不到原始客户端 IP 地址。通常,这意味着任何此类策略仅限于限制目标协议和端口,而不能基于客户端/源 IP 进行限制。
7563

76-
==== 负载均衡器服务
64+
#### 负载均衡器服务
7765

78-
image::calico/image-2025-01-23-19-39-20-407.png[]
66+
![[image-2025-01-23-19-39-20-407.png]]
7967

8068
大多数网络负载均衡器都会保留客户端源 IP 地址,但由于服务随后会通过一个内部节点(kube-proxy),因此支持 Pod 本身看不到客户端 IP。
8169

82-
image::calico/image-2025-01-23-20-31-03-560.png[]
70+
![[image-2025-01-23-20-31-03-560.png]]
8371

84-
==== Advertising service IPs
72+
#### Advertising service IPs
8573

8674
使用节点端口或网络负载平衡器的一种替代方法是通过 BGP 通告服务 IP 地址。这要求集群在支持 BGP 的底层网络上运行
8775

8876
Calico supports advertising service Cluster IPs, or External IPs for services configured with one.
8977

9078
https://github.com/metallb/metallb?tab=readme-ov-file[metallb和calico一样根据路由提供负载均衡]
9179

92-
image::calico/image-2025-01-23-19-46-52-810.png[]
80+
![[image-2025-01-23-19-46-52-810.png]]
9381

94-
image::calico/image-2025-01-23-20-23-12-971.png[]
95-
image::calico/image-2025-01-23-20-24-46-501.png[]
82+
![[image-2025-01-23-20-23-12-971.png]]
83+
![[image-2025-01-23-20-24-46-501.png]]
9684

9785

98-
==== externalTrafficPolicy:local
86+
#### externalTrafficPolicy:local
9987

10088
默认情况下,无论是使用服务类型NodePort还是LoadBalancer,还是通过BGP公布服务IP地址,从集群外部访问服务都会在支持该服务的所有 Pod 之间均匀负载平衡,与 Pod 位于哪个节点无关。可以通过使用externalTrafficPolicy:local 配置服务来更改此行为,该配置指定连接应仅负载平衡到本地节点上支持该服务的Pod。
10189

102-
image::calico/image-2025-01-23-19-51-38-831.png[]
90+
![[image-2025-01-23-19-51-38-831.png]]
10391

104-
image::calico/image-2025-01-23-20-32-35-229.png[]
92+
![[image-2025-01-23-20-32-35-229.png]]
10593

10694

107-
image::calico/image-2025-01-23-20-26-12-008.png[]
95+
![[image-2025-01-23-20-26-12-008.png]]
10896

10997

110-
==== Calico eBPF本机服务处理
98+
#### Calico eBPF本机服务处理
11199

112100
Calico作为kube-proxy的替代方案,支持eBPF本机服务处理,通过eBPF实现服务路由,这可以保留源IP简化网络策略,提供DSR(直接服务返回)以减少流量的网络跳数。
113101

114-
image::calico/image-2025-01-23-19-57-38-107.png[]
102+
![[image-2025-01-23-19-57-38-107.png]]
115103

116104

117-
image::calico/image-2025-01-23-20-29-34-564.png[]
105+
![[image-2025-01-23-20-29-34-564.png]]
118106

119107

120-
==== Calico网络模型示例
108+
#### Calico网络模型示例
121109

122110
均衡按照节点进行均衡
123111

124-
image::calico/image-2025-01-23-20-27-47-118.png[]
112+
![[image-2025-01-23-20-27-47-118.png]]
125113

126114

127115

128116

129-
image::calico/image-2025-01-24-10-17-18-714.png[]
117+
![[image-2025-01-24-10-17-18-714.png]]
130118

131-
image::calico/image-2025-01-24-10-17-35-695.png[]
119+
![[image-2025-01-24-10-17-35-695.png]]
132120

133121
In-cluster ingress solution exposed as service type LoadBalancer with externalTrafficPolicy:local
134122

135-
image::calico/image-2025-01-24-10-40-18-480.png[]
123+
![[image-2025-01-24-10-40-18-480.png]]
136124

137125
External ingress solution via node ports
138126

139-
image::calico/image-2025-01-24-10-41-22-363.png[]
127+
![[image-2025-01-24-10-41-22-363.png]]
140128

141129
External ingress solution direct to pods
142130

143-
image::calico/image-2025-01-24-10-42-26-185.png[]
131+
![[image-2025-01-24-10-42-26-185.png]]
144132

145133

146134

147135

148136

149-
==== Calico eBPF数据平面简介
137+
#### Calico eBPF数据平面简介
150138

151139

152140

calico/calicoctl.adoc

Lines changed: 0 additions & 18 deletions
This file was deleted.

calico/calicoctl.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
3+
4+
5+
6+
7+

calico/calico架构.adoc renamed to calico/calico架构.md

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,17 @@
1-
:toc:
21

3-
// 保证所有的目录层级都可以正常显示图片
4-
:path: calico/
5-
:imagesdir: ../image/
6-
7-
// 只有book调用的时候才会走到这里
8-
ifdef::rootpath[]
9-
:imagesdir: {rootpath}{path}{imagesdir}
10-
endif::rootpath[]
11-
12-
== Calico架构
13-
14-
15-
=== 路由配置组件 Felix
2+
### 路由配置组件 Felix
163

174

185
如果只有两台机器,每台机器只有两个容器,而且保持不变。我手动配置一下,倒也没啥问题。但是如果容器不断地创建、删除,节点不断地加入、退出,情况就会变得非常复杂
196

20-
image::calico/image-2025-04-19-17-10-36-534.png[]
7+
![[image-2025-04-19-17-10-36-534.png]]
218

229
就像图中,有三台物理机,两两之间都需要配置路由,每台物理机上对外的路由就有两条。如果有六台物理机,则每台物理机上对外的路由就有五条。新加入一个节点,需要通知每一台物理机添加一条路由。
2310

2411
这还是在物理机之间,一台物理机上,每创建一个容器,也需要多配置一条指向这个容器的路由。如此复杂,肯定不能手动配置,需要每台物理机上有一个 agent,当创建和删除容器的时候,自动做这件事情。这个 agent 在 Calico 中称为 Felix。
2512

2613

27-
=== 路由广播组件 BGP Speaker
14+
### 路由广播组件 BGP Speaker
2815

2916
当 Felix 配置了路由之后,接下来的问题就是,如何将路由信息,也即将“如何到达我这个节点,访问我这个节点上的容器”这些信息,广播出去。
3017

@@ -33,15 +20,15 @@ image::calico/image-2025-04-19-17-10-36-534.png[]
3320
在 Calico 中,每个 Node 上运行一个软件 BIRD,作为 BGP 的客户端,或者叫作 BGPSpeaker,将“如何到达我这个 Node,访问我这个 Node 上的容器”的路由信息广播出去。所有 Node 上的 BGP Speaker 都互相建立连接,就形成了全互连的情况,这样每当路由有所变化的时候,所有节点就都能够收到了
3421

3522

36-
=== 安全策略组件 Network Policy
23+
### 安全策略组件 Network Policy
3724

3825
Calico 中还实现了灵活配置网络策略 Network Policy,可以灵活配置两个容器通或者不通。这个怎么实现呢?
3926

40-
image::calico/image-2025-04-19-17-16-08-387.png[]
27+
![[image-2025-04-19-17-16-08-387.png]]
4128

4229
虚拟机中的安全组,是用 iptables 实现的。Calico 中也是用 iptables 实现的。这个图里的内容是 iptables 在内核处理网络包的过程中可以嵌入的处理点。Calico 也是在这些点上设置相应的规则。
4330

44-
image::calico/image-2025-04-19-17-16-55-005.png[]
31+
![[image-2025-04-19-17-16-55-005.png]]
4532

4633

4734

0 commit comments

Comments
 (0)