2021年2月19日 星期五

Kubernetes筆記-架構篇(二)-CNI理解-1

    CNI在架構篇(一)的時候有說明過,其實對Container Runtime的程式而言CNI是一種網路虛擬化的實現,每個CNI都有自已所需要設定的規格。

    例如像是Podman,如果要創建一個自已的Pod要用網路(段),則要利用podman的工具去創建一個網路(段),如果要在Pod執行時套用自已設定的網路(段)則要另外加上參數才會套用到這個自建的網路。

    舉一下例子,podman執行Container時會有一個預設的"cni-podman0"(10.85.0.0/16的網段,執行後會自動建立!)這個cni-podman0對實體主機而言就是一個Bridge類型的網路並且可以接上Pod並分配網IP給Pod,以便讓podman工具可以透過cni-podman0去連線到Pod的內部或是從實體主機透過網頁看到程式服務的內容

    當然如果想建立自已的Pod網路(段)如下範例:
        建立一個10.1.0.0網段,名稱為mynetwork的podman Bidge

                    #podman network create --subnet 10.1.0.0/16 mynetwork

此時會在/etc/cni/net.d/下產生一個名稱為mynetwork.conf(或是*.conflist多重網路下使用)的一個json的設定檔,裡面有定義Podman所需要的零件這個零件要參考各自的CNI軟體提供的零件來定義(一開始可以用flannel這個CNI來學習網路架構及理解較為簡單)。
    以下是一個CNI Network Config Json檔內容的樣子


    當然CNI也可以創建除了Bridge這個類型的網路外,也可創建多種不同類型的例如:"ovs"類型的網路,較常見到的就是Bridge類型的網路,也就是說利用"平版"Flat的網路來架構一個虛擬化的網路結構,通常如果沒有殊需求的話,一般來說可以套用CNI預設的網路設定即可。


參考資料  >
    https://www.hwchiu.com/cni.html
    https://github.com/containernetworking/cni
    cni spec: https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md

沒有留言:

張貼留言