Kubernetes網絡方案 Flannel和calico

摘抄某博客api

1.   Flannel

Flannel是爲kubernetes設計的一個很是簡潔的多節點三層網絡方案,解決不一樣host上的容器互聯問題,原理是爲每一個host分配一個subnet,容器今後subnet中分配IP,這些IP能夠在host間路由,容器間無需NAT和port  mapping就能夠跨主機通訊,每一個subnet都是從一個更大的IP池中劃分的,flannel會在每一個host上面運行一個守護進程flanneld,其職責就是從大池子中分配subnet,爲了各個主機間共享信息,flannel用etcd存放網絡配置、已分配的subnet、host的IP 等信息。安全

Flannel的節點間有三種通訊方式:網絡

1.  VXLAN:默認配置,利用內核級別的VXLAN來封裝host之間傳送的包。架構

2.  Host-gw:二層網絡配置,不支持雲環境,經過在host的路由表中直接建立到其餘主機subnet的路由條目。app

3.  Udp:一般用於debugspa

 

提示:Subnet在主機上的設置路徑/run/flannel/subnet.env插件

2.   Calico

Calico是一個比較完整的項目,比較注重安全轉爲雲環境設置,是一個三層的數據中心網絡架構,無需依託overlay網絡,通過生產環境的驗證。debug

Calico在每一個計算節點利用Linux Kernel實現了一個高效的vRouter來負責數據轉發,而每一個vRouter經過BGP協議負責把本身上運行的workload的路由信息向整個Calico網絡內傳播,小規模部署能夠直接互聯,大規模部署可經過指定的BGP route reflector來完成。設計

Calico基於iptables還提供了豐富而靈活的網絡Policy,保證經過各個節點上的ACLs來提供workload的多租戶隔離、安全組以及其餘可達性限制等功能。代理

3.   NetworkPolicy

1)         kube-apiserver必須開啓運行時extensions/v1beta1/networkpolicies,即設置啓動參數:--runtime-config=extensions/v1beta1/networkpolicies=true

2)         kubelet必須啓用cni網絡插件,即設置啓動參數:--network-plugin=cni

3)         kube-proxy必須啓用iptables代理模式,這是默認模式,能夠不用設置

4)         kube-proxy不得啓用--masquerade-all,這會跟calico衝突

5)         安裝calico組件

6)         Namespaces中添加

annotations:

    net.beta.kubernetes.io/network-policy: |

      {

        "ingress": {

          "isolation": "DefaultDeny"

        }

      }

實現多租戶,namespaces之間隔離

相關文章
相關標籤/搜索