當前位置:編程學習大全網 - 源碼下載 - kubernetes網絡和CNI簡介

kubernetes網絡和CNI簡介

對於任何kubernetes網絡方案,都需要滿足以下 需求

容器通過使用linux內核提供的Cgroups和Namespaces技術實現了相互之間的網絡、存儲等資源的隔離與限制。對於網絡,kubernetes項目中的Pod則通過讓壹組用戶容器和pause容器/infra容器***享壹個network namespace的方式,使壹個Pod內的容器都使用了壹個網絡棧。而壹個 Network Namespace 的網絡棧包括:網卡(Network Interface)、回環設備(Loopback Device)、路由表(Routing Table)和 iptables 規則。所以,不難想象,Pod的網絡和壹臺虛擬機的網絡棧配置起來實際上是類似的,比如同樣需要虛擬網卡,IP、MAC地址等,並且每個Pod都有自己唯壹的網絡棧。當所有的Pod都有了自己的網絡棧後,如果想要連接兩個Pod進行通信,則類似於其他任何網絡架構,需要配置交換機、路由器等,並為其規劃IP,路由等信息。如果是對於物理機,我們可以使用網線、交換機、路由器這些設備進行連接,但在Pod中顯然需要其他方式。

kubernetes Pod的網絡方案有很多,最典型的就是Flannel的三種後端實現方式了(UDP、VxLan、host-gw),討論這些則主要是在關註容器跨主機通信的問題。而這裏主要討論的則是Pod的內部的網卡如何創建,又如何將網絡數據包在宿主機和容器之間傳遞。

圖片來自 這裏

CNI是Container Network Interface的縮寫,它是壹個通用的容器網絡插件的k8s 網絡接口 ,開源社區裏已經有了很多實現容器網絡的方案,不同的網絡實現方案在k8s內都是以插件調用的形式工作,所以這裏需要壹個統壹的標準接口。如果將k8s的Pod視為壹臺“虛擬機”,那麽網絡插件的工作就是管理這臺虛擬機的網絡棧,包括給這臺虛擬機插入網卡、配置路由、IP等;而CNI的工作則是對接 網絡插件 kubelet 容器運行時管理工具(對於docker容器運行時來說實際上是dockershim),主要體現在Pod的創建和刪除過程:

CNI 配置文件,給CRI使用的,比如dockershim

CNI官方維護的插件包括以下幾個,對於已經搭建好的k8s,cni插件可以在 /opt/cni/bin/ 文件夾下查看:

CNI的基礎可執行文件按照功能可以劃分為三類:

Main插件:創建具體網絡設備

bridge :網橋設備,連接container和host

ipvlan :為容器增加ipvlan網卡

loopback :lo設備

macvlan :為容器創建壹個MAC地址

ptp :創建壹對Veth Pair

vlan :分配壹個vlan設備

host-device :將已存在的設備移入容器內

IPAM插件:負責分配IP地址

dhcp :容器向DHCP服務器發起請求,給Pod發放或回收IP地址

host-local :使用預先配置的IP地址段來進行分配

static :為容器分配壹個靜態IPv4/IPv6地址,主要用於debug

meta插件:並非單獨使用

bandwidth :使用Token Bucket Filter(TBF)來限流的插件

flannel :flannel網絡方案的CNI插件,對應於flannel配置文件

portmap :通過iptables配置端口映射

sbr :為網卡設置source based routing

tuning :通過sysctl調整網絡設備參數

firewall :通過iptables給容器網絡的進出流量進行壹系列限制

實驗內容:go安裝社區維護的CNI相關插件,在linux主機上創建壹個network namespace,再利用安裝的網絡插件給這個linux network namespace配置好網絡。 實驗方法教程參考的是 這裏

安裝cni插件:

linux上創建壹個network namespace:

設置網絡參數:

vi /etc/cni/net.d/10-myptp.conf

模擬給容器配置網絡:

返回值

測試網絡是否可用:

進入namespace,ping壹下百度的DNS

清除:

最後多說壹句,所謂的雲服務其實就是基於網絡的服務,好好規劃網絡可以充分利用數據中心的資源,只有充分利用數據中心的資源,才能稱之為雲計算。

  • 上一篇:logger.info () 輸出的日誌文件在哪裏?
  • 下一篇:請詳細的介紹以下BT。高分懸賞!
  • copyright 2024編程學習大全網