k8s網絡之設計與實現


 

k8s網絡主題系列:

一、k8s網絡之設計與實現

二、k8s網絡之Flannel網絡

三、k8s網絡之Calico網絡

 

K8s網絡設計與實現是在學習k8s網絡過程中總結的內容。在學習k8s網絡各種插件之前我覺得有必要先搞清楚其設計思路是怎樣的,在知道其規范的情況下肯定能跟深刻理解k8s網絡的各種插件。就像擁有指南針的船,才不會跑偏。 

 

一、K8s網絡設計

1.每個Pod都擁有一個獨立IP地址,Pod內所有容器共享一個網絡命名空間

2.集群內所有Pod都在一個直接連通的扁平網絡中,可通過IP直接訪問

(1) 所有容器之間無需NAT就可以直接互相訪問

(2) 所有Node和所有容器之間無需NAT就可以直接互相訪問

(3) 容器自己看到的IP跟其他容器看到的一樣

 

二、K8s網絡要求

K8s對網絡的要求總的來講主要有兩個最基本的要求,分別是:

  1. 要能夠為每一個Node上的Pod分配互相不沖突的IP地址;
  2. 要所有Pod之間能夠互相訪問;

 

三、K8s網絡規范

CNI是由CoreOS提出的一個容器網絡規范。已采納規范的包括Apache Mesos, Cloud Foundry, Kubernetes, Kurma rkt。另外 Contiv Networking, Project Calico Weave這些項目也為CNI提供插件。

 

 

CNI 的規范比較小巧。它規定了一個容器runtime和網絡插件之間的簡單的契約。這個契約通過JSON的語法定義了CNI插件所需要提供的輸入和輸出。一個容器可以被加入到被不同插件所驅動的多個網絡之中。一個網絡有自己對應的插件和唯一的名稱。CNI 插件需要提供兩個命令:一個用來將網絡接口加入到指定網絡,另一個用來將其移除。這兩個接口分別在容器被創建和銷毀的時候被調用。

容器runtime首先需要分配一個網絡命名空間以及一個容器ID。然后連同一些CNI配置參數傳給網絡驅動。接着網絡驅動會將該容器連接到網絡並將分配的IP地址以JSON的格式返回給容器runtime

 

四、K8s網絡實現

隧道方案

隧道方案在IaaS層的網絡中應用也比較多,將pod分布在一個大二層的網絡規模下。網絡拓撲簡單,但隨着節點規模的增長復雜度會提升。

WeaveUDP廣播,本機建立新的BR,通過PCAP互通

Open vSwitchOVS):基於VxLanGRE協議,但是性能方面損失比較嚴重

FlannelUDP廣播,VxLan

RacherIPsec

路由方案

路由方案一般是從3層或者2層實現隔離和跨主機容器互通的,出了問題也很容易排查。

Calico:基於BGP協議的路由方案,支持很細致的ACL控制,對混合雲親和度比較高。

Macvlan:從邏輯和Kernel層來看隔離性和性能最優的方案,基於二層隔離,所以需要二層路由器支持,大多數雲服務商不支持,所以混合雲上比較難以實現。

 

五、K8s Pod的網絡創建流程

1.每個Pod除了創建時指定的容器外,都有一個kubelet啟動時指定的基礎容器

2.kubelet創建基礎容器,生成network namespace

3.kubelet調用網絡CNI driver,由它根據配置調用具體的CNI 插件

4.CNI 插件給基礎容器配置網絡

5.Pod 中其他的容器共享使用基礎容器的網絡

 

以上內容主要來自博客文章。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM