自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes網(wǎng)絡(luò)概念初探

網(wǎng)絡(luò) 通信技術(shù)
本文將使用系統(tǒng)模型的方法探索Kubernetes網(wǎng)絡(luò)。我們將開發(fā)一個(gè)簡單的模型來了解容器與容器間的通信以及Pod之間的通信。

Kubernetes網(wǎng)絡(luò)是Kubernetes中一個(gè)核心概念。簡而言之,Kubernetes網(wǎng)絡(luò)模型可以確保集群上所有Kubernetes pod都能進(jìn)行通信。此外,在Kubernetes網(wǎng)絡(luò)模型的基礎(chǔ)上,Kubernetes還有其他核心概念,即Kubernetes Services和Kubernetes Ingress。

[[393012]]

本文將使用系統(tǒng)模型的方法探索Kubernetes網(wǎng)絡(luò)。我們將開發(fā)一個(gè)簡單的模型來了解容器與容器間的通信以及Pod之間的通信。

如何看待網(wǎng)絡(luò)

毫無疑問,網(wǎng)絡(luò)是一個(gè)極為廣泛且復(fù)雜的領(lǐng)域,它需要多年的理論積累以及實(shí)踐才能精通。在本文中,我們將在概念層面對(duì)網(wǎng)絡(luò)進(jìn)行梳理,暫時(shí)不涉及實(shí)現(xiàn)層面的細(xì)節(jié)。

理想的網(wǎng)絡(luò)模型

上圖將網(wǎng)絡(luò)描述為Network Graph,該網(wǎng)絡(luò)由一組節(jié)點(diǎn)以及節(jié)點(diǎn)之間的鏈接組成。如果當(dāng)且僅當(dāng)節(jié)點(diǎn)之間存在聯(lián)系時(shí),一個(gè)節(jié)點(diǎn)才可以與另一個(gè)節(jié)點(diǎn)交換信息。

消息交換框架

一個(gè)節(jié)點(diǎn),即源節(jié)點(diǎn),通過將消息放入目標(biāo)的輸入隊(duì)列,與另一個(gè)節(jié)點(diǎn),即目標(biāo)交換消息。消息交換由源節(jié)點(diǎn)觀察到的Send Event,Send·M和在目標(biāo)節(jié)點(diǎn)觀察到的相應(yīng)的Receive Event,Recv·M表示。

消息交換行為

網(wǎng)絡(luò)中的節(jié)點(diǎn)要么是Process,要么是Switch。Process會(huì)產(chǎn)生和消耗消息,Switch根據(jù)其轉(zhuǎn)發(fā)信息庫(FIB)處理消息。

S1和S2的轉(zhuǎn)發(fā)信息庫(FIB)

上圖描述了Switch的轉(zhuǎn)發(fā)信息庫(FIB)S1和S2。在收到消息時(shí),每臺(tái)Switch都會(huì)查詢其轉(zhuǎn)發(fā)信息庫,以決定是發(fā)送(deliver)、轉(zhuǎn)發(fā)(forward)還是丟棄(discard)該消息。

Switch:

  • 將信息的請(qǐng)求頭,即源地址、源端口、目標(biāo)地址和目標(biāo)端口與其轉(zhuǎn)發(fā)信息庫相匹配、
  • 執(zhí)行相關(guān)操作,默認(rèn)為棄置(discard)

Kubernetes網(wǎng)絡(luò)模型

Kubernetes網(wǎng)絡(luò)模型是一個(gè)描述性的網(wǎng)絡(luò)模型,也就是說,任何滿足Kubernetes網(wǎng)絡(luò)模型規(guī)范的網(wǎng)絡(luò)都是Kubernetes網(wǎng)絡(luò)。

然而,Kubernetes并沒有規(guī)定如何實(shí)現(xiàn)網(wǎng)絡(luò)模型。事實(shí)上,現(xiàn)在市面上有許多替代的實(shí)現(xiàn),稱為網(wǎng)絡(luò)插件。

本節(jié)將用一組關(guān)于消息交換的約束條件來描述Kubernetes網(wǎng)絡(luò)模型。

限制條件:網(wǎng)絡(luò)可尋址實(shí)體

Kubernetes網(wǎng)絡(luò)模型定義了3個(gè)可尋址實(shí)體:K8S pod、K8S 節(jié)點(diǎn)以及K8S Service,每個(gè)實(shí)體都會(huì)分配到一個(gè)不同的IP地址。

 

  1. ∧ (K8s-Pod(E₁) ∨ K8s-Node(E₁) ∨ K8s-Service(E₁)) ∧ (K8s-Pod(E₂) ∨ K8s-Node(E₂) ∨ K8s-Service(E₂)): 
  2. addr(E₁, a) ∧ addr(E₂, a)₂ 
  3. ⟺ E₁ = E₂ 

然而,網(wǎng)絡(luò)模型不對(duì)這些IP地址做任何進(jìn)一步的聲明。例如,Kubernetes網(wǎng)絡(luò)模型不對(duì)從這些IP地址中提取的IP地址空間做任何進(jìn)一步的聲明。

