溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

k83中的calico網(wǎng)絡(luò)策略

發(fā)布時(shí)間:2020-06-16 14:43:36 來(lái)源:億速云 閱讀:573 作者:元一 欄目:系統(tǒng)運(yùn)維

Calico概念

將系統(tǒng)微服務(wù)化后采用dubbo框架開(kāi)發(fā)部署解決模塊之間內(nèi)部調(diào)用關(guān)系。Dubbo框架中生產(chǎn)者組件會(huì)自動(dòng)啟動(dòng)一個(gè)服務(wù)端口,在DCOS平臺(tái)采用彈性伸縮過(guò)程中需要考慮服務(wù)組件端口沖突和跨容器訪問(wèn)網(wǎng)絡(luò)問(wèn)題。于是引入calico網(wǎng)絡(luò)方案來(lái)解決dubbo框架服務(wù)調(diào)用問(wèn)題。

Calico是一個(gè)純3層的數(shù)據(jù)中心網(wǎng)絡(luò)方案,而且無(wú)縫集成像OpenStack這種IaaS云架構(gòu),能夠提供可控的VM、容器、裸機(jī)之間的IP通信。

Calico的原理是通過(guò)修改每個(gè)主機(jī)節(jié)點(diǎn)上的iptables和路由表規(guī)則,實(shí)現(xiàn)容器間數(shù)據(jù)路由和訪問(wèn)控制,并通過(guò)Etcd協(xié)調(diào)節(jié)點(diǎn)配置信息的。因此Calico服務(wù)本身和許多分布式服務(wù)一樣,需要運(yùn)行在集群的每一個(gè)節(jié)點(diǎn)上。

常見(jiàn)的CNI網(wǎng)絡(luò)插件包含以下幾種:

Flannel:為Kubernetes提供疊加網(wǎng)絡(luò)的網(wǎng)絡(luò)插件,基于TUN/TAP隧道技術(shù),使用UDP封裝IP報(bào)文進(jìn)行創(chuàng)建疊 加網(wǎng)絡(luò),借助etcd維護(hù)網(wǎng)絡(luò)的分配情況,缺點(diǎn):無(wú)法支持網(wǎng)絡(luò)策略訪問(wèn)控制。
Calico:基于BGP的三層網(wǎng)絡(luò)插件,也支持網(wǎng)絡(luò)策略進(jìn)而實(shí)現(xiàn)網(wǎng)絡(luò)的訪問(wèn)控制;它在每臺(tái)主機(jī)上都運(yùn)行一個(gè)虛擬路由,利用Linux內(nèi)核轉(zhuǎn)發(fā)網(wǎng)絡(luò)數(shù)據(jù)包,并借助iptables實(shí)現(xiàn)防火墻功能。實(shí)際上Calico最后的實(shí)現(xiàn)就是將每臺(tái)主機(jī)都變成了一臺(tái)路由器,將各個(gè)網(wǎng)絡(luò)進(jìn)行連接起來(lái),實(shí)現(xiàn)跨主機(jī)通信的功能。
Canal:由Flannel和Calico聯(lián)合發(fā)布的一個(gè)統(tǒng)一網(wǎng)絡(luò)插件,提供CNI網(wǎng)絡(luò)插件,并支持網(wǎng)絡(luò)策略實(shí)現(xiàn)。
其他的還包括Weave Net、Contiv、OpenContrail、Romana、NSX-T、kube-router等等。而Flannel和Calico是目前最流行的選擇方案。

1.全部拒絕

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-egress
  namespace: cs1
  #應(yīng)用于cs1 名稱空間,不寫名稱空間對(duì)default應(yīng)用
spec:
  podSelector: {}
  ingress:
  egress:
  #定義出站規(guī)則,這里沒(méi)有寫任何策略,表示全部拒絕。
  policyTypes:
  - Egress
  - Ingress
  #這里面有Egress就表示要定義出站規(guī)則,不寫Egress就是默認(rèn)通行,Ingress是入站原理一樣
  #建議大家把兩個(gè)都寫上去 然后使用"podSelector:" 來(lái)控制是否能通行

2.全部允許

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-egress
  namespace: cs1
spec:
  podSelector: {}
  ingress:
  - {}
  #這樣表示"ingress"方向的全部允許通行
  egress:
  - {}
  #這樣表示"egress"方向的全部允許通行
  policyTypes:
  - Egress
  - Ingress

這個(gè)網(wǎng)絡(luò)策略只對(duì)名稱空間起效,宿主機(jī)依然可以訪問(wèn)

3.作用范圍

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name:  deny-all
  namespace: default
  #只作用于 default 名稱空間
spec:
  podSelector:
  #匹配pod 范圍 如果匹配該名稱空間的所有POD 輸入"{}" 即可
    matchLabels:
      access: "true"
      #匹配POD中有 access=true的標(biāo)簽
  policyTypes:
  - Ingress
  - Egress
  ingress:
  egress:

4.限制IP策略

k83中的calico網(wǎng)絡(luò)策略
#上圖每個(gè)cs容器的IP

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name:  deny-all
spec:
  podSelector: {}
  policyTypes:
  - Egress
  - Ingress
  ingress:
  egress:
    - to:
    #注意:egress用to,ingress用from
      - ipBlock:
          cidr: 192.168.0.0/16
          #放行192.168.0.0/16網(wǎng)絡(luò)
          except:
          - 192.168.94.134/32
          #但不包括這個(gè)ip

k83中的calico網(wǎng)絡(luò)策略
exec進(jìn)入pod 能看見(jiàn)ping192.168.94.134 這個(gè)IP是不通的

5.基于名稱空間label限制

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: namespace-allow
  namespace: default
spec:
  policyTypes: ["Ingress"]
  podSelector: {}
  ingress:
   - from:
     - namespaceSelector:
        matchLabels:
          name: cs1
                    #表示只有打了"name=cs1"的名稱空間才允許進(jìn)

6.基于名稱空間label限制滿足多個(gè)條件

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: namespace-allow
  namespace: default
spec:
  policyTypes: ["Ingress","Egress"]
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchExpressions:
        - key: name
          operator: In
          values: ["cs1","cs2"]
          #中括號(hào)里面的可以 與default名稱空間 ingress通信
                    #表示,名稱空間有標(biāo)簽name=cs1,name=cs2 的 可以與default名稱空間通信

7基于pod label

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: namespace-allow
  namespace: default
spec:
  policyTypes: ["Ingress"]
  podSelector: {}
  ingress:
  - from:
    - podSelector:
        matchLabels:
          access: "true"
   #允許pod 便簽有 access=true的通行

#基于pod label 實(shí)驗(yàn)沒(méi)成功不知道啥問(wèn)題

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI