k8s的flannel網絡vlxaln、host-gw分析

        k8s網絡通訊:node

  1) 容器間通訊:同一個pod內的多個容器間的通訊,經過lo便可實現;後端

        2) pod之間的通訊,pod ip <---> pod ip,pod和pod之間要不通過任何轉換便可通訊;api

        3) pod和service通訊:pod ip <----> cluster ip(即service ip)<---->pod ip,他們經過iptables或ipvs實現通訊,另外你們要注意ipvs取代不了iptables,由於ipvs只能作負載均衡,而作不了nat轉換;bash


         k8s要靠CNI接口接入其餘插件來實現網絡通信。目前比較流行的插件有flannel,callco,canel,kube-router。網絡

這些插件使用的解決方案都以下:負載均衡

    1)虛擬網橋,虛擬網卡,多個容器共用一個虛擬網卡進行通訊;ide

    2)多路複用:MacVLAN,多個容器共用一個物理網卡進行通訊;性能

    3)硬件交換:SR-LOV,一個物理網卡能夠虛擬出多個接口,這個性能最好。spa

 CNI插件存放位置:/etc/cni/net.d/10-flannel.conflist插件


kubeadm部署的k8s集羣的配置文件

[root@k8s-3 ~]# kubectl get configmap  -n kube-system
NAME                                 DATA   AGE
coredns                                1      14d
extension-apiserver-authentication                  6      14d
kube-flannel-cfg                           2      13d
kube-proxy                              2      14d
kubeadm-config                            2      14d
kubelet-config-1.17                          1      14d


flannel只支持網絡通信,可是不支持網絡策略。

    callco網絡通信和網絡策略都支持。

    canel:flanel+callco合起來的功能。


lannel支持多種後端:

    1.Vxlan

        1.1 vxlan  默認

        1.2 Dirextrouting

    2.host-gw:Host Gateway  #不推薦,只能在二層網絡中,不支持跨網絡,若是有成千上萬的Pod,容易產生廣播風暴

    3.UDP:性能差


  兩個節點上的pod能夠藉助flannel隧道進行通訊。默認使用的VxLAN協議,由於它有額外開銷,因此性能有點低。

    flannel第二種協議叫host-gw(host gateway),即Node節點把本身的網絡接口當作pod的網關使用,從而使不一樣節點上的node進行通訊,這個性能比VxLAN高,由於它沒有額外開銷。不過他有個缺點, 就是各node節點必須在同一個網段中 ,不建議使用該模式。

     另外,若是兩個pod所在節點在同一個網段中 ,可讓VxLAN也支持host-gw的功能, 即直接經過物理網卡的網關路由轉發,而不用隧道flannel疊加,從而提升了VxLAN的性能,這種flannel的功能叫directrouting


設置flannel的網絡模式:

   k8s版本1.7 默認的模式directrouting

[root@k8s-3 ~]# kubectl edit configmap -n kube-system kube-flannel-cfg
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "Directrouting":true
        }
    }
相關文章
相關標籤/搜索