限制條件:容器間通信

Kubernetes網(wǎng)絡(luò)模型要求在Pod P上下文中執(zhí)行的容器C1可以通過localhost與在P上下文中執(zhí)行的其他容器C2進(jìn)行通信。

 

  1. K8s-Pod(P) ∧ K8s-Container(C₁, P) ∧ K8s-Container(C₂, P): open(C₂, p) 
  2. ⟹ 
  3. Send(e, C₁, 127.0.0.1, _, 127.0.0.1, p) 
  4. ⟹ 
  5. Recv(e, C₂, 127.0.0.1, _, 127.0.0.1, p) 

限制條件:Pod到Pod

Kubernetes網(wǎng)絡(luò)模型要求在Pod P1上下文中執(zhí)行的容器C1可以通過P2的地址與在P2上下文中執(zhí)行的其他容器C2進(jìn)行通信。

 

  1. ∧ K8s-Pod(P₁) ∧ K8s-Container(C₁, P₁) ∧ K8s-Pod(P₂) ∧ K8s-Container(C2, P₂): 
  2. addr(P₁, sa) ∧ addr(P₁, ta) ∧ open(C₂, tp) 
  3. ⟹ 
  4. Send(e, C₁, sa, sp, ta, tp) 
  5. ⟹ 
  6. Recv(e, C₂, sa, sp, ta, tp) 

限制條件:Process到Pod

Kubernetes網(wǎng)絡(luò)模型要求托管在節(jié)點(diǎn)N上的一個(gè)Process,稱為Daemon D,可以通過P的地址與托管在N上的Pod P上下文中執(zhí)行的任何容器C進(jìn)行通信。

 

  1. Container(C, P): host(N, D) ∧ host(N, P) ∧ addr(P, a) ∧ open(C, p) 
  2. ⟹ 
  3. Send(e, D, _, _, a, p) 
  4. ⟹ 
  5. Recv(e, C, _, _, a, p) 

Kubernetes網(wǎng)絡(luò)作為Network Graph

本節(jié)用Kubernetes Network Graph這個(gè)理想的模型來描述Kubernetes網(wǎng)絡(luò)模型。

下圖描述了本節(jié)內(nèi)容中的用例:Kubernetes集群K1由2個(gè)節(jié)點(diǎn)組成。每個(gè)節(jié)點(diǎn)托管2個(gè)Pod。每個(gè)Pod執(zhí)行2個(gè)容器,一個(gè)容器監(jiān)聽8080端口,一個(gè)容器監(jiān)聽9090端口。此外,每個(gè)節(jié)點(diǎn)托管1個(gè)Daemon。

我們可以將Kubernetes集群網(wǎng)絡(luò)建模為一個(gè)具有一組節(jié)點(diǎn)和一組鏈接的Graph。

節(jié)點(diǎn)

每個(gè)K8S容器C映射到網(wǎng)絡(luò)Process C

  1. K8s-Pod(P) ∧ K8s-Container(C, P): Process(C) 

每個(gè)Daemon D映射到網(wǎng)絡(luò)Process C

  1. K8s-Daemon(D): Process(D) 

每個(gè)K8s Pod P映射到網(wǎng)絡(luò)Switch P, Pod的Switch

  1. K8s-Pod(P): Switch(P) 

每個(gè)K8S節(jié)點(diǎn)N 映射到網(wǎng)絡(luò) Switch N,節(jié)點(diǎn)的Switch:

  1. K8s-Pod(N): Switch(N) 

鏈接

每個(gè)容器C會(huì)被鏈接到其Pod Switch P

  1. K8s-Pod(P) ∧ K8s-Container(C, P): link(C, P) 

每個(gè)Daemon D會(huì)被鏈接到其節(jié)點(diǎn)Switch N

 

  1. K8s-Node(N) ∧ K8s-Daemon(D): host(N, D)  
  2. ⟹  
  3. link(D, N) 

每個(gè)Pod Switch P會(huì)被鏈接到其節(jié)點(diǎn)Switch N

 

  1. K8s-Node(N) ∧ K8s-Pod(P): host(N, P)  
  2. ⟹  
  3. link(P, N) 

每個(gè)節(jié)點(diǎn)Switch N1會(huì)被鏈接到其他各節(jié)點(diǎn)Switch N2

 

  1. K8s-Node(N₁) ∧ K8s-Node(N₂): N₁ ≠ N₂ 
  2. ⟹ 
  3. link(N₁, N₂) 

在Pod Switch的轉(zhuǎn)發(fā)信息庫

P2的轉(zhuǎn)發(fā)信息庫

 

  1. 1. Delivery on localhost K8s-Pod(P) ∧ K8s-Container(C, P): 
  2. open(C, p) 
  3. ⟹ 
  4. [* * 127.0.0.1 p Deliver(C)] in FIB[P] 
  5. 2. Delivery on Pod Address 
  6. K8s-Pod(P) ∧ K8s-Container(C, P): 
  7. addr(P, a) ∧ open(C, p) 
  8. ⟹ 
  9. [* * a p Deliver(C)] in FIB[P] 
  10. 3. Local Forwarding Rule 
  11. K8s-Node(N) ∧ K8s-Pod(P): 
  12. host(N, P) 
  13. ⟹ 
  14. [* * * * Forward(N)] in FIB[P] 

在節(jié)點(diǎn)Switch的轉(zhuǎn)發(fā)信息庫

轉(zhuǎn)發(fā)信息庫 N2

 

  1. {{{1. Node to Pod Forwarding Rule 
  2. K8s-Node(N) ∧ K8s-Pod(P): 
  3. host(N, P) ∧ addr(P, a) 
  4. ⟹ 
  5. [* * a * Forward(P)] in FIB[N] 
  6. 2. Node to Node Forwalding Rule 
  7. K8s-Node(N₁) ∧ K8s-Node(N₂) ∧ K8s-Pod(P): 
  8. N₁ ≠ N₂ ∧ host(N₂, P) ∧ addr(P, a) 
  9. ⟹ 
  10. [* * a * Forward(N₂)] in FIB[N₁] 
  11.  
  12. }}} 

示例

本節(jié)將通過一些例子,按照Kubernetes集群網(wǎng)絡(luò)K1中的消息生命(Life of a Message)來進(jìn)行講解。

容器到容器

容器C1.1需要與容器C1.2進(jìn)行通信:

  • C1.1在P1的上下文中執(zhí)行
  • C1.2在P1的上下文中執(zhí)行
  • C₁.₁通過127.0.0.1:9090到C₁.₂

節(jié)點(diǎn)內(nèi)Pod到Pod通信

容器C 1.1需要與C 3.1進(jìn)行通信:

  • C 1.1在N1節(jié)點(diǎn)上的P1上下文中執(zhí)行
  • C 3.1在N1節(jié)點(diǎn)上的P3上下文中執(zhí)行

  • C 1.1通過10.1.1.2:8080到C 3.1

節(jié)點(diǎn)間Pod到Pod通信

容器C 1.1需要與容器C 2.1進(jìn)行通信:

  • C1.1是在N1節(jié)點(diǎn)上托管的P1的上下文中執(zhí)行的
  • C2.1在節(jié)點(diǎn)N2上的P2上下文中執(zhí)行

  • C1.1通過10.1.2.1:8080到C2.1

Daemon到Pod通信

Daemon D1需要與容器 C 1.1通信:

  • D1托管在節(jié)點(diǎn)N1上
  • C 1.1在Pod P1的上下文中執(zhí)行,該P(yáng)od托管在節(jié)點(diǎn)N1上

  • D1通過10.1.1.1:8080到C 1.1

總結(jié)

Kubernetes網(wǎng)絡(luò)模型是一個(gè)允許性的網(wǎng)絡(luò)模型,也就是說,任何滿足Kubernetes網(wǎng)絡(luò)模型約束的網(wǎng)絡(luò)都是一個(gè)有效的Kubernetes網(wǎng)絡(luò)。

將Kubernetes網(wǎng)絡(luò)模型映射到Network Graph,使我們能夠在概念層面上對(duì)網(wǎng)絡(luò)進(jìn)行推理,并且跳過了在實(shí)現(xiàn)層面上推理所需的一系列細(xì)節(jié)。

在后續(xù)的文章中,我們將使用這個(gè)Network Graph來討論Kubernetes服務(wù)、Kubernetes Ingress和Kubernetes策略。

責(zé)任編輯:未麗燕 來源: Dockone.io
相關(guān)推薦

2020-04-22 13:23:46

智能合約區(qū)塊鏈比特幣

2014-11-04 15:29:00

KubernetesDocker

2021-02-19 08:38:36

Kubernetes容器化分布式

2022-07-11 09:46:43

Kubernetes開源Linux

2020-05-21 07:00:00

軟件定義網(wǎng)絡(luò)SDN網(wǎng)絡(luò)

2019-10-24 10:25:32

Kubernetes網(wǎng)絡(luò)集群

2025-01-06 00:00:10

2022-01-27 13:47:10

Kubernete命令Linux

2024-01-19 18:02:25

Kubernetes網(wǎng)絡(luò)流量

2023-08-29 07:40:24

Kubernetes容器Container

2018-11-21 10:36:29

Kubernetes存儲(chǔ)Docker

2020-07-08 09:36:03

Kubernetes容器開發(fā)

2020-04-12 22:23:45

Kubernetes容器網(wǎng)絡(luò)

2020-09-23 14:20:07

Kubernetes容器網(wǎng)絡(luò)模型

2021-11-22 08:50:20

Kubernetes網(wǎng)絡(luò)策略云原生應(yīng)用程序

2021-11-02 08:41:44

Kubernetes Nginx部開源

2022-05-02 18:45:33

Kubernetes網(wǎng)絡(luò)模型

2012-10-31 11:15:59

2021-11-18 23:00:22

Kubernetes容器工具

2022-09-01 06:59:56

Kubernete云原生
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)